[
  {
    "path": ".gitignore",
    "content": "[Tt]humbs.db\r\n*.suo\r\n*.csproj.user\r\n*.pubxml.user\r\n[Dd]ebug/\r\n[Rr]elease/\r\n[Bb]in/\r\n[Pp]ackages/\r\n.DS_Store\r\n._.DS_Store\r\n._*\r\n.vs/\r\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"GamestatsBase\"]\n\tpath = GamestatsBase\n\turl = git@github.com:mm201/GamestatsBase.git\n\tbranch = master\n"
  },
  {
    "path": "GlobalTerminalService/GTServer4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Data;\nusing System.Net.Sockets;\nusing System.Diagnostics;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GlobalTerminalService\n{\n    public class GTServer4 : GTServerBase\n    {\n        public GTServer4()\n            : base(12400, false)\n        {\n            Initialize();\n        }\n\n        public GTServer4(int threads)\n            : base(12400, false, threads)\n        {\n            Initialize();\n        }\n\n        public GTServer4(int threads, int timeout)\n            : base(12400, false, threads, timeout)\n        {\n            Initialize();\n        }\n\n        private void Initialize()\n        {\n\n        }\n        \n        protected override byte[] ProcessRequest(byte[] data, TcpClient c)\n        {\n            int length = BitConverter.ToInt32(data, 0);\n            AssertHelper.Equals(length, data.Length);\n\n            RequestTypes4 requestType = (RequestTypes4)data[4];\n            StringBuilder logEntry = new StringBuilder();\n            logEntry.AppendFormat(\"Handling Generation IV {0} request.\\nHost: {1}\", requestType, c.Client.RemoteEndPoint);\n            logEntry.AppendLine();\n            EventLogEntryType type = EventLogEntryType.Information;\n\n            CryptMessage(data);\n\n            MemoryStream response = new MemoryStream();\n            response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4); // placeholder for length\n            response.WriteByte((byte)requestType);\n            response.WriteByte(data[5]);\n\n            try\n            {\n                int pid = BitConverter.ToInt32(data, 8);\n                byte version = data[0x0c];\n                byte language = data[0x0d];\n                logEntry.AppendFormat(\"pid: {0}\", pid);\n                logEntry.AppendLine();\n\n                switch (requestType)\n                {\n                    #region Box upload\n                    case RequestTypes4.BoxUpload:\n                    {\n                        if (data.Length != 0x360)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        BoxLabels4 label = (BoxLabels4)BitConverter.ToInt32(data, 0x140);\n                        byte[] boxData = new byte[0x21c];\n                        Array.Copy(data, 0x144, boxData, 0, 0x21c);\n                        BoxRecord4 record = new BoxRecord4(pid, label, 0, boxData);\n                        ulong serial = Database.Instance.BoxUpload4(record);\n\n                        if (serial == 0)\n                        {\n                            logEntry.AppendLine(\"Uploaded box already in server.\");\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        logEntry.AppendFormat(\"Box {0} uploaded successfully.\", serial);\n                        logEntry.AppendLine();\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(serial), 0, 8);\n\n                    } break;\n                    case RequestTypes4.BoxSearch:\n                    {\n                        if (data.Length != 0x14c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // todo: validate or log some of this?\n                        BoxLabels4 label = (BoxLabels4)BitConverter.ToInt32(data, 0x144);\n\n                        logEntry.AppendFormat(\"Searching for {0} boxes.\", label);\n                        logEntry.AppendLine();\n\n                        BoxRecord4[] results = Database.Instance.BoxSearch4(label, 20);\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(results.Length), 0, 4);\n\n                        foreach (BoxRecord4 result in results)\n                        {\n                            response.Write(BitConverter.GetBytes(result.PID), 0, 4);\n                            response.Write(BitConverter.GetBytes((int)result.Label), 0, 4);\n                            response.Write(BitConverter.GetBytes(result.SerialNumber), 0, 8);\n                            // xxx: this may throw if there's database corruption\n                            response.Write(result.Data, 0, 0x21c);\n                        }\n                        logEntry.AppendFormat(\"Retrieved {0} boxes.\", results.Length);\n                        logEntry.AppendLine();\n\n                    } break;\n                    #endregion\n\n                    #region Dressup\n                    case RequestTypes4.DressupUpload:\n                    {\n                        if (data.Length != 0x220)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        byte[] dressupData = new byte[0xe0];\n                        Array.Copy(data, 0x140, dressupData, 0, 0xe0);\n                        DressupRecord4 record = new DressupRecord4(pid, 0, dressupData);\n                        ulong serial = Database.Instance.DressupUpload4(record);\n\n                        if (serial == 0)\n                        {\n                            logEntry.AppendLine(\"Uploaded dressup already in server.\");\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        logEntry.AppendFormat(\"Dressup {0} uploaded successfully.\", serial);\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(serial), 0, 8);\n\n                    } break;\n                    case RequestTypes4.DressupSearch:\n                    {\n                        if (data.Length != 0x14c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // todo: validate or log some of this?\n                        ushort species = BitConverter.ToUInt16(data, 0x144);\n\n                        logEntry.AppendFormat(\"Searching for dressups of species {0}.\", species);\n                        logEntry.AppendLine();\n\n                        DressupRecord4[] results = Database.Instance.DressupSearch4(species, 10);\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(results.Length), 0, 4);\n\n                        foreach (DressupRecord4 result in results)\n                        {\n                            response.Write(BitConverter.GetBytes(result.PID), 0, 4);\n                            response.Write(BitConverter.GetBytes(result.SerialNumber), 0, 8);\n                            response.Write(result.Data, 0, 0xe0);\n                        }\n                        logEntry.AppendFormat(\"Retrieved {0} dressup results.\", results.Length);\n                        logEntry.AppendLine();\n\n                    } break;\n                    #endregion\n\n                    #region Battle videos\n                    case RequestTypes4.BattleVideoUpload:\n                    {\n                        if (data.Length != 0x1e8c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        byte[] battlevidData = new byte[0x1d4c];\n                        Array.Copy(data, 0x140, battlevidData, 0, 0x1d4c);\n                        BattleVideoRecord4 record = new BattleVideoRecord4(pid, 0, battlevidData);\n                        ulong serial = Database.Instance.BattleVideoUpload4(record);\n\n                        if (serial == 0)\n                        {\n                            logEntry.AppendFormat(\"Uploaded battle video already in server.\");\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        logEntry.AppendFormat(\"Battle video {0} uploaded successfully.\", BattleVideoHeader4.FormatSerial(serial));\n                        logEntry.AppendLine();\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(serial), 0, 8);\n\n                    } break;\n                    case RequestTypes4.BattleVideoSearch:\n                    {\n                        if (data.Length != 0x15c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // todo: validate or log some of this?\n                        BattleVideoRankings4 ranking = (BattleVideoRankings4)BitConverter.ToUInt32(data, 0x140);\n                        ushort species = BitConverter.ToUInt16(data, 0x144);\n                        BattleVideoMetagames4 meta = (BattleVideoMetagames4)data[0x146];\n                        byte country = data[0x147];\n                        byte region = data[0x148];\n\n                        logEntry.Append(\"Searching for \");\n                        if (ranking != BattleVideoRankings4.None)\n                            logEntry.AppendFormat(\"{0}\", ranking);\n                        else\n                        {\n                            if (species != 0xffff)\n                                logEntry.AppendFormat(\"species {0}, \", species);\n                            logEntry.AppendFormat(\"{0}\", meta);\n                            if (country != 0xff)\n                                logEntry.AppendFormat(\", country {0}\", country);\n                            if (region != 0xff)\n                                logEntry.AppendFormat(\", region {0}\", region);\n                        }\n                        logEntry.AppendLine(\".\");\n\n                        BattleVideoHeader4[] results = Database.Instance.BattleVideoSearch4(species, ranking, meta, country, region, 30);\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(results.Length), 0, 4);\n\n                        foreach (BattleVideoHeader4 result in results)\n                        {\n                            response.Write(BitConverter.GetBytes(result.PID), 0, 4);\n                            response.Write(BitConverter.GetBytes(result.SerialNumber), 0, 8);\n                            response.Write(result.Data, 0, 0xe4);\n                        }\n                        logEntry.AppendFormat(\"Retrieved {0} battle video results.\", results.Length);\n                        logEntry.AppendLine();\n\n                    } break;\n                    case RequestTypes4.BattleVideoWatch:\n                    {\n                        if (data.Length != 0x14c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        ulong serial = BitConverter.ToUInt64(data, 0x140);\n                        BattleVideoRecord4 record = Database.Instance.BattleVideoGet4(serial, true);\n                        if (record == null)\n                        {\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            logEntry.AppendFormat(\"Requested battle video {0} was missing.\", BattleVideoHeader4.FormatSerial(serial));\n                            logEntry.AppendLine();\n                            type = EventLogEntryType.FailureAudit;\n                            break;\n                        }\n\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(record.PID), 0, 4);\n                        response.Write(BitConverter.GetBytes(record.SerialNumber), 0, 8);\n                        response.Write(record.Header.Data, 0, 0xe4);\n                        response.Write(record.Data, 0, 0x1c68);\n                        logEntry.AppendFormat(\"Retrieved battle video {0}.\", BattleVideoHeader4.FormatSerial(serial));\n                        logEntry.AppendLine();\n\n                    } break;\n                    case RequestTypes4.BattleVideoSaved:\n                    {\n                        if (data.Length != 0x148)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        ulong serial = BitConverter.ToUInt64(data, 0x140);\n\n                        if (Database.Instance.BattleVideoFlagSaved4(serial))\n                        {\n                            response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                            logEntry.AppendFormat(\"Battle video {0} flagged saved.\", BattleVideoHeader4.FormatSerial(serial));\n                            logEntry.AppendLine();\n                        }\n                        else\n                        {\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            logEntry.AppendFormat(\"Requested battle video {0} was missing.\", BattleVideoHeader4.FormatSerial(serial));\n                            logEntry.AppendLine();\n                        }\n                    } break;\n                    #endregion\n\n                    #region Trainer Rankings\n                    case RequestTypes4.TrainerRankingsHead:\n                    {\n                        if (data.Length != 0x140)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // AdmiralCurtiss's request: completely blank! (just the 0x140 byte header)\n\n                        // AdmiralCurtiss's response: \n                        // 0000: 0c000000f0550000 0128431c\n\n                        // Response format seems to be a list of the three record categories currently being collected.\n                        // 0x01: Hall of fame entries\n                        // 0x28: Completed GTS trades\n                        // 0x43: Facilities challenged at battle frontier\n                        // The purpose of 0x1c is unclear to me.\n\n                        if (Database.Instance.TrainerRankingsPerformRollover())\n                        {\n                            logEntry.AppendLine(\"Leaderboard rollover.\");\n                        }\n                        var recordTypes = Database.Instance.TrainerRankingsGetActiveRecordTypes();\n\n                        // todo: If we can be sure the player has already sent us their up to date records,\n                        // then we can lie here about the active records and collect more complete trainer\n                        // stats for better trainer profiles\n\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2);\n\n                        // The game will give error 10609 if the response is longer than 4 bytes.\n                        // The game will bluescreen if the response is shorter than 3 bytes.\n                        // The 4th byte is optional and I don't know what, if anything, it does.\n                        int i;\n                        for (i = 0; i < 3 && i < recordTypes.Count; i++)\n                        {\n                            response.WriteByte((byte)recordTypes[i]);\n                        }\n                        for (; i < 3; i++)\n                        {\n                            // Must be valid RecordTypes. If we pad with 0x00, it causes a bluescreen.\n                            response.WriteByte((byte)0x01);\n                        }\n                        response.WriteByte(0x1c); // todo: Find out the meaning of this 0x1c.\n\n                    } break;\n\n                    case RequestTypes4.TrainerRankingsSearch:\n                    {\n                        if (data.Length != 0x164)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // The request is important. It contains the player's records for the above three chosen categories.\n                        // It also (presumably) conveys which teams the player is a part of.\n                        // (Trainer Class, Birth Month, Favourite Pokémon)\n\n                        // AdmiralCurtiss's request:\n                        // 0140: 0c02050900000000 1800303b01000000\n                        // 0150: 0100000028000000 0000000043000000\n                        // 0160: 00000000\n\n                        // Hikari's request:\n                        // Platinum EN July AceTrainerF Gallade\n                        // 0140: 0c02070bdb010000 e200350f01000000\n                        // 0150: 0300000028000000 0800000043000000\n                        // 0160: 28000000\n\n                        // 140: Version\n                        // 141: Language\n                        // 142: Birth Month\n                        // 143: Trainer Class\n                        // 144-145: Favourite Pokémon\n                        // 146-14b: Unknown\n                        // 14c-163: Three record records\n\n                        // Record record contains 4 bytes of category and 4 bytes of my score in the category.\n\n                        // Note: Although the game gives instructions that only\n                        // your first submission will apply, I think it's more\n                        // fun if we allow you to update your results by\n                        // submitting again. In this way, you can race against\n                        // competing teams to get the highest score.\n                        var submission = new TrainerRankingsSubmission(pid, data, 0x140);\n                        Database.Instance.TrainerRankingsSubmit(submission);\n\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2);\n\n                        // The response is biig and contains all the records for both this week and last week.\n                        // This week lacks numbers because they're still growing and to make it a surprise.\n                        // Including more than 3 RecordTypes in the response will give error 10609.\n\n                        TrainerRankingsReport thisWeek = Database.Instance.TrainerRankingsGetPendingReport();\n                        thisWeek.PadResults();\n                        TrainerRankingsReport lastWeek = Database.Instance.TrainerRankingsGetReport(DateTime.MinValue, thisWeek.StartDate.AddDays(-1), 1).FirstOrDefault();\n                        if (lastWeek == null) lastWeek = GenerateFakeReport(thisWeek.StartDate.AddDays(-7),\n                            new TrainerRankingsRecordTypes[]\n                            {\n                                0, 0, 0\n                            });\n                        else\n                        {\n                            lastWeek.PadResults();\n                        }\n\n                        // Last week:\n                        foreach (var lbg in lastWeek.Leaderboards)\n                        {\n                            response.Write(BitConverter.GetBytes((int)lbg.RecordType), 0, 4);\n\n                            foreach (var lbe in lbg.LeaderboardTrainerClass.Entries)\n                            {\n                                response.WriteByte((byte)lbe.Team);\n                            }\n                            foreach (var lbe in lbg.LeaderboardTrainerClass.Entries)\n                            {\n                                response.Write(BitConverter.GetBytes(lbe.Score), 0, 8);\n                            }\n\n                            foreach (var lbe in lbg.LeaderboardBirthMonth.Entries)\n                            {\n                                response.WriteByte((byte)lbe.Team);\n                            }\n                            foreach (var lbe in lbg.LeaderboardBirthMonth.Entries)\n                            {\n                                response.Write(BitConverter.GetBytes(lbe.Score), 0, 8);\n                            }\n\n                            foreach (var lbe in lbg.LeaderboardFavouritePokemon.Entries)\n                            {\n                                response.Write(BitConverter.GetBytes((short)lbe.Team), 0, 2);\n                            }\n                            foreach (var lbe in lbg.LeaderboardFavouritePokemon.Entries)\n                            {\n                                response.Write(BitConverter.GetBytes(lbe.Score), 0, 8);\n                            }\n                        }\n\n                        // This week:\n                        foreach (var lbg in thisWeek.Leaderboards)\n                        {\n                            response.Write(BitConverter.GetBytes((int)lbg.RecordType), 0, 4);\n\n                            foreach (var lbe in lbg.LeaderboardTrainerClass.Entries)\n                            {\n                                response.WriteByte((byte)lbe.Team);\n                            }\n\n                            foreach (var lbe in lbg.LeaderboardBirthMonth.Entries)\n                            {\n                                response.WriteByte((byte)lbe.Team);\n                            }\n\n                            foreach (var lbe in lbg.LeaderboardFavouritePokemon.Entries)\n                            {\n                                response.Write(BitConverter.GetBytes((short)lbe.Team), 0, 2);\n                            }\n                        }\n\n                    } break;\n#endregion\n\n                    default:\n                        logEntry.AppendLine(\"Unrecognized request type.\");\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                        break;\n                }\n            }\n            catch (Exception ex)\n            {\n                logEntry.AppendFormat(\"Unhandled exception while handling request.\\nException: {0}\", ex.ToString());\n                logEntry.AppendLine();\n                type = EventLogEntryType.Error;\n                response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n            }\n\n            response.Flush();\n            byte[] responseData = response.ToArray();\n            WriteLength(responseData);\n            CryptMessage(responseData);\n\n            LogHelper.Write(logEntry.ToString(), type);\n            return responseData;\n        }\n\n        private void CryptMessage(byte[] message)\n        {\n            if (message.Length < 5) return;\n            byte padOffset = (byte)(message[0] + message[4]);\n\n            // encrypt and decrypt are the same operation...\n            for (int x = 5; x < message.Length; x++)\n                message[x] ^= m_pad[(x + padOffset) & 0xff];\n        }\n\n        public override string Title\n        {\n            get\n            {\n                return \"Generation IV Global Terminal\";\n            }\n        }\n\n        private static readonly byte[] m_pad = new byte[]\n        {\n            0x1F, 0x98, 0xA5, 0x46, 0x76, 0x5C, 0x3D, 0x0E,\n            0x93, 0x18, 0x33, 0x28, 0x0B, 0x07, 0x03, 0x82,\n            0x02, 0x43, 0x8A, 0x86, 0xDB, 0x38, 0x34, 0x19,\n            0xD6, 0xF9, 0x59, 0xB2, 0xAD, 0x6A, 0x7D, 0xBC,\n            0xEE, 0xE0, 0x3A, 0x3F, 0xCA, 0x4C, 0x25, 0x68,\n            0xF4, 0xA9, 0x5B, 0xF7, 0x22, 0x60, 0x5A, 0x6F,\n            0xFA, 0x1B, 0x79, 0xE9, 0x17, 0xB1, 0x00, 0x9C,\n            0xAA, 0x5E, 0x9D, 0xFF, 0xEA, 0xA0, 0x0D, 0x4B,\n            0x75, 0xF6, 0x61, 0x85, 0x5D, 0xBB, 0xDC, 0xFB,\n            0x64, 0x2E, 0x7A, 0xAB, 0xF1, 0xE8, 0x44, 0x0C,\n            0xB8, 0x8F, 0xA8, 0x0A, 0x8E, 0xBD, 0xE1, 0x3B,\n            0xFC, 0x3C, 0x9F, 0x1A, 0x56, 0xC5, 0xE2, 0xF5,\n            0x47, 0xD9, 0xD7, 0x8C, 0xCD, 0x97, 0xF0, 0x7B,\n            0x8B, 0xC3, 0x4F, 0x45, 0x04, 0x90, 0x81, 0x1E,\n            0x6B, 0xC9, 0xD3, 0x73, 0xC6, 0xE7, 0x24, 0xBA,\n            0x32, 0xF3, 0xC0, 0xEC, 0x57, 0xCC, 0xC4, 0xB6,\n            0xC1, 0xAE, 0xAF, 0x88, 0xF2, 0x84, 0xCE, 0x4A,\n            0x0F, 0x94, 0x41, 0xB4, 0x74, 0x2A, 0xD1, 0x70,\n            0x1C, 0xD4, 0xB0, 0xC2, 0x09, 0x08, 0x16, 0x9B,\n            0xB5, 0x8D, 0x2B, 0xD2, 0x89, 0xB7, 0x99, 0xA1,\n            0x30, 0x65, 0x54, 0x40, 0x96, 0x71, 0xFE, 0xBF,\n            0x31, 0x06, 0xE5, 0x14, 0xE6, 0xDA, 0x48, 0x26,\n            0xAC, 0x87, 0x9A, 0xD8, 0xA6, 0xEB, 0x92, 0xCF,\n            0xFD, 0x77, 0x1D, 0x21, 0x9E, 0x36, 0x35, 0x53,\n            0x3E, 0xD0, 0xD5, 0x62, 0x58, 0x5F, 0x63, 0x7C,\n            0x7E, 0x52, 0x29, 0x12, 0x2C, 0x78, 0x05, 0x91,\n            0x55, 0xE3, 0xA2, 0xB9, 0xF8, 0x50, 0x95, 0x13,\n            0x80, 0x7F, 0x11, 0x27, 0xCB, 0x37, 0x4E, 0x51,\n            0x15, 0xEF, 0xA7, 0x72, 0x4D, 0x83, 0x49, 0xA4,\n            0x69, 0xDE, 0x20, 0xA3, 0x67, 0xDF, 0x10, 0x42,\n            0x39, 0x6C, 0x2D, 0xC7, 0x23, 0xE4, 0xDD, 0xED,\n            0xBE, 0x66, 0xB3, 0x2F, 0x01, 0x6E, 0x6D, 0xC8,\n        };\n\n        private static TrainerRankingsLeaderboardEntry[] GenerateFakeData(int entryCount, int minTeam, int teamCount, int maxScore)\n        {\n            Random scoreRandomizer = new Random();\n            return Enumerable.Range(minTeam, teamCount).Select(i => new TrainerRankingsLeaderboardEntry(i, scoreRandomizer.Next(maxScore)))\n                .OrderBy(e => -e.Score).Take(entryCount).ToArray();\n        }\n\n        private static TrainerRankingsReport GenerateFakeReport(DateTime startDate, TrainerRankingsRecordTypes[] recordTypes)\n        {\n            var leaderboards = recordTypes.Select(r => new TrainerRankingsLeaderboardGroup(r,\n                new TrainerRankingsLeaderboard(TrainerRankingsTeamCategories.TrainerClass, GenerateFakeData(16, 0, 16, 100000)),\n                new TrainerRankingsLeaderboard(TrainerRankingsTeamCategories.BirthMonth, GenerateFakeData(12, 1, 12, 100000)),\n                new TrainerRankingsLeaderboard(TrainerRankingsTeamCategories.FavouritePokemon, GenerateFakeData(20, 1, 493, 100000)))).ToArray();\n\n            return new TrainerRankingsReport(startDate, startDate.AddDays(7), leaderboards);\n        }\n    }\n\n    internal enum RequestTypes4 : byte\n    {\n        BoxUpload = 0x08,\n        BoxSearch = 0x09,\n\n        DressupUpload = 0x20,\n        DressupSearch = 0x21,\n\n        BattleVideoUpload = 0xd8,\n        BattleVideoSearch = 0xd9,\n        BattleVideoWatch = 0xda,\n        BattleVideoSaved = 0xdb,\n\n        TrainerRankingsHead = 0xf0,\n        TrainerRankingsSearch = 0xf1\n    }\n}\n"
  },
  {
    "path": "GlobalTerminalService/GTServer5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\nusing System.IO;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Data;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Net.Sockets;\nusing System.Diagnostics;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GlobalTerminalService\n{\n    public class GTServer5 : GTServerBase\n    {\n        public GTServer5()\n            : base(12401, true)\n        {\n            Initialize();\n        }\n\n        public GTServer5(int threads)\n            : base(12401, true, threads)\n        {\n            Initialize();\n        }\n\n        public GTServer5(int threads, int timeout)\n            : base(12401, true, threads, timeout)\n        {\n            Initialize();\n        }\n\n        public GTServer5(int threads, int timeout, X509Certificate2 certificate)\n            : base(12401, true, threads, timeout, certificate)\n        {\n            Initialize();\n        }\n\n        private void Initialize()\n        {\n\n        }\n\n        protected override byte[] ProcessRequest(byte[] data, TcpClient c)\n        {\n            int length = BitConverter.ToInt32(data, 0);\n            AssertHelper.Equals(length, data.Length);\n\n            RequestTypes5 requestType = (RequestTypes5)data[4];\n            StringBuilder logEntry = new StringBuilder();\n            logEntry.AppendFormat(\"Handling Generation V {0} request.\\nHost: {1}\", requestType, c.Client.RemoteEndPoint);\n            logEntry.AppendLine();\n            EventLogEntryType type = EventLogEntryType.Information;\n\n            MemoryStream response = new MemoryStream();\n            response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4); // placeholder for length\n            response.WriteByte((byte)requestType);\n            response.WriteByte(data[5]);\n\n            try\n            {\n                int pid = BitConverter.ToInt32(data, 8);\n                byte version = data[0x0c];\n                byte language = data[0x0d];\n                logEntry.AppendFormat(\"pid: {0}\", pid);\n                logEntry.AppendLine();\n\n                switch (requestType)\n                {\n                    #region Musicals\n                    case RequestTypes5.MusicalUpload:\n                    {\n                        if (data.Length != 0x370)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        byte[] musicalData = new byte[0x230];\n                        Array.Copy(data, 0x140, musicalData, 0, 0x230);\n                        MusicalRecord5 record = new MusicalRecord5(pid, 0, musicalData);\n                        ulong serial = Database.Instance.MusicalUpload5(record);\n\n                        if (serial == 0)\n                        {\n                            logEntry.AppendLine(\"Uploaded musical already in server.\");\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        logEntry.AppendFormat(\"Musical {0} uploaded successfully.\", serial);\n                        logEntry.AppendLine();\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(serial), 0, 8);\n\n                    } break;\n                    case RequestTypes5.MusicalSearch:\n                    {\n                        if (data.Length != 0x14c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // todo: validate or log some of this?\n                        ushort species = BitConverter.ToUInt16(data, 0x144);\n\n                        logEntry.AppendFormat(\"Searching for musical photos of species {0}.\", species);\n                        logEntry.AppendLine();\n\n                        MusicalRecord5[] results = Database.Instance.MusicalSearch5(species, 5);\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(results.Length), 0, 4);\n\n                        foreach (MusicalRecord5 result in results)\n                        {\n                            response.Write(BitConverter.GetBytes(result.PID), 0, 4);\n                            response.Write(BitConverter.GetBytes(result.SerialNumber), 0, 8);\n                            response.Write(result.Data, 0, 0x230);\n                        }\n                        logEntry.AppendFormat(\"Retrieved {0} musical results.\", results.Length);\n                        logEntry.AppendLine();\n\n                    } break;\n                    #endregion\n\n                    #region Battle videos\n                    case RequestTypes5.BattleVideoUpload:\n                    {\n                        if (data.Length != 0x1ae8)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n                        int sigLength = BitConverter.ToInt32(data, 0x19e4);\n                        if (sigLength > 0x100 || sigLength < 0x00)\n                        {\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        byte[] battlevidData = new byte[0x18a4];\n\n                        Array.Copy(data, 0x140, battlevidData, 0, 0x18a4);\n                        BattleVideoRecord5 record = new BattleVideoRecord5(pid, 0, battlevidData);\n                        byte[] vldtSignature = new byte[sigLength];\n                        Array.Copy(data, 0x19e8, vldtSignature, 0, sigLength);\n                        // todo: validate signature.\n\n                        ulong serial = Database.Instance.BattleVideoUpload5(record);\n\n                        if (serial == 0)\n                        {\n                            logEntry.AppendLine(\"Uploaded battle video already in server.\");\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        logEntry.AppendFormat(\"Battle video {0} uploaded successfully.\", BattleVideoHeader4.FormatSerial(serial));\n                        logEntry.AppendLine();\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(serial), 0, 8);\n\n                    } break;\n                    case RequestTypes5.BattleVideoSearch:\n                    {\n                        if (data.Length != 0x15c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        // todo: validate or log some of this?\n                        BattleVideoRankings5 ranking = (BattleVideoRankings5)BitConverter.ToUInt32(data, 0x140);\n                        ushort species = BitConverter.ToUInt16(data, 0x144);\n                        BattleVideoMetagames5 meta = (BattleVideoMetagames5)data[0x146];\n                        \n                        // Byte 148 contains a magic number related to the searched metagame.\n                        // If 0, disable metagame search. Metagame being 00 is insufficient\n                        // since that value could mean Battle Subway Single.\n                        if (data[0x148] == 0x00) meta = BattleVideoMetagames5.SearchNone;\n\n                        byte country = data[0x14a];\n                        byte region = data[0x14b];\n\n                        logEntry.Append(\"Searching for \");\n                        if (ranking != BattleVideoRankings5.None)\n                            logEntry.AppendFormat(\"{0}\", ranking);\n                        else\n                        {\n                            if (species != 0xffff)\n                                logEntry.AppendFormat(\"species {0}, \", species);\n                            logEntry.AppendFormat(\"{0}\", meta);\n                            if (country != 0xff)\n                                logEntry.AppendFormat(\", country {0}\", country);\n                            if (region != 0xff)\n                                logEntry.AppendFormat(\", region {0}\", region);\n                        }\n                        logEntry.AppendLine(\".\");\n\n                        BattleVideoHeader5[] results = Database.Instance.BattleVideoSearch5(species, ranking, meta, country, region, 30);\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(results.Length), 0, 4);\n\n                        foreach (BattleVideoHeader5 result in results)\n                        {\n                            response.Write(BitConverter.GetBytes(result.PID), 0, 4);\n                            response.Write(BitConverter.GetBytes(result.SerialNumber), 0, 8);\n                            response.Write(result.Data, 0, 0xc4);\n                        }\n                        logEntry.AppendFormat(\"Retrieved {0} battle video results.\", results.Length);\n                        logEntry.AppendLine();\n\n                    } break;\n                    case RequestTypes5.BattleVideoWatch:\n                    {\n                        if (data.Length != 0x14c)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        ulong serial = BitConverter.ToUInt64(data, 0x140);\n                        BattleVideoRecord5 record = Database.Instance.BattleVideoGet5(serial, true);\n                        if (record == null)\n                        {\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            logEntry.AppendFormat(\"Requested battle video {0} was missing.\", BattleVideoHeader4.FormatSerial(serial));\n                            logEntry.AppendLine();\n                            type = EventLogEntryType.FailureAudit;\n                            break;\n                        }\n\n                        response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                        response.Write(BitConverter.GetBytes(record.PID), 0, 4);\n                        response.Write(BitConverter.GetBytes(record.SerialNumber), 0, 8);\n                        response.Write(record.Header.Data, 0, 0xc4);\n                        response.Write(record.Data, 0, 0x17e0);\n                        logEntry.AppendFormat(\"Retrieved battle video {0}.\", BattleVideoHeader4.FormatSerial(serial));\n                        logEntry.AppendLine();\n\n                    } break;\n                    case RequestTypes5.BattleVideoSaved:\n                    {\n                        if (data.Length != 0x148)\n                        {\n                            logEntry.AppendLine(\"Length did not validate.\");\n                            type = EventLogEntryType.FailureAudit;\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            break;\n                        }\n\n                        ulong serial = BitConverter.ToUInt64(data, 0x140);\n\n                        if (Database.Instance.BattleVideoFlagSaved5(serial))\n                        {\n                            response.Write(new byte[] { 0x00, 0x00 }, 0, 2); // result code (0 for OK)\n                            logEntry.AppendFormat(\"Battle video {0} flagged saved.\", BattleVideoHeader4.FormatSerial(serial));\n                            logEntry.AppendLine();\n                        }\n                        else\n                        {\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                            logEntry.AppendFormat(\"Requested battle video {0} was missing.\", BattleVideoHeader4.FormatSerial(serial));\n                            logEntry.AppendLine();\n                        }\n                    } break;\n                    #endregion\n\n                    default:\n                        logEntry.AppendLine(\"Unrecognized request type.\");\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n                        break;\n                }\n            }\n            catch (Exception ex)\n            {\n                logEntry.AppendFormat(\"Unhandled exception while handling request.\\nException: {0}\", ex.ToString());\n                logEntry.AppendLine();\n                response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\n            }\n\n            response.Flush();\n            byte[] responseData = response.ToArray();\n            WriteLength(responseData);\n\n            LogHelper.Write(logEntry.ToString(), type);\n            return responseData;\n        }\n\n        private byte Byte6(RequestTypes5 type)\n        {\n            switch (type)\n            {\n                case RequestTypes5.MusicalUpload:\n                case RequestTypes5.MusicalSearch:\n                    return 0x52;\n                case RequestTypes5.BattleVideoUpload:\n                case RequestTypes5.BattleVideoSearch:\n                case RequestTypes5.BattleVideoWatch:\n                case RequestTypes5.BattleVideoSaved:\n                    return 0x55;\n                default:\n                    return 0x00;\n            }\n        }\n\n        public override string Title\n        {\n            get \n            {\n                return \"Generation V Global Terminal\";\n            }\n        }\n    }\n\n    internal enum RequestTypes5 : byte\n    {\n        MusicalUpload = 0x08,\n        MusicalSearch = 0x09,\n\n        BattleVideoUpload = 0xf0,\n        BattleVideoSearch = 0xf1,\n        BattleVideoWatch = 0xf2,\n        BattleVideoSaved = 0xf3\n    }\n}\n"
  },
  {
    "path": "GlobalTerminalService/GTServerBase.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Net.Sockets;\r\nusing System.Security.Cryptography.X509Certificates;\r\nusing System.Net.Security;\r\nusing System.Net;\r\nusing PkmnFoundations.Support;\r\nusing System.Diagnostics;\r\n\r\nnamespace PkmnFoundations.GlobalTerminalService\r\n{\r\n    public abstract class GTServerBase\r\n    {\r\n        public GTServerBase(int port) \r\n            : this(port, false, 16, 5000)\r\n        {\r\n        }\r\n\r\n        public GTServerBase(int port, bool useSsl)\r\n            : this(port, useSsl, 16, 5000)\r\n        {\r\n        }\r\n\r\n        public GTServerBase(int port, bool useSsl, int threads)\r\n            : this(port, useSsl, threads, 5000)\r\n        {\r\n        }\r\n\r\n        // todo: It would probably be better to load a custom certificate from\r\n        // app.config, but since the DS doesn't even validate it, there's no\r\n        // real point in securing it.\r\n        public GTServerBase(int port, bool useSsl, int threads, int timeout)\r\n            : this(port, useSsl, threads, timeout,\r\n            useSsl ? GetDefaultCertificate() : null)\r\n        {\r\n        }\r\n\r\n        public GTServerBase(int port, bool useSsl, int threads, int timeout, X509Certificate2 certificate)\r\n        {\r\n            Threads = threads;\r\n            Timeout = timeout;\r\n            UseSsl = useSsl;\r\n            Certificate = certificate;\r\n            m_workers = new List<Thread>(threads);\r\n            m_listener = new TcpListener(IPAddress.Any, port);\r\n        }\r\n\r\n        private static X509Certificate2 GetDefaultCertificate()\r\n        {\r\n            X509Store store = new X509Store(StoreLocation.LocalMachine);\r\n            store.Open(OpenFlags.ReadOnly);\r\n            var cers = \r\n                store.Certificates.Find(X509FindType.FindBySubjectName, \"pkgdsprod.nintendo.co.jp\", false)\r\n                .Cast<X509Certificate2>().Where(cer => cer.HasPrivateKey && cer.PrivateKey != null);\r\n\r\n            // fixme: Screen any found certificates for errors like \"The\r\n            // credentials supplied to the package were not recognized\" and use\r\n            // the dummy if none are good.\r\n            var cerFirst = cers.FirstOrDefault();\r\n            if (cerFirst != null) return cerFirst;\r\n\r\n            LogHelper.Write(\"X.509 certificate not found. Please add a certificate with subject \\\"pkgdsprod.nintendo.co.jp\\\" to the store. Using dummy certificate.\");\r\n            return new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + \"cert.pfx\", \"letmein\");\r\n        }\r\n\r\n        public int Threads\r\n        {\r\n            get;\r\n            protected set;\r\n        }\r\n\r\n        public int Timeout\r\n        {\r\n            get;\r\n            protected set;\r\n        }\r\n\r\n        protected bool UseSsl\r\n        {\r\n            get;\r\n            set;\r\n        }\r\n\r\n        protected X509Certificate Certificate { get; set; }\r\n\r\n        private List<Thread> m_workers;\r\n        private object m_lock = new object();\r\n        private bool m_closing;\r\n        private TcpListener m_listener;\r\n\r\n        public void BeginPolling()\r\n        {\r\n            lock (m_lock)\r\n            {\r\n                if (m_workers.Count > 0) return;\r\n\r\n                LogHelper.Write(String.Format(\"{0} server running on port {1} with {2} threads.\", Title, ((IPEndPoint)m_listener.LocalEndpoint).Port, Threads));\r\n\r\n                m_closing = false;\r\n                m_listener.Start();\r\n                for (int x = 0; x < Threads; x++)\r\n                {\r\n                    Thread t = new Thread(MainLoop);\r\n                    m_workers.Add(t);\r\n                    t.Start();\r\n                }\r\n            }\r\n        }\r\n\r\n        public void EndPolling()\r\n        {\r\n            lock (m_lock)\r\n            {\r\n                if (m_workers.Count == 0) return;\r\n\r\n                m_closing = true;\r\n                // wait for worker threads to exit\r\n                while (m_workers.Count > 0) \r\n                {\r\n                    Thread.Sleep(10);\r\n                }\r\n                m_listener.Stop();\r\n            }\r\n        }\r\n\r\n        private void MainLoop(object o)\r\n        {\r\n            int threadIndex = m_workers.IndexOf(Thread.CurrentThread);\r\n            // This is too chatty for an event log.\r\n            //LogHelper.Write(String.Format(\"Thread {0} begins.\", threadIndex));\r\n\r\n            while (!m_closing)\r\n            {\r\n                try\r\n                {\r\n                    if (!m_listener.Pending())\r\n                    {\r\n                        Thread.Sleep(10);\r\n                        continue;\r\n                    }\r\n                    using (TcpClient c = AcceptClient())\r\n                    {\r\n                        if (c == null)\r\n                        {\r\n                            Thread.Sleep(10);\r\n                            continue;\r\n                        }\r\n\r\n                        try\r\n                        {\r\n                            c.ReceiveTimeout = Timeout;\r\n                            c.SendTimeout = Timeout;\r\n\r\n                            Stream s = GetStream(c);\r\n                            BinaryReader br = new BinaryReader(s);\r\n\r\n                            int length = br.ReadInt32();\r\n                            if (length > 7820)\r\n                            {\r\n                                LogHelper.Write(String.Format(\"Indicated request length is over limit.\\nHost: {0}\", c.Client.RemoteEndPoint), EventLogEntryType.FailureAudit);\r\n                                continue;\r\n                            }\r\n                            if (length < 320)\r\n                            {\r\n                                LogHelper.Write(String.Format(\"Indicated request length is under limit.\\nHost: {0}\", c.Client.RemoteEndPoint), EventLogEntryType.FailureAudit);\r\n                                continue;\r\n                            }\r\n\r\n                            byte[] data = new byte[length];\r\n                            BitConverter.GetBytes(length).CopyTo(data, 0);\r\n\r\n                            int actualLength = br.ReadBlock(data, 4, length - 4);\r\n                            if (actualLength + 4 != length)\r\n                            {\r\n                                LogHelper.Write(String.Format(\"The client disconnected prematurely.\\nHost: {0}\", c.Client.RemoteEndPoint), EventLogEntryType.FailureAudit);\r\n                                continue;\r\n                            }\r\n\r\n                            byte[] response = ProcessRequest(data, c);\r\n                            s.Write(response, 0, response.Length);\r\n                        }\r\n                        catch (Exception ex)\r\n                        {\r\n                            LogHelper.Write(String.Format(\"Unhandled exception while handling request:\\nHost: {0}\\nException: {1}\", c.Client.RemoteEndPoint, ex.Message), EventLogEntryType.Error);\r\n                        }\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    LogHelper.Write(String.Format(\"Unhandled exception while handling request:\\nException: {0}\", ex.Message), EventLogEntryType.Error);\r\n                }\r\n            }\r\n\r\n            //LogHelper.Write(String.Format(\"Thread {0} ends.\", threadIndex));\r\n            m_workers.Remove(Thread.CurrentThread);\r\n        }\r\n\r\n        private TcpClient AcceptClient()\r\n        {\r\n            lock (m_listener)\r\n            {\r\n                if (!m_listener.Pending()) return null;\r\n                return m_listener.AcceptTcpClient();\r\n            }\r\n        }\r\n\r\n        private Stream GetStream(TcpClient c)\r\n        {\r\n            if (UseSsl)\r\n            {\r\n                // todo: If we target .NET Core 3+, we can manually enable RC4 cipher suites.\r\n                // https://github.com/dotnet/runtime/issues/23818\r\n                // The DS wants to use SSLv3 and one of the following ciphers:\r\n                // 0x0004 TLS_RSA_WITH_RC4_128_MD5\r\n                // 0x0005 TLS_RSA_WITH_RC4_128_SHA\r\n                // For now, the only functional approach is to enable these ciphers in the registry or via e.g. IISCrypto.\r\n                SslStream sslClient = new SslStream(c.GetStream());\r\n                sslClient.AuthenticateAsServer(Certificate, false, System.Security.Authentication.SslProtocols.Ssl3, false);\r\n                return sslClient;\r\n            }\r\n            else return c.GetStream();\r\n        }\r\n\r\n        protected abstract byte[] ProcessRequest(byte[] data, TcpClient c);\r\n\r\n        public abstract String Title { get; }\r\n\r\n        protected void WriteLength(byte[] message)\r\n        {\r\n            byte[] data = BitConverter.GetBytes(message.Length);\r\n            Array.Copy(data, 0, message, 0, 4);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "GlobalTerminalService/GlobalTerminalService.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PkmnFoundations.GlobalTerminalService</RootNamespace>\r\n    <AssemblyName>GlobalTerminalService</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile>\r\n    </TargetFrameworkProfile>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <StartupObject />\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Configuration.Install\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Management\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.ServiceProcess\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"GTServer4.cs\" />\r\n    <Compile Include=\"GTServer5.cs\" />\r\n    <Compile Include=\"GTServerBase.cs\" />\r\n    <Compile Include=\"ProjectInstaller.cs\">\r\n      <SubType>Component</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ProjectInstaller.Designer.cs\">\r\n      <DependentUpon>ProjectInstaller.cs</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Service1.cs\">\r\n      <SubType>Component</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Service1.Designer.cs\">\r\n      <DependentUpon>Service1.cs</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\r\n      <Project>{408EFC7E-C6B0-4160-8628-2679E34385CE}</Project>\r\n      <Name>Library</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n    <None Include=\"cert.pfx\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"ProjectInstaller.resx\">\r\n      <DependentUpon>ProjectInstaller.cs</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"Service1.resx\">\r\n      <DependentUpon>Service1.cs</DependentUpon>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "GlobalTerminalService/Program.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.ServiceProcess;\r\nusing System.Text;\r\nusing System.Threading;\r\n\r\nnamespace PkmnFoundations.GlobalTerminalService\r\n{\r\n    static class Program\r\n    {\r\n        /// <summary>\r\n        /// The main entry point for the application.\r\n        /// </summary>\r\n        static void Main()\r\n        {\r\n#if DEBUG\r\n            Service1 myService = new Service1();\r\n            myService.Start();\r\n            while (true) { Thread.Sleep(1000); }\r\n#else\r\n            ServiceBase[] ServicesToRun;\r\n            ServicesToRun = new ServiceBase[] \r\n\t\t\t{ \r\n\t\t\t\tnew Service1() \r\n\t\t\t};\r\n            ServiceBase.Run(ServicesToRun);\r\n#endif\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "GlobalTerminalService/ProjectInstaller.Designer.cs",
    "content": "﻿namespace PkmnFoundations.GlobalTerminalService\n{\n    partial class ProjectInstaller\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();\n            this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();\n            // \n            // serviceProcessInstaller1\n            // \n            this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.NetworkService;\n            this.serviceProcessInstaller1.Password = null;\n            this.serviceProcessInstaller1.Username = null;\n            // \n            // serviceInstaller1\n            // \n            this.serviceInstaller1.Description = \"Provides Global Terminal functionality to Pokémon games on the Nintendo DS.\";\n            this.serviceInstaller1.DisplayName = \"Global Terminal Service\";\n            this.serviceInstaller1.ServiceName = \"GlobalTerminalService\";\n            this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;\n            // \n            // ProjectInstaller\n            // \n            this.Installers.AddRange(new System.Configuration.Install.Installer[] {\n            this.serviceProcessInstaller1,\n            this.serviceInstaller1});\n\n        }\n\n        #endregion\n\n        private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;\n        private System.ServiceProcess.ServiceInstaller serviceInstaller1;\n    }\n}"
  },
  {
    "path": "GlobalTerminalService/ProjectInstaller.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Configuration.Install;\nusing System.Linq;\n\nnamespace PkmnFoundations.GlobalTerminalService\n{\n    [RunInstaller(true)]\n    public partial class ProjectInstaller : System.Configuration.Install.Installer\n    {\n        public ProjectInstaller()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "GlobalTerminalService/ProjectInstaller.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"serviceProcessInstaller1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"serviceInstaller1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>328, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayLargeIcon\" type=\"System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>False</value>\n  </metadata>\n</root>"
  },
  {
    "path": "GlobalTerminalService/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"GlobalTerminalService\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"GlobalTerminalService\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"47274bc4-d452-4eeb-acfb-6aedfe702a65\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "GlobalTerminalService/Service1.Designer.cs",
    "content": "﻿namespace PkmnFoundations.GlobalTerminalService\r\n{\r\n    partial class Service1\r\n    {\r\n        /// <summary> \r\n        /// Required designer variable.\r\n        /// </summary>\r\n        private System.ComponentModel.IContainer components = null;\r\n\r\n        /// <summary>\r\n        /// Clean up any resources being used.\r\n        /// </summary>\r\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        protected override void Dispose(bool disposing)\r\n        {\r\n            if (disposing && (components != null))\r\n            {\r\n                components.Dispose();\r\n            }\r\n            base.Dispose(disposing);\r\n        }\r\n\r\n        #region Component Designer generated code\r\n\r\n        /// <summary> \r\n        /// Required method for Designer support - do not modify \r\n        /// the contents of this method with the code editor.\r\n        /// </summary>\r\n        private void InitializeComponent()\r\n        {\r\n            // \r\n            // Service1\r\n            // \r\n            this.ServiceName = \"GlobalTerminalService\";\r\n\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "GlobalTerminalService/Service1.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.ServiceProcess;\r\nusing System.Text;\r\nusing PkmnFoundations.Support;\r\n\r\nnamespace PkmnFoundations.GlobalTerminalService\r\n{\r\n    public partial class Service1 : ServiceBase\r\n    {\r\n        public Service1()\r\n        {\r\n            InitializeComponent();\r\n#if !DEBUG\r\n            LogHelper.UseEventLog(this.EventLog);\r\n#endif\r\n        }\r\n\r\n        private GTServer4 m_server_4 = null;\r\n        private GTServer5 m_server_5 = null;\r\n\r\n        protected override void OnStart(string[] args)\r\n        {\r\n            Start();\r\n        }\r\n\r\n        public void Start()\r\n        {\r\n            if (m_server_4 == null) m_server_4 = new GTServer4();\r\n            if (m_server_5 == null) m_server_5 = new GTServer5();\r\n            m_server_4.BeginPolling();\r\n            m_server_5.BeginPolling();\r\n        }\r\n\r\n        protected override void OnStop()\r\n        {\r\n            if (m_server_4 != null) m_server_4.EndPolling();\r\n            // fixme: it waits for the GenIV server to stop completely before\r\n            // shutting down the GenV server. Should shut them both down async.\r\n            if (m_server_5 != null) m_server_5.EndPolling();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "GlobalTerminalService/Service1.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"$this.TrayLargeIcon\" type=\"System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>False</value>\n  </metadata>\n</root>"
  },
  {
    "path": "GlobalTerminalService/app.config",
    "content": "<?xml version=\"1.0\"?>\n\n<configuration>\n  \n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/>\n  </startup>\n\n  <runtime>\n    <!-- Too bad AppContexts are only supported on .NET 4.6+ and don't seem to override ciphers disabled in the registry anyway. -->\n    <AppContextSwitchOverrides value=\"Switch.System.Net.DontEnableSchUseStrongCrypto=true\"/>\n  </runtime>\n  \n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n\n</configuration>\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright © 2014-2023 Megan Edwards (mm201), all rights reserved\n\nYou may:\n* Run a private instance for development purposes.\n* Serve it privately to a LAN for personal use among a group of people you know.\n* Privately make changes.\n* Contribute those changes back to the author's original project which, at the\ntime of writing, is located at https://github.com/mm201/pkmn-classic-framework/\n. Such contributions will be subject to the author's choice of license.\n\nShould a period of 180 consecutive days elapse where the server operated or\nendorsed by the author (which, at the time of writing, is located at\nhttps://pkmnclassic.net/ ) remains offline, then you may take the contents of\nthis repository and rerelease them under the terms of the GNU Affero General\nPublic License. The full text of this license may, at time of writing, be found\nat https://www.gnu.org/licenses/agpl-3.0.en.html .\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MakeBaseStatTables/MakeBaseStatTables.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>MakeBaseStatTables</RootNamespace>\n    <AssemblyName>MakeBaseStatTables</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n    <NuGetPackageImportStamp>a6417236</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\System.Data.SQLite.Core.1.0.94.0\\lib\\net20\\System.Data.SQLite.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Data.SQLite.Linq, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\System.Data.SQLite.Linq.1.0.94.1\\lib\\net20\\System.Data.SQLite.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408efc7e-c6b0-4160-8628-2679e34385ce}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets\" Condition=\"Exists('..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "MakeBaseStatTables/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data.SQLite;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Data;\n\nnamespace MakeBaseStatTables\n{\n    /// <summary>\n    /// Builds some .txt data files from the Veekun data which require manual\n    /// edits.\n    /// </summary>\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            String veekunFilename;\n\n            if (args.Length < 1) veekunFilename = \"pokedex.sqlite\";\n            else veekunFilename = args[0];\n\n            if (veekunFilename.Contains(';')) throw new NotSupportedException(\"The character ; in filenames is not supported.\");\n            if (veekunFilename.Contains('?'))\n            {\n                Console.WriteLine(\"Usage: MakeBaseStatTables [filename]\");\n                Console.WriteLine(\"filename: Filename of Veekun sqlite database. Default: pokedex.sqlite\");\n                return;\n            }\n\n            using (SQLiteConnection connVeekun = new SQLiteConnection(\"Data Source=\" + veekunFilename + \"; Version=3\"))\n            {\n                connVeekun.Open();\n\n                SQLiteDataReader reader = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, \" +\n                    \"(SELECT base_stat FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 1) AS base_hp, \" +\n                    \"(SELECT base_stat FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 2) AS base_attack, \" +\n                    \"(SELECT base_stat FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 3) AS base_defense, \" +\n                    \"(SELECT base_stat FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 4) AS base_sp_attack, \" +\n                    \"(SELECT base_stat FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 5) AS base_sp_defense, \" +\n                    \"(SELECT base_stat FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 6) AS base_speed, \" +\n                    \"(SELECT effort FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 1) AS reward_hp, \" +\n                    \"(SELECT effort FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 2) AS reward_attack, \" +\n                    \"(SELECT effort FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 3) AS reward_defense, \" +\n                    \"(SELECT effort FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 4) AS reward_sp_attack, \" +\n                    \"(SELECT effort FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 5) AS reward_sp_defense, \" +\n                    \"(SELECT effort FROM pokemon_stats WHERE pokemon_id = pokemon_forms.pokemon_id AND stat_id = 6) AS reward_speed, \" +\n                    \"(SELECT type_id FROM pokemon_types WHERE pokemon_id = pokemon_forms.pokemon_id AND slot = 1) AS type1, \" +\n                    \"(SELECT type_id FROM pokemon_types WHERE pokemon_id = pokemon_forms.pokemon_id AND slot = 2) AS type2 \" +\n                    \"FROM pokemon_forms ORDER BY id\");\n\n                using (FileStream fs = File.Open(\"form_stats1.txt\", FileMode.Create))\n                {\n                    StreamWriter sw = new StreamWriter(fs);\n\n                    while (reader.Read())\n                    {\n                        sw.Write(\"{0:00000}\\t\", reader[\"id\"]);\n                        sw.Write(\"{0:00}\\t\", reader[\"type1\"] is DBNull ? 0 : Convert.ToInt32(reader[\"type1\"]));\n                        sw.Write(\"{0:00}\\t\", reader[\"type2\"] is DBNull ? 0 : Convert.ToInt32(reader[\"type2\"]));\n                        sw.Write(\"{0:000}\\t\", Convert.ToInt32(reader[\"base_hp\"]));\n                        sw.Write(\"{0:000}\\t\", Convert.ToInt32(reader[\"base_attack\"]));\n                        sw.Write(\"{0:000}\\t\", Convert.ToInt32(reader[\"base_defense\"]));\n                        sw.Write(\"{0:000}\\t\", Convert.ToInt32(reader[\"base_speed\"]));\n                        sw.Write(\"{0:000}\\t\", Convert.ToInt32(reader[\"base_sp_attack\"]));\n                        sw.Write(\"{0:000}\\t\", Convert.ToInt32(reader[\"base_sp_defense\"]));\n                        sw.Write(\"{0:0}\\t\", Convert.ToByte(reader[\"reward_hp\"]));\n                        sw.Write(\"{0:0}\\t\", Convert.ToByte(reader[\"reward_attack\"]));\n                        sw.Write(\"{0:0}\\t\", Convert.ToByte(reader[\"reward_defense\"]));\n                        sw.Write(\"{0:0}\\t\", Convert.ToByte(reader[\"reward_speed\"]));\n                        sw.Write(\"{0:0}\\t\", Convert.ToByte(reader[\"reward_sp_attack\"]));\n                        sw.WriteLine(\"{0:0}\", Convert.ToByte(reader[\"reward_sp_defense\"]));\n                    }\n                    sw.Close();\n                    fs.Close();\n                }\n                reader.Close();\n\n                reader = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, \" +\n                    \"(SELECT ability_id FROM pokemon_abilities WHERE pokemon_id = pokemon_forms.pokemon_id AND slot = 1) AS ability1, \" +\n                    \"(SELECT ability_id FROM pokemon_abilities WHERE pokemon_id = pokemon_forms.pokemon_id AND slot = 2) AS ability2, \" +\n                    \"(SELECT ability_id FROM pokemon_abilities WHERE pokemon_id = pokemon_forms.pokemon_id AND is_hidden = 1) AS ability_hidden \" +\n                    \"FROM pokemon_forms ORDER BY id\");\n                using (FileStream fs3 = File.Open(\"form_abilities3.txt\", FileMode.Create), \n                    fs4 = File.Open(\"form_abilities4.txt\", FileMode.Create),\n                    fs5 = File.Open(\"form_abilities5.txt\", FileMode.Create),\n                    fs6 = File.Open(\"form_abilities6.txt\", FileMode.Create))\n                {\n                    StreamWriter sw3 = new StreamWriter(fs3);\n                    StreamWriter sw4 = new StreamWriter(fs4);\n                    StreamWriter sw5 = new StreamWriter(fs5);\n                    StreamWriter sw6 = new StreamWriter(fs6);\n\n                    while (reader.Read())\n                    {\n                        long id = Convert.ToInt64(reader[\"id\"]);\n\n                        if ((id <= 386) || (id >= 10000 && id <= 10033))\n                        {\n                            sw3.Write(\"{0:00000}\\t\", reader[\"id\"]);\n                            sw3.Write(\"{0:000}\\t\", reader[\"ability1\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability1\"]));\n                            sw3.Write(\"{0:000}\\t\", reader[\"ability2\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability2\"]));\n                            sw3.WriteLine(\"{0:000}\", 0);\n                        }\n                        else if ((id <= 493) || (id >= 10034 && id <= 10065))\n                        {\n                            sw4.Write(\"{0:00000}\\t\", reader[\"id\"]);\n                            sw4.Write(\"{0:000}\\t\", reader[\"ability1\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability1\"]));\n                            sw4.Write(\"{0:000}\\t\", reader[\"ability2\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability2\"]));\n                            sw4.WriteLine(\"{0:000}\", 0);\n                        }\n\n                        if ((id <= 649) || (id >= 10000 && id <= 10084))\n                        {\n                            sw5.Write(\"{0:00000}\\t\", reader[\"id\"]);\n                            sw5.Write(\"{0:000}\\t\", reader[\"ability1\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability1\"]));\n                            sw5.Write(\"{0:000}\\t\", reader[\"ability2\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability2\"]));\n                            sw5.WriteLine(\"{0:000}\", reader[\"ability_hidden\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability_hidden\"]));\n                        }\n                        else\n                        {\n                            sw6.Write(\"{0:00000}\\t\", reader[\"id\"]);\n                            sw6.Write(\"{0:000}\\t\", reader[\"ability1\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability1\"]));\n                            sw6.Write(\"{0:000}\\t\", reader[\"ability2\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability2\"]));\n                            sw6.WriteLine(\"{0:000}\", reader[\"ability_hidden\"] is DBNull ? 0 : Convert.ToInt32(reader[\"ability_hidden\"]));\n                        }\n                    }\n\n                    sw3.Close();\n                    sw4.Close();\n                    sw5.Close();\n                    sw6.Close();\n\n                    fs3.Close();\n                    fs4.Close();\n                    fs5.Close();\n                    fs6.Close();\n                }\n\n                connVeekun.Close();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "MakeBaseStatTables/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"MakeBaseStatTables\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"MakeBaseStatTables\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"e867b07c-6746-4495-8cd8-ad05b8463a8b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "MakeBaseStatTables/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  </configSections>\n  <startup>\n    \n  <supportedRuntime version=\"v2.0.50727\" /></startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Data.SQLite\" publicKeyToken=\"db937bc2d44ff139\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.0.91.0\" newVersion=\"1.0.91.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  \n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n      <provider invariantName=\"System.Data.SQLite.EF6\" type=\"System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6\" />\n    </providers>\n  </entityFramework>\n<system.data>\n    <DbProviderFactories>\n      <add name=\"SQLite Data Provider\" invariant=\"System.Data.SQLite\" description=\".NET Framework Data Provider for SQLite\" type=\"System.Data.SQLite.SQLiteFactory, System.Data.SQLite\" />\n    </DbProviderFactories>\n  </system.data></configuration>\n"
  },
  {
    "path": "MakeBaseStatTables/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"System.Data.SQLite\" version=\"1.0.94.1\" targetFramework=\"net35\" />\n  <package id=\"System.Data.SQLite.Core\" version=\"1.0.94.0\" targetFramework=\"net35\" />\n  <package id=\"System.Data.SQLite.Linq\" version=\"1.0.94.1\" targetFramework=\"net35\" />\n</packages>"
  },
  {
    "path": "README.md",
    "content": "# Poké Classic Framework\r\n\r\nhttps://pkmnclassic.net/\r\n\r\nPoké Classic Framework is a replacement server and class library for Pokémon\r\nGenerations 4 and 5. Poké Classic Network is the name of the server itself.\r\n\r\n## How to connect\r\n\r\nAltWFC is configured to automatically direct you to my servers. Follow the\r\n[instructions](https://github.com/polaris-/dwc_network_server_emulator/wiki) \r\nat their wiki to connect.\r\n\r\n## What works\r\n\r\n* GTS\r\n* Battle Videos\r\n* Dressup (PtHGSS)\r\n* Box uploads (PtHGSS)\r\n* Musical photos (BW1/2)\r\n* Wi-Fi Battle Tower and Subway\r\n* Trainer Rankings (PtHGSS)\r\n* Wi-Fi Plaza (PtHGSS) (Surveys still in progress)\r\n\r\nDirect communications are handled by \r\n[AltWFC](https://github.com/polaris-/dwc_network_server_emulator) and are\r\noutside the scope of this project. They work at the time of writing but \r\nhaven't been tested that thoroughly.\r\n\r\n## What doesn't\r\n\r\n* Game Sync\r\n* Rating Battles / Competitions\r\n\r\n## What's planned\r\n\r\n* A much more awesome website\r\n* Cheat detection\r\n* Stat checking in a similar manner as Pokécheck\r\n* Game Sync (I will need help with this!)\r\n\r\n## How you can help\r\n\r\nIf there's something you want to see, the best thing is to discuss it with me\r\nand prepare a pull request. You should also check for open issues marked\r\n[Help Wanted](https://github.com/mm201/pkmn-classic-framework/labels/help%20wanted).\r\nNot all of them require programming skill.\r\n\r\nThe most significant way you can help is simply by using it. The GTS is nothing\r\nwithout users. Get on there and start trading!\r\n\r\n## Credits\r\n\r\n* [Project Pokémon](https://projectpokemon.org/) for most of the original fake\r\nGTS reverse engineering work, file format and data structure descriptions, and\r\nmany ID number tables, including items and trendy phrases.\r\n* [Pipian](http://www.pipian.net/ierukana/) for more reverse engineering help,\r\nincluding the Battle Tower and Wi-fi Plaza.\r\n* [Nagato](https://github.com/polaris-), for help reverse engineering the Game\r\nSync protocol.\r\n* [Billy](https://billy.wales/) for help with GameSpy protocols and interfacing\r\nwith Wiimmfi.\r\n* Nagato and other contributors to the\r\n[AltWFC](https://github.com/barronwaffles/dwc_network_server_emulator) project,\r\nwhich this project depends on for basic Nintendo Wi-Fi fuctionality.\r\n* [Eevee](https://veekun.com/) for her Veekun Pokédex and large sprite rips.\r\n* [Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Main_Page) for most item\r\nsprites and Generation 3 item/text conversion tables.\r\n* [kaphotics](https://twitter.com/kaphotics) for the Pokémon mini sprite rips\r\nfrom ORAS.\r\n* [sosnek](https://github.com/sosnek) for help with held item validation.\r\n* [msikma](https://github.com/msikma/pokesprite) and \r\n[monsanto](https://github.com/smogon/sprites) for their sprite databases.\r\n* GatorShark and Magical for their\r\n[Spinda spot documentation](https://gatorshark.webs.com/SpindaDocumentation.htm)\r\nand [Python implementation](https://github.com/magical/spinda), respectively.\r\n"
  },
  {
    "path": "RenameImages/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\" />\n  </startup>\n</configuration>\n"
  },
  {
    "path": "RenameImages/Program.cs",
    "content": "﻿using PkmnFoundations.Data;\nusing PkmnFoundations.Pokedex;\nusing System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace RenameImages\n{\n    /// <summary>\n    /// Renames images obtained from Pokesprite. https://github.com/msikma/pokesprite\n    /// </summary>\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            string path;\n            char slash = Path.DirectorySeparatorChar;\n            ConnectionStringSettings css;\n\n            if (args.Length < 1) path = \".\" + slash + \"pkmn-sm\";\n            else path = args[0];\n\n            if (path.Contains('?'))\n            {\n                Console.WriteLine(\"h e l p\");\n                return;\n            }\n\n            while (path.Length > 0 && (path[path.Length - 1] == '/' || path[path.Length - 1] == '\\\\'))\n            {\n                path = path.Substring(0, path.Length - 1);\n            }\n            path = path + slash;\n\n            if (args.Length < 3)\n                css = ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"];\n            else\n                css = new ConnectionStringSettings(\"\", args[1], args[2]);\n\n            Database db = Database.CreateInstance(css);\n            Pokedex pokedex = new Pokedex(db, false);\n\n            foreach (var pair in pokedex.Forms)\n            {\n                Form form = pair.Value;\n                Species species = form.Species;\n                StringBuilder speciesNameBuilder = new StringBuilder(species.Name[\"EN\"].ToLowerInvariant());\n                speciesNameBuilder.Replace(\"\\'\", \"\");\n                speciesNameBuilder.Replace(\".\", \"\");\n                speciesNameBuilder.Replace(\"♀\", \"-f\");\n                speciesNameBuilder.Replace(\"♂\", \"-m\");\n                speciesNameBuilder.Replace('é', 'e');\n                speciesNameBuilder.Replace(' ', '-');\n                string speciesName = speciesNameBuilder.ToString();\n\n                // fixme: This is incorrect for Vivillon, Pumpkaboo, and Gourgeist, because their suffixless form is not form 0.\n                string oldFilename = (form.Value == 0) \n                    ? String.Format(\"{0}.png\", speciesName)\n                    : String.Format(\"{0}-{1}.png\", speciesName, form.Suffix);\n\n                string newFilename = (form.Suffix.Trim().Length == 0)\n                    ? String.Format(\"{0}.png\", species.NationalDex)\n                    : String.Format(\"{0}-{1}.png\", species.NationalDex, form.Suffix);\n\n                try\n                {\n                    File.Move(path + oldFilename, path + newFilename);\n                    Console.Write(\"{0} {1}\", oldFilename, newFilename);\n                }\n                catch (Exception ex)\n                {\n                    Console.Write(ex.Message);\n                }\n\n                if (form.Value == 0 && form.Suffix.Trim().Length != 0)\n                {\n                    try\n                    {\n                        string speciesFilename = String.Format(\"{0}.png\", species.NationalDex);\n                        File.Copy(path + newFilename, path + speciesFilename);\n                        Console.Write(\" {0}\", speciesFilename);\n                    }\n                    catch (Exception ex)\n                    {\n                        Console.WriteLine();\n                        Console.Write(ex.Message);\n                    }\n                }\n                Console.WriteLine();\n            }\n\n            Console.ReadKey();\n        }\n\n        private static string NormalizeFilename(string filename, string path)\n        {\n            if (filename.Length >= path.Length)\n            {\n                string pathPart = filename.Substring(0, path.Length);\n                if (pathPart == path) filename = filename.Substring(path.Length);\n            }\n            return filename.ToLowerInvariant().Trim();\n        }\n\n    }\n}\n"
  },
  {
    "path": "RenameImages/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"RenameImages\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"RenameImages\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"d8787475-2d21-4e60-9320-13fa55c979ac\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "RenameImages/RenameImages.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D8787475-2D21-4E60-9320-13FA55C979AC}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>RenameImages</RootNamespace>\n    <AssemblyName>RenameImages</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <Deterministic>true</Deterministic>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408efc7e-c6b0-4160-8628-2679e34385ce}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Roadmap.md",
    "content": "# Roadmap\n\nThis is a complete list of all the features I want the PCN server to have for me to consider it complete.\n\n## IV and V\n\n* GTS: cheat filter, legal request filter, search, history, player history, push notifications\n* Battle tower: room leaders, room history, player history, player's last party used, player's highest floor reached\n* Battle videos: Search, history, watch\n* Mystery gift: monthly rotation\n* Player profiles: login, view, permissions\n* Pokédex\n* Friend list management? I don’t know whether to handle this at the Trainer or User level.\n* I guess we can show friends lists in one’s own trainer profiles after game sync has happened, and have an Add as Friend button. (Add as Dream Pal?)\n* Permissions: Game progress (badges, medals, pokedex, battle tower, …), Friends, GTS history, uploaded shit\n* Permission levels: Everyone, friends, nobody\n\n## IV\n\n* Dressups: search\n* Box uploads: search\n* Trainer rankings: current, breakdown by week\n* Wifi plaza: survey results\n* Stat checking: check via GTS, check via battle videos\n* Player profiles: link via GTS\n\n## V\n\n* Musicals: search\n* Stat checking: check via Game Sync\n* Player profiles: link via Game Sync ID\n* pkvldtprod: soft legality check\n* Game Sync: put to bed, wake up, receive items, pokemon, musicals, c-gear, pokedex wallpaper\n* Dream World: berry garden, pokemon feeder, house decorations\n* Rating battles\n* Battle competitions \n\n## Stat checking\n\n* All the features of Pokecheck.\n* GenIV links in a Pokecheck style way: Search for Ditto lv9 and under, get a secret code from the search results.\n* GenV links using your PGL code.\n* Link in one place for both PGL and stat check.\n(Provide some basic PGL style functionality eg. player profiles and game selection for Gen4)\nIn Gen4, you check a pokemon just like Pokecheck, only your request must be Ditto lv9 and under for it to happen.\nIn Gen5, you check a box of pokemon at a time by renaming the box and using Game Sync. (possible issue: game sync limited to once a day)\nYou can add tags to your pokemon summaries, works much the same as pokecheck boxes only multiples are allowed.\n* Species/shiny/DW are built-in searches.\n* Set individual pokemon to public/friends/private.\n* Delete button. (this is a 100% real delete)\n\n## Administration\n\n* Can see full “pokecheck” pages for any pokemon in the GTS or history.\n* Can eject pokemon from the system.\n* Can see all trainer profiles\n* Can see all user profiles\n* Can ban trainers??\n* Can link/unlink trainers to user profiles.\n* Gets some secret trainer/user info like pid.\n* Sees full validation summaries of all pokemon\n* Has access to pkvldtprod logs\n* Hide/delete pkgdsprod uploads\n* Hex view of pkm data (decrypted, unshuffled)\n"
  },
  {
    "path": "VeekunImport/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Configuration;\nusing PkmnFoundations.Data;\nusing System.Data.SQLite;\nusing System.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\nusing System.Threading;\nusing System.Globalization;\nusing System.IO;\n\nnamespace VeekunImport\n{\n    class Program\n    {\n        const int GENERATIONS = 6;\n\n        static void Main(string[] args)\n        {\n            string veekunFilename;\n            ConnectionStringSettings css;\n\n            if (args.Length < 1) veekunFilename = \"pokedex.sqlite\";\n            else veekunFilename = args[0];\n\n            if (veekunFilename.Contains(';')) throw new NotSupportedException(\"The character ; in filenames is not supported.\");\n            if (veekunFilename.Contains('?'))\n            {\n                Console.WriteLine(\"Usage: VeekunImport [filename [connectionString providerName]]\");\n                Console.WriteLine(\"filename: Filename of Veekun sqlite database. Default: pokedex.sqlite\");\n                Console.WriteLine(\"connectionString: pkmnFoundations connection string. Default: from app.config\");\n                Console.WriteLine(\"providerName: .NET classname of connection provider. Default: from app.config\");\n                return;\n            }\n\n            if (args.Length < 3)\n                css = ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"];\n            else\n                css = new ConnectionStringSettings(\"\", args[1], args[2]);\n\n            Database db = Database.CreateInstance(css);\n\n            using (SQLiteConnection connVeekun = new SQLiteConnection(\"Data Source=\" + veekunFilename + \"; Version=3\"))\n            {\n                connVeekun.Open();\n\n                // General logic:\n                // 1. run a query against veekun, populate a DataTable.\n                // 2. foreach DataRow, instance a class from the PkmnFoundations.Pokedex namespace.\n                // 3. call Database.AddToPokedex on that object.\n\n                // todo: We need a way to rebuild specific tables\n\n                // pkmncf_pokedex_pokemon_families\n                // Obtain the families map. We will use it in a few places.\n                Dictionary<int, int> familyMap = new Dictionary<int, int>();\n                List<int[]> familyList = new List<int[]>();\n                ProcessTSV(\"families_map.txt\", 1, row =>\n                    {\n                        // todo: allow for comments by stopping consumption of fields once one fails to parse.\n                        int[] fieldsInt = row.Fields.Select(s => Convert.ToInt32(s)).ToArray();\n                        familyList.Add(fieldsInt);\n                        foreach (int x in fieldsInt)\n                        {\n                            // lineNumber is one-based, unlike familyList index.\n                            // species is the key, family ID is the value.\n                            // If any species is repeated in family_map.txt, this ought to fail.\n                            familyMap.Add(x, row.ValidLineNumber + 1);\n                        }\n                    });\n\n                // families from families.txt override default behaviour.\n                List<Family> overrideFamilies = new List<Family>();\n                ProcessTSV(\"families.txt\", 7, row =>\n                    {\n                        string[] fields = row.Fields;\n                        overrideFamilies.Add(new Family(null,\n                            Convert.ToInt32(fields[0]),\n                            Convert.ToInt32(fields[1]),\n                            Convert.ToInt32(fields[2]),\n                            Convert.ToInt32(fields[3]),\n                            Convert.ToInt32(fields[4]),\n                            Convert.ToInt32(fields[5]),\n                            Convert.ToByte(fields[6])\n                            ));\n                    });\n                // already sorted\n                //someFamilies.Sort((f, other) => f.ID.CompareTo(other.ID));\n\n                int familyCount = familyList.Count;\n                int nextOverrideIndex = 0;\n                for (int familyId = 1; familyId <= familyCount; familyId++)\n                {\n                    int basicSpeciesId = familyList[familyId - 1][0];\n                    Family f;\n                    if (nextOverrideIndex < overrideFamilies.Count && overrideFamilies[nextOverrideIndex].ID == familyId)\n                    {\n                        // An override exists in the table; use it.\n                        f = overrideFamilies[nextOverrideIndex];\n                        nextOverrideIndex++;\n                    }\n                    else\n                    {\n                        // No override exists so go with default:\n                        // Basic male/female are the same species which is the one listed first.\n                        // There is no baby species nor incense\n                        // (Non-incense babies are considered basic in this system anyway.)\n                        // Gender ratio comes from the basic species.\n                        byte genderRatio = (byte)Convert.ToInt32(connVeekun.ExecuteScalar(\"SELECT gender_rate FROM pokemon_species WHERE id = @id\", new SQLiteParameter(\"@id\", basicSpeciesId)));\n                        f = new Family(null, familyId, basicSpeciesId, basicSpeciesId, 0, 0, 0, genderRatio);\n                    }\n                    db.PokedexInsertFamily(f);\n                    string basic = (f.BasicMaleID != f.BasicFemaleID) ?\n                        String.Format(\" {0}/{1}\", f.BasicMaleID, f.BasicFemaleID) :\n                        String.Format(\" {0}\", f.BasicMaleID);\n                    string baby;\n                    if (f.BabyMaleID != f.BabyFemaleID)\n                        baby = String.Format(\" {0}/{1} incense {2}\", f.BabyMaleID, f.BabyFemaleID, f.IncenseID);\n                    else\n                        baby = (f.BabyMaleID == 0) ? \"\" :\n                            String.Format(\" {0} incense {1}\", f.BabyMaleID, f.IncenseID);\n                    string gender = (f.GenderRatio == 255) ? \"genderless\" :\n                        String.Format(\"{0}% female\", (float)f.GenderRatio * 12.5f);\n                    Console.WriteLine(\"Inserted family {0}{1}{2} {3}\", f.ID, basic, baby, gender);\n                }\n\n                // pkmncf_pokedex_pokemon\n                SQLiteDataReader rdPokemon = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT \" +\n                    \"pokemon_species.id, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT pokemon_species_names.name FROM pokemon_species_names WHERE pokemon_species_names.pokemon_species_id = pokemon_species.id AND local_language_id = 3) AS name_ko, \" +\n                    \"growth_rate_id, gender_rate, \" +\n                    \"(SELECT egg_group_id FROM pokemon_egg_groups WHERE species_id = pokemon_species.id ORDER BY egg_group_id LIMIT 1) AS egg_group_1, \" +\n                    \"(SELECT egg_group_id FROM pokemon_egg_groups WHERE species_id = pokemon_species.id ORDER BY egg_group_id LIMIT 1, 1) AS egg_group_2, \" +\n                    \"hatch_counter, has_gender_differences \" +\n                    \"FROM pokemon_species \" +\n                    \"ORDER BY pokemon_species.id\");\n\n                while (rdPokemon.Read())\n                {\n                    int id = Convert.ToInt32(rdPokemon[\"id\"]);\n                    byte growth_rate_id = Convert.ToByte(rdPokemon[\"growth_rate_id\"]);\n                    int gender_rate = Convert.ToInt32(rdPokemon[\"gender_rate\"]);\n                    byte egg_group_1 = Convert.ToByte(rdPokemon[\"egg_group_1\"]);\n                    byte egg_group_2 = 0;\n                    if (!(rdPokemon[\"egg_group_2\"] is DBNull)) egg_group_2 = Convert.ToByte(rdPokemon[\"egg_group_2\"]);\n                    int hatch_counter = Convert.ToInt32(rdPokemon[\"hatch_counter\"]);\n                    byte has_gender_differences = Convert.ToByte(rdPokemon[\"has_gender_differences\"]);\n\n                    if (id == 255) has_gender_differences = 0; // Torchic doesn't have gender differences.\n\n                    // todo: Family ID\n                    Species s = new Species(null, id,\n                        familyMap[id],\n                        GetLocalizedString(rdPokemon, \"name_\"),\n                        (GrowthRates)growth_rate_id,\n                        (byte)gender_rate,\n                        (EggGroups)egg_group_1,\n                        (EggGroups)egg_group_2,\n                        (byte)hatch_counter,\n                        has_gender_differences != 0\n                        );\n\n                    db.PokedexInsertSpecies(s);\n                    Console.WriteLine(\"Inserted {0} {1} {2} {3} {4} {5}\",\n                        s.NationalDex, s.Name.ToString(), s.GrowthRate, s.GenderRatio, s.EggSteps, s.GenderVariations);\n                }\n                rdPokemon.Close();\n\n                // pkmncf_pokedex_pokemon_forms\n                Dictionary<int, byte> formValueMap = new Dictionary<int, byte>();\n                ProcessTSV(\"form_values.txt\", 3, row =>\n                    {\n                        string[] fields = row.Fields;\n                        formValueMap.Add(Convert.ToInt32(fields[1]), Convert.ToByte(fields[2]));\n                    });\n\n                SQLiteDataReader rdForms = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, \" +\n                    \"(SELECT species_id FROM pokemon WHERE id = pokemon_id) AS NationalDex, \" +\n                    \"form_order - 1 AS FormValue, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT pokemon_form_names.form_name FROM pokemon_form_names WHERE pokemon_form_names.pokemon_form_id = pokemon_forms.id AND local_language_id = 3) AS name_ko, \" +\n                    \"form_identifier, \" +\n                    \"(SELECT height FROM pokemon WHERE id = pokemon_id) AS height, \" +\n                    \"(SELECT weight FROM pokemon WHERE id = pokemon_id) AS weight, \" +\n                    \"(SELECT base_experience FROM pokemon WHERE id = pokemon_id) AS experience \" +\n                    \"FROM pokemon_forms\");\n\n                while (rdForms.Read())\n                {\n                    int id = Convert.ToInt32(rdForms[\"id\"]);\n                    int NationalDex = Convert.ToInt32(rdForms[\"NationalDex\"]);\n                    byte FormValue = Convert.ToByte(rdForms[\"FormValue\"]);\n                    string form_identifier = rdForms[\"form_identifier\"].ToString();\n                    int height = Convert.ToInt32(rdForms[\"height\"]);\n                    int weight = Convert.ToInt32(rdForms[\"weight\"]);\n                    int experience = Convert.ToInt32(rdForms[\"experience\"]);\n\n                    if (formValueMap.ContainsKey(id)) FormValue = formValueMap[id];\n\n                    Form f = new Form(null, id,\n                        NationalDex, FormValue,\n                        GetLocalizedString(rdForms, \"name_\"),\n                        form_identifier,\n                        height,\n                        weight,\n                        experience\n                        );\n\n                    db.PokedexInsertForm(f);\n                    Console.WriteLine(\"Inserted {0} {1} {2} {3} {4} {5:0.0}m {6:0.0}kg {7}\",\n                        f.ID, f.SpeciesID, f.Value, f.Name.ToString(),\n                        f.Suffix, f.Height * 0.1f, f.Weight * 0.1f, f.Experience);\n                }\n                rdForms.Close();\n\n                // pkmncf_pokedex_pokemon_form_stats\n                for (int generation = 1; generation <= GENERATIONS; generation++)\n                {\n                    string filename = String.Format(\"form_stats{0}.txt\", generation);\n                    ProcessTSV(filename, 15, row =>\n                        {\n                            int[] fieldsInt = row.Fields.Select(s => Convert.ToInt32(s)).ToArray();\n                            FormStats f = new FormStats(null, fieldsInt[0], (Generations)generation, fieldsInt[1], fieldsInt[2],\n                                new IntStatValues(fieldsInt[3],\n                                    fieldsInt[4],\n                                    fieldsInt[5],\n                                    fieldsInt[6],\n                                    fieldsInt[7],\n                                    fieldsInt[8]),\n                                new ByteStatValues((byte)fieldsInt[9],\n                                    (byte)fieldsInt[10],\n                                    (byte)fieldsInt[11],\n                                    (byte)fieldsInt[12],\n                                    (byte)fieldsInt[13],\n                                    (byte)fieldsInt[14])\n                                );\n\n                            db.PokedexInsertFormStats(f);\n                            Console.WriteLine(\"Inserted stats for {0} gen {1}\", f.FormID, (int)f.MinGeneration);\n                        });\n                }\n\n                // todo: pkmncf_pokedex_pokemon_evolutions\n\n                // pkmncf_pokedex_types\n                SQLiteDataReader rdTypes = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, damage_class_id, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT name FROM type_names WHERE type_names.type_id = types.id AND local_language_id = 3) AS name_ko \" +\n                    \"FROM types ORDER BY id\");\n                // http://stackoverflow.com/questions/27156585/failed-to-enable-constraints-without-dataadapter\n\n                while (rdTypes.Read())\n                {\n                    int id = Convert.ToInt32(rdTypes[\"id\"]);\n\n                    PkmnFoundations.Pokedex.Type t = new PkmnFoundations.Pokedex.Type(null,\n                        id,\n                        GetLocalizedString(rdTypes, \"name_\"),\n                        GetDamageClass(rdTypes));\n\n                    db.PokedexInsertType(t);\n                    Console.WriteLine(\"Inserted type {0} {1} {2}\", t.ID, t.Name.ToString(), t.DamageClass);\n                }\n                rdTypes.Close();\n\n                // pkmncf_pokedex_moves\n                SQLiteDataReader rdMoves = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, type_id, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT name FROM move_names WHERE move_names.move_id = moves.id AND local_language_id = 3) AS name_ko, \" +\n                    \"damage_class_id, power, pp, accuracy, priority, target_id FROM moves\");\n\n                while (rdMoves.Read())\n                {\n                    int id = Convert.ToInt32(rdMoves[\"id\"]);\n                    int type_id = Convert.ToInt32(rdMoves[\"type_id\"]);\n                    int damage_class_id = Convert.ToInt32(rdMoves[\"damage_class_id\"]);\n                    short power = DatabaseExtender.Cast<short ?>(rdMoves[\"power\"]) ?? 0;\n                    short pp = DatabaseExtender.Cast<short?>(rdMoves[\"pp\"]) ?? 0;\n                    short accuracy = DatabaseExtender.Cast<short?>(rdMoves[\"accuracy\"]) ?? 0;\n                    short priority = Convert.ToInt16(rdMoves[\"priority\"]);\n                    int target_id = Convert.ToInt32(rdMoves[\"target_id\"]);\n\n                    Move m = new Move(null,\n                        id,\n                        type_id,\n                        GetLocalizedString(rdMoves, \"name_\"),\n                        (DamageClass)damage_class_id,\n                        power,\n                        pp,\n                        accuracy,\n                        priority,\n                        (BattleTargets)target_id\n                        );\n\n                    db.PokedexInsertMove(m);\n                    Console.WriteLine(\"Inserted move {0} {1}\", m.ID, m.Name.ToString());\n                }\n\n                // pkmncf_pokedex_abilities\n                SQLiteDataReader rdAbilities = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT name FROM ability_names WHERE ability_names.ability_id = abilities.id AND local_language_id = 3) AS name_ko \" +\n                    \"FROM abilities WHERE is_main_series = 1\");\n\n                while (rdAbilities.Read())\n                {\n                    int id = Convert.ToInt32(rdAbilities[\"id\"]);\n                    Ability a = new Ability(null,\n                        id, GetLocalizedString(rdAbilities, \"name_\")\n                        );\n\n                    db.PokedexInsertAbility(a);\n                    Console.WriteLine(\"Inserted ability {0} {1}\", a.Value, a.Name.ToString());\n                }\n                rdAbilities.Close();\n\n                // pkmncf_pokedex_pokemon_form_abilities\n                for (int generation = 3; generation <= GENERATIONS; generation++)\n                {\n                    string filename = String.Format(\"form_abilities{0}.txt\", generation);\n                    ProcessTSV(filename, 4, row =>\n                    {\n                        int[] fieldsInt = row.Fields.Select(s => Convert.ToInt32(s)).ToArray();\n                        FormAbilities f = new FormAbilities(null, fieldsInt[0], (Generations)generation, \n                            fieldsInt[1], fieldsInt[2], fieldsInt[3]\n                            );\n\n                        db.PokedexInsertFormAbilities(f);\n                        Console.WriteLine(\"Inserted abilities for {0} gen {1}\", f.FormID, (int)f.MinGeneration);\n                    });\n                }\n\n\n                // pkmncf_pokedex_items\n                Dictionary<int, ItemLoading> items = new Dictionary<int, ItemLoading>();\n\n                for (int generation = 3; generation <= GENERATIONS; generation++)\n                {\n                    string filename = String.Format(\"items{0}.txt\", generation);\n                    ProcessTSV(filename, 3, row =>\n                    {\n                        string[] fields = row.Fields;\n                        int id, thisGenId;\n                        string name = fields[1];\n                        if (!Int32.TryParse(fields[0], out thisGenId) ||\n                            !Int32.TryParse(fields[2], out id))\n                        {\n                            Console.WriteLine(\"{0} line {1} has bad format, skipped.\", filename, row.LineNumber);\n                            return;\n                        }\n                        ItemLoading theItem = null;\n                        if (!items.ContainsKey(id))\n                        {\n                            theItem = new ItemLoading(id, name);\n                            items.Add(id, theItem);\n                        }\n                        theItem = theItem ?? items[id];\n                        theItem.Name = name; // prefer newer names where available\n                        theItem.SetGenerationValue(thisGenId, generation);\n                    });\n                }\n\n                // Pokeball IDs:\n                ProcessTSV(\"items_balls.txt\", 3, row =>\n                {\n                    string[] fields = row.Fields;\n                    int id, ballId;\n                    string name = fields[1];\n                    if (!Int32.TryParse(fields[0], out ballId) ||\n                        !Int32.TryParse(fields[2], out id))\n                    {\n                        Console.WriteLine(\"{0} line {1} has bad format, skipped.\", \"items_balls.txt\", row.LineNumber);\n                        return;\n                    }\n                    ItemLoading theItem = null;\n                    if (!items.ContainsKey(id))\n                    {\n                        theItem = new ItemLoading(id, name);\n                        items.Add(id, theItem);\n                    }\n                    theItem = theItem ?? items[id];\n                    if (theItem.Name == null) theItem.Name = name;\n                    theItem.PokeballValue = ballId;\n                });\n\n                // lookup Veekun ID number against some generation or another.\n                Dictionary<int, ItemLoading> items3 = items\n                    .Where(i => i.Value.Value3 != null && i.Value.NameLocalized == null)\n                    .ToDictionary(i => (int)i.Value.Value3, i => i.Value);\n                Dictionary<int, ItemLoading> items4 = items\n                    .Where(i => i.Value.Value4 != null && i.Value.NameLocalized == null)\n                    .ToDictionary(i => (int)i.Value.Value4, i => i.Value);\n                Dictionary<int, ItemLoading> items5 = items\n                    .Where(i => i.Value.Value5 != null && i.Value.NameLocalized == null)\n                    .ToDictionary(i => (int)i.Value.Value5, i => i.Value);\n                Dictionary<int, ItemLoading> items6 = items\n                    .Where(i => i.Value.Value6 != null && i.Value.NameLocalized == null)\n                    .ToDictionary(i => (int)i.Value.Value6, i => i.Value);\n\n                // veekun has incorrect Gen3 indices for Helix/Dome fossil.\n                // (Or they disagree with Bulbapedia which is my primary source)\n                SQLiteDataReader rdItems = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, cost, \" +\n                    \"(SELECT game_index FROM item_game_indices WHERE item_id = items.id AND generation_id = 3 AND NOT item_id IN (101, 102)) AS value3, \" +\n                    \"(SELECT game_index FROM item_game_indices WHERE item_id = items.id AND generation_id = 4) AS value4, \" +\n                    \"(SELECT game_index FROM item_game_indices WHERE item_id = items.id AND generation_id = 5) AS value5, \" +\n                    \"(SELECT game_index FROM item_game_indices WHERE item_id = items.id AND generation_id = 6) AS value6, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT name FROM item_names WHERE item_names.item_id = items.id AND local_language_id = 3) AS name_ko \" +\n                    \"FROM items\");\n\n                Dictionary<int, ItemLoading>[] itemsGeneration = new Dictionary<int, ItemLoading>[] { null, null, items3, items4, items5, items6 };\n\n                while (rdItems.Read())\n                {\n                    List<ItemLoading> toProcess = new List<ItemLoading>(4);\n\n                    for (int generation = 3; generation <= GENERATIONS; generation++)\n                    {\n                        string col = String.Format(\"value{0}\", generation);\n                        if (!(rdItems[col] is DBNull))\n                        {\n                            Dictionary<int, ItemLoading> dict = itemsGeneration[generation - 1];\n                            int value = Convert.ToInt32(rdItems[col]);\n                            if (dict.ContainsKey(value))\n                            {\n                                ItemLoading il = dict[value];\n                                il.NameLocalized = GetLocalizedString(rdItems, \"name_\");\n                                il.Price = Convert.ToInt32(rdItems[\"cost\"]);\n                            }\n                        }\n                    }\n                }\n                rdItems.Close();\n\n                foreach (ItemLoading il in items.Values)\n                {\n                    LocalizedString name = il.NameLocalized;\n                    if (name == null)\n                    {\n                        name = new LocalizedString() { { \"EN\", il.Name } };\n                        Console.WriteLine(\"Veekun database missing item {0} {1}. Non-English translations will be missing.\", il.ID, name);\n                    }\n                    Item i = new Item(null, il.ID, il.Value3, il.Value4, il.Value5, il.Value6, il.PokeballValue, il.Price, name);\n                    db.PokedexInsertItem(i);\n                    Console.WriteLine(\"Inserted item {0} {1}\", i.ID, i.Name.ToString());\n                }\n\n                // pkmncf_pokedex_ribbons\n                Dictionary<int, RibbonLoading> ribbons = new Dictionary<int, RibbonLoading>();\n                if (!ProcessTSV(\"ribbons.txt\", 3, row =>\n                    {\n                        string[] fields = row.Fields;\n                        int id = Convert.ToInt32(fields[0]);\n                        ribbons.Add(id, new RibbonLoading(id, fields[1], fields[2]));\n                    }))\n                    Console.WriteLine(\"ribbons.txt not found. Not inserting any ribbons.\");\n                else\n                {\n                    for (int generation = 3; generation <= GENERATIONS; generation++)\n                    {\n                        string filename = String.Format(\"ribbon_positions{0}.txt\", generation);\n                        ProcessTSV(filename, 2, row =>\n                            {\n                                string[] fields = row.Fields;\n                                int id = Convert.ToInt32(fields[0]);\n                                int position = Convert.ToInt32(fields[1]);\n                                if (!ribbons.ContainsKey(id))\n                                {\n                                    Console.WriteLine(\"Error: Ribbon ID {0} contained in {1} but not in ribbons.txt!\", id, filename);\n                                    return;\n                                }\n                                RibbonLoading r = ribbons[id];\n                                r.SetGenerationPosition(position, generation);\n                            });\n                    }\n\n                    foreach (KeyValuePair<int, RibbonLoading> pair in ribbons)\n                    {\n                        RibbonLoading r = pair.Value;\n                        db.PokedexInsertRibbon(new Ribbon(null, r.ID,\n                            new LocalizedString() { { \"EN\", r.Name } },\n                            new LocalizedString() { { \"EN\", r.Description } },\n                            r.Position3, r.Position4, r.Position5, r.Position6,\n                            null, null, null, null\n                            ));\n                        Console.WriteLine(\"Inserted ribbon {0} {1}\", r.ID, r.Name);\n                    }\n                }\n\n                // pkmncf_pokedex_regions\n                ProcessTSV(\"regions.txt\", 2, row =>\n                {\n                    string[] fields = row.Fields;\n                    int id = Convert.ToInt32(fields[0]);\n                    Region r = new Region(null, id, new LocalizedString() { { \"EN\", fields[1] } });\n                    db.PokedexInsertRegion(r);\n                    Console.WriteLine(\"Inserted region {0} {1}\", r.ID, r.Name);\n                });\n\n                // pkmncf_pokedex_locations\n                SQLiteDataReader rdLocations = (SQLiteDataReader)connVeekun.ExecuteReader(\"SELECT id, region_id, \" +\n                    \"(SELECT game_index FROM location_game_indices WHERE location_id = locations.id AND generation_id = 3) AS value3, \" +\n                    \"(SELECT game_index FROM location_game_indices WHERE location_id = locations.id AND generation_id = 4) AS value4, \" +\n                    \"(SELECT game_index FROM location_game_indices WHERE location_id = locations.id AND generation_id = 5) AS value5, \" +\n                    \"(SELECT game_index FROM location_game_indices WHERE location_id = locations.id AND generation_id = 6) AS value6, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 1) AS name_ja, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 9) AS name_en, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 5) AS name_fr, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 8) AS name_it, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 6) AS name_de, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 7) AS name_es, \" +\n                    \"(SELECT name FROM location_names WHERE location_names.location_id = locations.id AND local_language_id = 3) AS name_ko \" +\n                    \"FROM locations WHERE id NOT IN (522, 523, 524)\");\n                // 522, 523, and 524 are duplicates of Kanto routes 19, 20, and 21.\n\n                // todo: gba/colo/xd encounter location values\n                \n                while (rdLocations.Read())\n                {\n                    Location l = new Location(null, \n                        Convert.ToInt32(rdLocations[\"id\"]),\n                        VeekunLocationToRegion(rdLocations),\n                        (int ?)DatabaseExtender.Cast<long?>(rdLocations[\"value3\"]),\n                        null,\n                        null,\n                        (int?)DatabaseExtender.Cast<long?>(rdLocations[\"value4\"]),\n                        (int?)DatabaseExtender.Cast<long?>(rdLocations[\"value5\"]),\n                        (int?)DatabaseExtender.Cast<long?>(rdLocations[\"value6\"]),\n                        GetLocalizedString(rdLocations, \"name_\")\n                        );\n\n                    db.PokedexInsertLocation(l);\n                    Console.WriteLine(\"Inserted location {0} {1}\", l.ID, l.Name);\n                }\n                rdLocations.Close();\n\n                connVeekun.Close();\n            }\n\n#if DEBUG\n            Console.ReadKey();\n#endif\n        }\n\n        private static string[] LANGS = { \"JA\", \"EN\", \"FR\", \"IT\", \"DE\", \"ES\", \"KO\" };\n        private static LocalizedString GetLocalizedString(IDataReader reader, string column)\n        {\n            LocalizedString result = new LocalizedString();\n            foreach (string lang in LANGS)\n            {\n                string col = column + lang.ToLowerInvariant();\n                if (reader[col] is DBNull) continue;\n                result.Add(lang, (string)reader[col]);\n            }\n            return result;\n        }\n\n        private static DamageClass GetDamageClass(IDataReader reader)\n        {\n            if (reader[\"damage_class_id\"] is DBNull) return DamageClass.None;\n            return (DamageClass)(Convert.ToInt32(reader[\"damage_class_id\"]) - 1);\n        }\n\n        private static bool ProcessTSV(string filename, int requiredFields, Action<TsvRow> action)\n        {\n            if (!File.Exists(filename))\n            {\n                Console.WriteLine(\"File {0} not found, skipped.\", filename);\n                return false;\n            }\n            using (FileStream fs = File.Open(filename, FileMode.Open))\n            {\n                StreamReader sr = new StreamReader(fs, Encoding.UTF8);\n                string line;\n                int lineNumber = 0;\n                int validLineNumber = 0;\n                while ((line = sr.ReadLine()) != null)\n                {\n                    string[] fields = line.Split('\\t');\n                    if (fields.Length < requiredFields)\n                    {\n                        Console.WriteLine(\"File {0} line {1} has too few fields, skipped.\", filename, lineNumber);\n                        lineNumber++;\n                        continue;\n                    }\n                    action(new TsvRow(lineNumber, validLineNumber, fields));\n                    lineNumber++;\n                    validLineNumber++;\n                }\n                fs.Close();\n            }\n            return true;\n        }\n\n        private static int VeekunLocationToRegion(SQLiteDataReader reader)\n        {\n            int id = Convert.ToInt32(reader[\"id\"]);\n            long? region = DatabaseExtender.Cast<long?>(reader[\"region_id\"]);\n\n            if (region == null) // not set, usually event\n            {\n                if (id == 256) return 2; // kanto\n                if (id == 257) return 3; // johto\n                if (id == 258) return 4; // hoenn\n                if (id == 259) return 7; // sinnoh\n                if (id == 260) return 5; // \"distant land\" (only used for orre?)\n                if (id == 261) return 7; // traveling man (happini?)\n                if (id == 262) return 7; // riley\n                if (id == 263) return 7; // cynthia\n                if (id == 342) return 3; // mr. pokemon\n                if (id == 343) return 3; // primo\n                return 1;\n            }\n            if (region == 1) // kanto and seviis\n            {\n                if (id >= 491 && id <= 497) return 6; // seven island unown chambers\n                if (id >= 500 && id <= 521) return 6; // sevii islands\n                if (id >= 526 && id <= 529) return 6; // sevii islands\n                return 2;\n            }\n            if (region == 2) return 3; // johto\n            if (region == 3) return 4; // hoenn\n            if (region == 4) return 7; // sinnoh\n            if (region == 5) return 8; // unova\n            if (region == 6) return 9; // kalos\n\n            return (int)region + 3; // for now, assume veekun won't skip more regions.\n        }\n\n    }\n\n    internal class ItemLoading\n    {\n        public ItemLoading(int id, string name)\n        {\n            ID = id;\n            Name = name;\n            Value3 = Value4 = Value5 = Value6 = null;\n            NameLocalized = null;\n            PokeballValue = null;\n        }\n\n        public int ID;\n        public string Name;\n        public LocalizedString NameLocalized;\n        public int? Value3, Value4, Value5, Value6;\n        public int Price;\n        public int? PokeballValue;\n\n        public void SetGenerationValue(int ? value, int generation)\n        {\n            switch (generation)\n            {\n                case 3:\n                    Value3 = value;\n                    break;\n                case 4:\n                    Value4 = value;\n                    break;\n                case 5:\n                    Value5 = value;\n                    break;\n                case 6:\n                    Value6 = value;\n                    break;\n            }\n        }\n    }\n\n    internal class RibbonLoading\n    {\n        public RibbonLoading(int id, string name, string description)\n        {\n            ID = id;\n            Name = name;\n            Description = description;\n            Position3 = Position4 = Position5 = Position6 = null;\n        }\n\n        public int ID;\n        public string Name;\n        public string Description;\n        public int? Position3, Position4, Position5, Position6;\n\n        public void SetGenerationPosition(int? position, int generation)\n        {\n            switch (generation)\n            {\n                case 3:\n                    Position3 = position;\n                    break;\n                case 4:\n                    Position4 = position;\n                    break;\n                case 5:\n                    Position5 = position;\n                    break;\n                case 6:\n                    Position6 = position;\n                    break;\n            }\n        }\n    }\n\n    internal class TsvRow\n    {\n        public TsvRow(int lineNumber, int validLineNumber, string[] fields)\n        {\n            LineNumber = lineNumber;\n            ValidLineNumber = validLineNumber;\n            Fields = fields;\n        }\n\n        public int LineNumber;\n        public int ValidLineNumber;\n        public string[] Fields;\n    }\n}\n"
  },
  {
    "path": "VeekunImport/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"VeekunImport\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"VeekunImport\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"1644dc02-2772-48f6-b123-e611638dbab0\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "VeekunImport/VeekunImport.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>VeekunImport</RootNamespace>\n    <AssemblyName>VeekunImport</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.SQLite, Version=1.0.115.5, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Stub.System.Data.SQLite.Core.NetFramework.1.0.115.5\\lib\\net40\\System.Data.SQLite.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Data.SQLite.Linq, Version=1.0.115.5, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Data.SQLite.Linq.1.0.115.5\\lib\\net40\\System.Data.SQLite.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"countries4.txt\" />\n    <Content Include=\"countries5.txt\" />\n    <Content Include=\"families_map.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_abilities3.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_abilities4.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_abilities5.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_abilities6.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_stats1.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_stats6.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_stats5.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_stats4.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_stats3.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_stats2.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"form_values.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"items3.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"items5.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"items4.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"families.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"items_balls.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"regions.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"ribbons.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"ribbon_positions3.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"ribbon_positions5.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"ribbon_positions4.txt\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408efc7e-c6b0-4160-8628-2679e34385ce}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\Stub.System.Data.SQLite.Core.NetFramework.1.0.115.5\\build\\net40\\Stub.System.Data.SQLite.Core.NetFramework.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Stub.System.Data.SQLite.Core.NetFramework.1.0.115.5\\build\\net40\\Stub.System.Data.SQLite.Core.NetFramework.targets'))\" />\n  </Target>\n  <Import Project=\"..\\packages\\Stub.System.Data.SQLite.Core.NetFramework.1.0.115.5\\build\\net40\\Stub.System.Data.SQLite.Core.NetFramework.targets\" Condition=\"Exists('..\\packages\\Stub.System.Data.SQLite.Core.NetFramework.1.0.115.5\\build\\net40\\Stub.System.Data.SQLite.Core.NetFramework.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "VeekunImport/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  </configSections>\n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\" />\n  </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Data.SQLite\" publicKeyToken=\"db937bc2d44ff139\" culture=\"neutral\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  \n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n      <provider invariantName=\"System.Data.SQLite.EF6\" type=\"System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6\" />\n    </providers>\n  </entityFramework>\n  <system.data>\n    <DbProviderFactories>\n      <remove invariant=\"System.Data.SQLite\" />\n      <add name=\"SQLite Data Provider\" invariant=\"System.Data.SQLite\" \n           description=\".NET Framework Data Provider for SQLite\" \n           type=\"System.Data.SQLite.SQLiteFactory, System.Data.SQLite\" />\n    </DbProviderFactories>\n  </system.data>\n</configuration>"
  },
  {
    "path": "VeekunImport/countries4.txt",
    "content": "﻿1\tAF\tAfghanistan\n2\tAL\tAlbania\n3\tDZ\tAlgeria\n6\tAO\tAngola\n8\tAG\tAntigua and Barbuda\n9\tAR\tArgentina\n12\tAU\tAustralia\n13\tAT\tAustria\n15\tBS\tBahamas\n16\tBH\tBahrain\n17\tBD\tBangladesh\n18\tBB\tBarbados\n20\tBE\tBelgium\n21\tBZ\tBelize\n22\tBJ\tBenin\n23\tBM\tBermuda\n25\tBO\tBolivia\n27\tBW\tBotswana\n28\tBR\tBrazil\n29\tVG\tBritish Virgin Islands\n31\tBG\tBulgaria\n33\tBI\tBurundi\n34\tKH\tCambodia\n35\tCM\tCameroon\n36\tCA\tCanada\n40\tTD\tChad\n42\tCL\tChile\n43\tCN\tChina\n45\tCO\tColombia\n48\tCG\tCongo\n49\tCK\tCook Islands\n50\tCR\tCosta Rica\n52\tHR\tCroatia\n54\tCY\tCyprus\n55\tCZ\tCzech Republic\n56\tDK\tDenmark\n58\tDM\tDominica\n59\tDO\tDominican Republic\n60\tEC\tEcuador\n61\tEG\tEgypt\n62\tSV\tEl Salvador\n69\tFJ\tFiji\n70\tFI\tFinland\n71\tFR\tFrance\n72\tGF\tFrench Guiana\n74\tGA\tGabon\n77\tDE\tGermany\n78\tGH\tGhana\n79\tGI\tGibraltar\n80\tGR\tGreece\n81\tGL\tGreenland\n82\tGD\tGrenada\n83\tGP\tGuadeloupe\n85\tGT\tGuatemala\n86\tGN\tGuinea\n88\tGY\tGuyana\n89\tHT\tHaiti\n90\tHN\tHonduras\n91\tHK\tHong Kong\n92\tHU\tHungary\n93\tIS\tIceland\n94\tIN\tIndia\n95\tID\tIndonesia\n97\tIQ\tIraq\n98\tIE\tIreland\n100\tIL\tIsrael\n101\tIT\tItaly\n102\tJM\tJamaica\n103\tJP\tJapan\n104\tJO\tJordan\n107\tKE\tKenya\n110\tKR\tRepublic of Korea\n111\tKW\tKuwait\n115\tLB\tLebanon\n117\tLR\tLiberia\n118\tLY\tLibyan Arab Jamhiriya\n121\tLU\tLuxembourg\n122\tMO\tMacau\n126\tMY\tMalaysia\n129\tMT\tMalta\n131\tMQ\tMartinique\n133\tMU\tMauritius\n135\tMX\tMexico\n140\tMA\tMorocco\n142\tMM\tMyanmar\n146\tNL\tNetherlands\n148\tNC\tNew Caledonia\n149\tNZ\tNew Zealand\n150\tNI\tNicaragua\n151\tNE\tNiger\n152\tNG\tNigeria\n156\tNO\tNorway\n157\tOM\tOman\n158\tPK\tPakistan\n160\tPA\tPanama\n161\tPG\tPapua New Guinea\n163\tPE\tPeru\n164\tPH\tPhilippines\n166\tPL\tPoland\n167\tPT\tPortugal\n171\tRO\tRomania\n172\tRU\tRussian Federation\n179\tWS\tSamoa\n183\tSN\tSenegal\n186\tSL\tSierra Leone\n187\tSG\tSingapore\n188\tSK\tSlovakia\n189\tSI\tSlovenia\n192\tZA\tSouth Africa\n193\tES\tSpain\n194\tLK\tSri Lanka\n196\tSR\tSuriname\n198\tSZ\tSwaziland\n199\tSE\tSweden\n200\tCH\tSwiss Confederation\n202\tTW\tTaiwan\n204\tTZ\tUnited Republic of Tanzania\n205\tTH\tThailand\n207\tTG\tTogo\n211\tTN\tTunisia\n212\tTR\tTurkey\n216\tUG\tUganda\n218\tAE\tUnited Arab Emirates\n219\tGB\tUnited Kingdom\n220\tUS\tUnited States of America\n221\tVI\tUnited States Virgin Islands\n222\tUY\tUruguay\n224\tVU\tVanuatu\n226\tVE\tVenezuela\n227\tVN\tVietnam\n"
  },
  {
    "path": "VeekunImport/countries5.txt",
    "content": "﻿1\tAF\tAfghanistan\n2\tAL\tAlbania\n3\tDZ\tAlgeria\n6\tAO\tAngola\n8\tAG\tAntigua and Barbuda\n9\tAR\tArgentina\n12\tAU\tAustralia\n13\tAT\tAustria\n15\tBS\tBahamas\n16\tBH\tBahrain\n17\tBD\tBangladesh\n18\tBB\tBarbados\n20\tBE\tBelgium\n21\tBZ\tBelize\n22\tBJ\tBenin\n23\tBM\tBermuda\n25\tBO\tBolivia\n27\tBW\tBotswana\n28\tBR\tBrazil\n29\tVG\tBritish Virgin Islands\n31\tBG\tBulgaria\n33\tBI\tBurundi\n34\tKH\tCambodia\n35\tCM\tCameroon\n36\tCA\tCanada\n40\tTD\tChad\n42\tCL\tChile\n43\tCN\tChina\n45\tCO\tColombia\n47\tCG\tCongo\n48\tCK\tCook Islands\n49\tCR\tCosta Rica\n51\tHR\tCroatia\n53\tCY\tCyprus\n54\tCZ\tCzech Republic\n58\tDK\tDenmark\n60\tDM\tDominica\n61\tDO\tDominican Republic\n62\tEC\tEcuador\n63\tEG\tEgypt\n64\tSV\tEl Salvador\n71\tFJ\tFiji\n72\tFI\tFinland\n73\tFR\tFrance\n74\tGF\tFrench Guiana\n76\tGA\tGabon\n79\tDE\tGermany\n80\tGH\tGhana\n81\tGI\tGibraltar\n82\tGR\tGreece\n83\tGL\tGreenland\n84\tGD\tGrenada\n85\tGP\tGuadeloupe\n87\tGT\tGuatemala\n88\tGN\tGuinea\n90\tGY\tGuyana\n91\tHT\tHaiti\n92\tHN\tHonduras\n93\tHU\tHungary\n94\tIS\tIceland\n95\tIN\tIndia\n96\tID\tIndonesia\n98\tIQ\tIraq\n99\tIE\tIreland\n101\tIL\tIsrael\n102\tIT\tItaly\n103\tJM\tJamaica\n105\tJP\tJapan\n106\tJO\tJordan\n109\tKE\tKenya\n111\tKW\tKuwait\n115\tLB\tLebanon\n117\tLR\tLiberia\n118\tLY\tLibya\n121\tLU\tLuxembourg\n125\tMY\tMalaysia\n128\tMT\tMalta\n130\tMQ\tMartinique\n132\tMU\tMauritius\n134\tMX\tMexico\n138\tME\tMontenegro\n139\tMA\tMorocco\n141\tMM\tMyanmar\n145\tNL\tNetherlands\n147\tNC\tNew Caledonia\n148\tNZ\tNew Zealand\n149\tNI\tNicaragua\n150\tNE\tNiger\n151\tNG\tNigeria\n155\tNO\tNorway\n156\tOM\tOman\n157\tPK\tPakistan\n160\tPA\tPanama\n161\tPG\tPapua New Guinea\n163\tPE\tPeru\n164\tPH\tPhilippines\n166\tPL\tPoland\n167\tPT\tPortugal\n170\tKR\tSouth Korea\n173\tRO\tRomania\n174\tRU\tRussian Federation\n181\tWS\tSamoa\n185\tSN\tSenegal\n186\tRS\tSerbia\n188\tSL\tSierra Leone\n189\tSG\tSingapore\n190\tSK\tSlovakia\n191\tSI\tSlovenia\n194\tZA\tSouth Africa\n195\tES\tSpain\n196\tLK\tSri Lanka\n198\tSR\tSuriname\n199\tSZ\tSwaziland\n200\tSE\tSweden\n201\tCH\tSwitzerland\n203\tTW\tTaiwan\n205\tTH\tThailand\n206\tTG\tTogo\n210\tTN\tTunisia\n211\tTR\tTurkey\n215\tUG\tUganda\n217\tAE\tUnited Arab Emirates\n218\tGB\tUnited Kingdom\n219\tTZ\tTanzania\n220\tUS\tUnited States of America\n221\tVI\tUnited States Virgin Islands\n222\tUY\tUruguay\n224\tVU\tVanatu\n226\tVE\tVenezuela\n227\tVN\tVietnam\n"
  },
  {
    "path": "VeekunImport/families.txt",
    "content": "﻿010\t172\t172\t000\t000\t0000\t4\n012\t029\t032\t000\t000\t0000\t4\n013\t173\t173\t000\t000\t0000\t6\n015\t174\t174\t000\t000\t0000\t6\n046\t236\t236\t000\t000\t0000\t0\n050\t113\t113\t440\t440\t4319\t8\n056\t122\t122\t439\t439\t4314\t4\n058\t238\t238\t000\t000\t0000\t8\n059\t239\t239\t000\t000\t0000\t2\n060\t240\t240\t000\t000\t0000\t2\n071\t143\t143\t446\t446\t4316\t4\n089\t183\t183\t298\t298\t3220\t4\n090\t185\t185\t438\t438\t4315\t1\n099\t202\t202\t360\t360\t3221\t4\n115\t226\t226\t458\t458\t4317\t4\n155\t313\t314\t000\t000\t0000\t4\n156\t315\t315\t406\t406\t4318\t4\n182\t358\t358\t433\t433\t4320\t4"
  },
  {
    "path": "VeekunImport/families_map.txt",
    "content": "001\t002\t003\n004\t005\t006\n007\t008\t009\n010\t011\t012\n013\t014\t015\n016\t017\t018\n019\t020\n021\t022\n023\t024\n025\t026\t172\n027\t028\n029\t030\t031\t032\t033\t034\n035\t036\t173\n037\t038\n039\t040\t174\n041\t042\t169\n043\t044\t045\t182\n046\t047\n048\t049\n050\t051\n052\t053\n054\t055\n056\t057\n058\t059\n060\t061\t062\t186\n063\t064\t065\n066\t067\t068\n069\t070\t071\n072\t073\n074\t075\t076\n077\t078\n079\t080\t199\n081\t082\t462\n083\n084\t085\n086\t087\n088\t089\n090\t091\n092\t093\t094\n095\t208\n096\t097\n098\t099\n100\t101\n102\t103\n104\t105\n106\t107\t236\t237\n108\t463\n109\t110\n111\t112\t464\n113\t242\t440\n114\t465\n115\n116\t117\t230\n118\t119\n120\t121\n122\t439\n123\t212\n124\t238\n125\t239\t466\n126\t240\t467\n127\n128\n129\t130\n131\n132\n133\t134\t135\t136\t196\t197\t470\t471\t700\n137\t233\t474\n138\t139\n140\t141\n142\n143\t446\n144\n145\n146\n147\t148\t149\n150\n151\n152\t153\t154\n155\t156\t157\n158\t159\t160\n161\t162\n163\t164\n165\t166\n167\t168\n170\t171\n175\t176\t468\n177\t178\n179\t180\t181\n183\t184\t298\n185\t438\n187\t188\t189\n190\t424\n191\t192\n193\t469\n194\t195\n198\t430\n200\t429\n201\n202\t360\n203\n204\t205\n206\n207\t472\n209\t210\n211\n213\n214\n215\t461\n216\t217\n218\t219\n220\t221\t473\n222\n223\t224\n225\n226\t458\n227\n228\t229\n231\t232\n234\n235\n241\n243\n244\n245\n246\t247\t248\n249\n250\n251\n252\t253\t254\n255\t256\t257\n258\t259\t260\n261\t262\n263\t264\n265\t266\t267\t268\t269\n270\t271\t272\n273\t274\t275\n276\t277\n278\t279\n280\t281\t282\t475\n283\t284\n285\t286\n287\t288\t289\n290\t291\t292\n293\t294\t295\n296\t297\n299\t476\n300\t301\n302\n303\n304\t305\t306\n307\t308\n309\t310\n311\n312\n313\t314\n315\t406\t407\n316\t317\n318\t319\n320\t321\n322\t323\n324\n325\t326\n327\n328\t329\t330\n331\t332\n333\t334\n335\n336\n337\n338\n339\t340\n341\t342\n343\t344\n345\t346\n347\t348\n349\t350\n351\n352\n353\t354\n355\t356\t477\n357\n358\t433\n359\n361\t362\t478\n363\t364\t365\n366\t367\t368\n369\n370\n371\t372\t373\n374\t375\t376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\t388\t389\n390\t391\t392\n393\t394\t395\n396\t397\t398\n399\t400\n401\t402\n403\t404\t405\n408\t409\n410\t411\n412\t413\t414\n415\t416\n417\n418\t419\n420\t421\n422\t423\n425\t426\n427\t428\n431\t432\n434\t435\n436\t437\n441\n442\n443\t444\t445\n447\t448\n449\t450\n451\t452\n453\t454\n455\n456\t457\n459\t460\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\t490\n491\n492\n493\n494\n495\t496\t497\n498\t499\t500\n501\t502\t503\n504\t505\n506\t507\t508\n509\t510\n511\t512\n513\t514\n515\t516\n517\t518\n519\t520\t521\n522\t523\n524\t525\t526\n527\t528\n529\t530\n531\n532\t533\t534\n535\t536\t537\n538\n539\n540\t541\t542\n543\t544\t545\n546\t547\n548\t549\n550\n551\t552\t553\n554\t555\n556\n557\t558\n559\t560\n561\n562\t563\n564\t565\n566\t567\n568\t569\n570\t571\n572\t573\n574\t575\t576\n577\t578\t579\n580\t581\n582\t583\t584\n585\t586\n587\n588\t589\n590\t591\n592\t593\n594\n595\t596\n597\t598\n599\t600\t601\n602\t603\t604\n605\t606\n607\t608\t609\n610\t611\t612\n613\t614\n615\n616\t617\n618\n619\n620\n621\n622\t623\n624\t625\n626\n627\t628\n629\t630\n631\n632\n633\t634\t635\n636\t637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\t651\t652\n653\t654\t655\n656\t657\t658\n659\t660\n661\t662\t663\n664\t665\t666\n667\t668\n669\t670\t671\n672\t673\n674\t675\n676\n677\t678\n679\t680\t681\n682\t683\n684\t685\n686\t687\n688\t689\n690\t691\n692\t693\n694\t695\n696\t697\n698\t699\n701\n702\n703\n704\t705\t706\n707\n708\t709\n710\t711\n712\t713\n714\t715\n716\n717\n718\n719\n720\n721"
  },
  {
    "path": "VeekunImport/form_abilities3.txt",
    "content": "00001\t065\t000\t000\n00002\t065\t000\t000\n00003\t065\t000\t000\n00004\t066\t000\t000\n00005\t066\t000\t000\n00006\t066\t000\t000\n00007\t067\t000\t000\n00008\t067\t000\t000\n00009\t067\t000\t000\n00010\t019\t000\t000\n00011\t061\t000\t000\n00012\t014\t000\t000\n00013\t019\t000\t000\n00014\t061\t000\t000\n00015\t068\t000\t000\n00016\t051\t000\t000\n00017\t051\t000\t000\n00018\t051\t000\t000\n00019\t050\t062\t000\n00020\t050\t062\t000\n00021\t051\t000\t000\n00022\t051\t000\t000\n00023\t022\t061\t000\n00024\t022\t061\t000\n00025\t009\t000\t000\n00026\t009\t000\t000\n00027\t008\t000\t000\n00028\t008\t000\t000\n00029\t038\t000\t000\n00030\t038\t000\t000\n00031\t038\t000\t000\n00032\t038\t000\t000\n00033\t038\t000\t000\n00034\t038\t000\t000\n00035\t056\t000\t000\n00036\t056\t000\t000\n00037\t018\t000\t000\n00038\t018\t000\t000\n00039\t056\t000\t000\n00040\t056\t000\t000\n00041\t039\t000\t000\n00042\t039\t000\t000\n00043\t034\t000\t000\n00044\t034\t000\t000\n00045\t034\t000\t000\n00046\t027\t000\t000\n00047\t027\t000\t000\n00048\t014\t000\t000\n00049\t019\t000\t000\n00050\t008\t071\t000\n00051\t008\t071\t000\n00052\t053\t000\t000\n00053\t007\t000\t000\n00054\t006\t013\t000\n00055\t006\t013\t000\n00056\t072\t000\t000\n00057\t072\t000\t000\n00058\t022\t018\t000\n00059\t022\t018\t000\n00060\t011\t006\t000\n00061\t011\t006\t000\n00062\t011\t006\t000\n00063\t028\t039\t000\n00064\t028\t039\t000\n00065\t028\t039\t000\n00066\t062\t000\t000\n00067\t062\t000\t000\n00068\t062\t000\t000\n00069\t034\t000\t000\n00070\t034\t000\t000\n00071\t034\t000\t000\n00072\t029\t064\t000\n00073\t029\t064\t000\n00074\t069\t005\t000\n00075\t069\t005\t000\n00076\t069\t005\t000\n00077\t050\t018\t000\n00078\t050\t018\t000\n00079\t012\t020\t000\n00080\t012\t020\t000\n00081\t042\t005\t000\n00082\t042\t005\t000\n00083\t051\t039\t000\n00084\t050\t048\t000\n00085\t050\t048\t000\n00086\t047\t000\t000\n00087\t047\t000\t000\n00088\t001\t060\t000\n00089\t001\t060\t000\n00090\t075\t000\t000\n00091\t075\t000\t000\n00092\t026\t000\t000\n00093\t026\t000\t000\n00094\t026\t000\t000\n00095\t069\t005\t000\n00096\t015\t000\t000\n00097\t015\t000\t000\n00098\t052\t075\t000\n00099\t052\t075\t000\n00100\t043\t009\t000\n00101\t043\t009\t000\n00102\t034\t000\t000\n00103\t034\t000\t000\n00104\t069\t031\t000\n00105\t069\t031\t000\n00106\t007\t000\t000\n00107\t051\t000\t000\n00108\t020\t012\t000\n00109\t026\t000\t000\n00110\t026\t000\t000\n00111\t031\t069\t000\n00112\t031\t069\t000\n00113\t030\t032\t000\n00114\t034\t000\t000\n00115\t048\t000\t000\n00116\t033\t000\t000\n00117\t038\t000\t000\n00118\t033\t041\t000\n00119\t033\t041\t000\n00120\t035\t030\t000\n00121\t035\t030\t000\n00122\t043\t000\t000\n00123\t068\t000\t000\n00124\t012\t000\t000\n00125\t009\t000\t000\n00126\t049\t000\t000\n00127\t052\t000\t000\n00128\t022\t000\t000\n00129\t033\t000\t000\n00130\t022\t000\t000\n00131\t011\t075\t000\n00132\t007\t000\t000\n00133\t050\t000\t000\n00134\t011\t000\t000\n00135\t010\t000\t000\n00136\t018\t000\t000\n00137\t036\t000\t000\n00138\t033\t075\t000\n00139\t033\t075\t000\n00140\t033\t004\t000\n00141\t033\t004\t000\n00142\t069\t046\t000\n00143\t017\t047\t000\n00144\t046\t000\t000\n00145\t046\t000\t000\n00146\t046\t000\t000\n00147\t061\t000\t000\n00148\t061\t000\t000\n00149\t039\t000\t000\n00150\t046\t000\t000\n00151\t028\t000\t000\n00152\t065\t000\t000\n00153\t065\t000\t000\n00154\t065\t000\t000\n00155\t066\t000\t000\n00156\t066\t000\t000\n00157\t066\t000\t000\n00158\t067\t000\t000\n00159\t067\t000\t000\n00160\t067\t000\t000\n00161\t050\t051\t000\n00162\t050\t051\t000\n00163\t015\t051\t000\n00164\t015\t051\t000\n00165\t068\t048\t000\n00166\t068\t048\t000\n00167\t068\t015\t000\n00168\t068\t015\t000\n00169\t039\t000\t000\n00170\t010\t035\t000\n00171\t010\t035\t000\n00172\t009\t000\t000\n00173\t056\t000\t000\n00174\t056\t000\t000\n00175\t055\t032\t000\n00176\t055\t032\t000\n00177\t028\t048\t000\n00178\t028\t048\t000\n00179\t009\t000\t000\n00180\t009\t000\t000\n00181\t009\t000\t000\n00182\t034\t000\t000\n00183\t047\t037\t000\n00184\t047\t037\t000\n00185\t005\t069\t000\n00186\t011\t006\t000\n00187\t034\t102\t000\n00188\t034\t102\t000\n00189\t034\t102\t000\n00190\t050\t053\t000\n00191\t034\t000\t000\n00192\t034\t000\t000\n00193\t003\t014\t000\n00194\t006\t011\t000\n00195\t006\t011\t000\n00196\t028\t000\t000\n00197\t028\t000\t000\n00198\t015\t000\t000\n00199\t012\t020\t000\n00200\t026\t000\t000\n00201\t026\t000\t000\n00202\t023\t000\t000\n00203\t039\t048\t000\n00204\t005\t000\t000\n00205\t005\t000\t000\n00206\t032\t050\t000\n00207\t052\t008\t000\n00208\t069\t005\t000\n00209\t022\t050\t000\n00210\t022\t000\t000\n00211\t038\t033\t000\n00212\t068\t000\t000\n00213\t005\t000\t000\n00214\t068\t062\t000\n00215\t039\t051\t000\n00216\t053\t000\t000\n00217\t062\t000\t000\n00218\t040\t049\t000\n00219\t040\t049\t000\n00220\t012\t000\t000\n00221\t012\t000\t000\n00222\t055\t030\t000\n00223\t055\t000\t000\n00224\t021\t000\t000\n00225\t072\t055\t000\n00226\t033\t011\t000\n00227\t051\t005\t000\n00228\t048\t018\t000\n00229\t048\t018\t000\n00230\t033\t000\t000\n00231\t053\t000\t000\n00232\t005\t000\t000\n00233\t036\t000\t000\n00234\t022\t000\t000\n00235\t020\t000\t000\n00236\t062\t000\t000\n00237\t022\t000\t000\n00238\t012\t000\t000\n00239\t009\t000\t000\n00240\t049\t000\t000\n00241\t047\t000\t000\n00242\t030\t032\t000\n00243\t046\t000\t000\n00244\t046\t000\t000\n00245\t046\t000\t000\n00246\t062\t000\t000\n00247\t061\t000\t000\n00248\t045\t000\t000\n00249\t046\t000\t000\n00250\t046\t000\t000\n00251\t030\t000\t000\n00252\t065\t000\t000\n00253\t065\t000\t000\n00254\t065\t000\t000\n00255\t066\t000\t000\n00256\t066\t000\t000\n00257\t066\t000\t000\n00258\t067\t000\t000\n00259\t067\t000\t000\n00260\t067\t000\t000\n00261\t050\t000\t000\n00262\t022\t000\t000\n00263\t053\t000\t000\n00264\t053\t000\t000\n00265\t019\t000\t000\n00266\t061\t000\t000\n00267\t068\t000\t000\n00268\t061\t000\t000\n00269\t019\t000\t000\n00270\t033\t044\t000\n00271\t033\t044\t000\n00272\t033\t044\t000\n00273\t034\t048\t000\n00274\t034\t048\t000\n00275\t034\t048\t000\n00276\t062\t000\t000\n00277\t062\t000\t000\n00278\t051\t000\t000\n00279\t051\t000\t000\n00280\t028\t036\t000\n00281\t028\t036\t000\n00282\t028\t036\t000\n00283\t033\t000\t000\n00284\t022\t000\t000\n00285\t027\t000\t000\n00286\t027\t000\t000\n00287\t054\t000\t000\n00288\t072\t000\t000\n00289\t054\t000\t000\n00290\t014\t000\t000\n00291\t003\t000\t000\n00292\t025\t000\t000\n00293\t043\t000\t000\n00294\t043\t000\t000\n00295\t043\t000\t000\n00296\t047\t062\t000\n00297\t047\t062\t000\n00298\t047\t037\t000\n00299\t005\t042\t000\n00300\t056\t000\t000\n00301\t056\t000\t000\n00302\t051\t000\t000\n00303\t052\t022\t000\n00304\t005\t069\t000\n00305\t005\t069\t000\n00306\t005\t069\t000\n00307\t074\t000\t000\n00308\t074\t000\t000\n00309\t009\t031\t000\n00310\t009\t031\t000\n00311\t057\t000\t000\n00312\t058\t000\t000\n00313\t035\t068\t000\n00314\t012\t000\t000\n00315\t030\t038\t000\n00316\t064\t060\t000\n00317\t064\t060\t000\n00318\t024\t000\t000\n00319\t024\t000\t000\n00320\t041\t012\t000\n00321\t041\t012\t000\n00322\t012\t000\t000\n00323\t040\t000\t000\n00324\t073\t000\t000\n00325\t047\t020\t000\n00326\t047\t020\t000\n00327\t020\t000\t000\n00328\t052\t071\t000\n00329\t026\t000\t000\n00330\t026\t000\t000\n00331\t008\t000\t000\n00332\t008\t000\t000\n00333\t030\t000\t000\n00334\t030\t000\t000\n00335\t017\t000\t000\n00336\t061\t000\t000\n00337\t026\t000\t000\n00338\t026\t000\t000\n00339\t012\t000\t000\n00340\t012\t000\t000\n00341\t052\t075\t000\n00342\t052\t075\t000\n00343\t026\t000\t000\n00344\t026\t000\t000\n00345\t021\t000\t000\n00346\t021\t000\t000\n00347\t004\t000\t000\n00348\t004\t000\t000\n00349\t033\t000\t000\n00350\t063\t000\t000\n00351\t059\t000\t000\n00352\t016\t000\t000\n00353\t015\t000\t000\n00354\t015\t000\t000\n00355\t026\t000\t000\n00356\t046\t000\t000\n00357\t034\t000\t000\n00358\t026\t000\t000\n00359\t046\t000\t000\n00360\t023\t000\t000\n00361\t039\t000\t000\n00362\t039\t000\t000\n00363\t047\t000\t000\n00364\t047\t000\t000\n00365\t047\t000\t000\n00366\t075\t000\t000\n00367\t033\t000\t000\n00368\t033\t000\t000\n00369\t033\t069\t000\n00370\t033\t000\t000\n00371\t069\t000\t000\n00372\t069\t000\t000\n00373\t022\t000\t000\n00374\t029\t000\t000\n00375\t029\t000\t000\n00376\t029\t000\t000\n00377\t029\t000\t000\n00378\t029\t000\t000\n00379\t029\t000\t000\n00380\t026\t000\t000\n00381\t026\t000\t000\n00382\t002\t000\t000\n00383\t070\t000\t000\n00384\t076\t000\t000\n00385\t032\t000\t000\n00386\t046\t000\t000\n10001\t026\t000\t000\n10002\t026\t000\t000\n10003\t026\t000\t000\n10004\t026\t000\t000\n10005\t026\t000\t000\n10006\t026\t000\t000\n10007\t026\t000\t000\n10008\t026\t000\t000\n10009\t026\t000\t000\n10010\t026\t000\t000\n10011\t026\t000\t000\n10012\t026\t000\t000\n10013\t026\t000\t000\n10014\t026\t000\t000\n10015\t026\t000\t000\n10016\t026\t000\t000\n10017\t026\t000\t000\n10018\t026\t000\t000\n10019\t026\t000\t000\n10020\t026\t000\t000\n10021\t026\t000\t000\n10022\t026\t000\t000\n10023\t026\t000\t000\n10024\t026\t000\t000\n10025\t026\t000\t000\n10026\t026\t000\t000\n10027\t026\t000\t000\n10028\t059\t000\t000\n10029\t059\t000\t000\n10030\t059\t000\t000\n10031\t046\t000\t000\n10032\t046\t000\t000\n10033\t046\t000\t000\n"
  },
  {
    "path": "VeekunImport/form_abilities4.txt",
    "content": "00016\t051\t077\t000\n00017\t051\t077\t000\n00018\t051\t077\t000\n00029\t038\t079\t000\n00030\t038\t079\t000\n00031\t038\t079\t000\n00032\t038\t079\t000\n00033\t038\t079\t000\n00034\t038\t079\t000\n00035\t056\t098\t000\n00036\t056\t098\t000\n00046\t027\t087\t000\n00047\t027\t087\t000\n00048\t014\t110\t000\n00049\t019\t110\t000\n00052\t053\t101\t000\n00053\t007\t101\t000\n00056\t072\t083\t000\n00057\t072\t083\t000\n00066\t062\t099\t000\n00067\t062\t099\t000\n00068\t062\t099\t000\n00086\t047\t093\t000\n00087\t047\t093\t000\n00090\t075\t092\t000\n00091\t075\t092\t000\n00096\t015\t108\t000\n00097\t015\t108\t000\n00106\t007\t120\t000\n00107\t051\t089\t000\n00114\t034\t102\t000\n00115\t048\t113\t000\n00116\t033\t097\t000\n00117\t038\t097\t000\n00122\t043\t111\t000\n00123\t068\t101\t000\n00124\t012\t108\t000\n00127\t052\t104\t000\n00128\t022\t083\t000\n00133\t050\t091\t000\n00137\t036\t088\t000\n00173\t056\t098\t000\n00187\t034\t102\t000\n00188\t034\t102\t000\n00189\t034\t102\t000\n00191\t034\t094\t000\n00192\t034\t094\t000\n00198\t015\t105\t000\n00210\t022\t095\t000\n00212\t068\t101\t000\n00213\t005\t082\t000\n00216\t053\t095\t000\n00217\t062\t095\t000\n00220\t012\t081\t000\n00221\t012\t081\t000\n00223\t055\t097\t000\n00224\t021\t097\t000\n00230\t033\t097\t000\n00233\t036\t088\t000\n00234\t022\t119\t000\n00235\t020\t101\t000\n00236\t062\t080\t000\n00237\t022\t101\t000\n00238\t012\t108\t000\n00241\t047\t113\t000\n00261\t050\t095\t000\n00262\t022\t095\t000\n00263\t053\t082\t000\n00264\t053\t082\t000\n00285\t027\t090\t000\n00286\t027\t090\t000\n00300\t056\t096\t000\n00301\t056\t096\t000\n00302\t051\t100\t000\n00314\t012\t110\t000\n00322\t012\t086\t000\n00323\t040\t116\t000\n00327\t020\t077\t000\n00339\t012\t107\t000\n00340\t012\t107\t000\n00353\t015\t119\t000\n00354\t015\t119\t000\n00357\t034\t094\t000\n00359\t046\t105\t000\n00361\t039\t115\t000\n00362\t039\t115\t000\n00363\t047\t115\t000\n00364\t047\t115\t000\n00365\t047\t115\t000\n00387\t065\t000\t000\n00388\t065\t000\t000\n00389\t065\t000\t000\n00390\t066\t000\t000\n00391\t066\t000\t000\n00392\t066\t000\t000\n00393\t067\t000\t000\n00394\t067\t000\t000\n00395\t067\t000\t000\n00396\t051\t000\t000\n00397\t022\t000\t000\n00398\t022\t000\t000\n00399\t086\t109\t000\n00400\t086\t109\t000\n00401\t061\t000\t000\n00402\t068\t000\t000\n00403\t079\t022\t000\n00404\t079\t022\t000\n00405\t079\t022\t000\n00406\t030\t038\t000\n00407\t030\t038\t000\n00408\t104\t000\t000\n00409\t104\t000\t000\n00410\t005\t000\t000\n00411\t005\t000\t000\n00412\t061\t000\t000\n00413\t107\t000\t000\n00414\t068\t000\t000\n00415\t118\t000\t000\n00416\t046\t000\t000\n00417\t050\t053\t000\n00418\t033\t000\t000\n00419\t033\t000\t000\n00420\t034\t000\t000\n00421\t122\t000\t000\n00422\t060\t114\t000\n00423\t060\t114\t000\n00424\t101\t053\t000\n00425\t106\t084\t000\n00426\t106\t084\t000\n00427\t050\t103\t000\n00428\t056\t103\t000\n00429\t026\t000\t000\n00430\t015\t105\t000\n00431\t007\t020\t000\n00432\t047\t020\t000\n00433\t026\t000\t000\n00434\t001\t106\t000\n00435\t001\t106\t000\n00436\t026\t085\t000\n00437\t026\t085\t000\n00438\t005\t069\t000\n00439\t043\t111\t000\n00440\t030\t032\t000\n00441\t051\t077\t000\n00442\t046\t000\t000\n00443\t008\t000\t000\n00444\t008\t000\t000\n00445\t008\t000\t000\n00446\t053\t047\t000\n00447\t080\t039\t000\n00448\t080\t039\t000\n00449\t045\t000\t000\n00450\t045\t000\t000\n00451\t004\t097\t000\n00452\t004\t097\t000\n00453\t107\t087\t000\n00454\t107\t087\t000\n00455\t026\t000\t000\n00456\t033\t114\t000\n00457\t033\t114\t000\n00458\t033\t011\t000\n00459\t117\t000\t000\n00460\t117\t000\t000\n00461\t046\t000\t000\n00462\t042\t005\t000\n00463\t020\t012\t000\n00464\t031\t116\t000\n00465\t034\t102\t000\n00466\t078\t000\t000\n00467\t049\t000\t000\n00468\t055\t032\t000\n00469\t003\t110\t000\n00470\t102\t000\t000\n00471\t081\t000\t000\n00472\t052\t008\t000\n00473\t012\t081\t000\n00474\t091\t088\t000\n00475\t080\t000\t000\n00476\t005\t042\t000\n00477\t046\t000\t000\n00478\t081\t000\t000\n00479\t026\t000\t000\n00480\t026\t000\t000\n00481\t026\t000\t000\n00482\t026\t000\t000\n00483\t046\t000\t000\n00484\t046\t000\t000\n00485\t018\t000\t000\n00486\t112\t000\t000\n00487\t046\t000\t000\n00488\t026\t000\t000\n00489\t093\t000\t000\n00490\t093\t000\t000\n00491\t123\t000\t000\n00492\t030\t000\t000\n00493\t121\t000\t000\n10034\t061\t000\t000\n10035\t061\t000\t000\n10036\t107\t000\t000\n10037\t107\t000\t000\n10038\t122\t000\t000\n10039\t060\t114\t000\n10040\t060\t114\t000\n10041\t121\t000\t000\n10042\t121\t000\t000\n10043\t121\t000\t000\n10044\t121\t000\t000\n10045\t121\t000\t000\n10046\t121\t000\t000\n10047\t121\t000\t000\n10048\t121\t000\t000\n10049\t121\t000\t000\n10050\t121\t000\t000\n10051\t121\t000\t000\n10052\t121\t000\t000\n10053\t121\t000\t000\n10054\t121\t000\t000\n10055\t121\t000\t000\n10056\t121\t000\t000\n10057\t121\t000\t000\n10058\t026\t000\t000\n10059\t026\t000\t000\n10060\t026\t000\t000\n10061\t026\t000\t000\n10062\t026\t000\t000\n10063\t026\t000\t000\n10064\t032\t000\t000\n10065\t009\t000\t000\n"
  },
  {
    "path": "VeekunImport/form_abilities5.txt",
    "content": "00001\t065\t000\t034\n00002\t065\t000\t034\n00003\t065\t000\t034\n00004\t066\t000\t094\n00005\t066\t000\t094\n00006\t066\t000\t094\n00007\t067\t000\t044\n00008\t067\t000\t044\n00009\t067\t000\t044\n00010\t019\t000\t050\n00011\t061\t000\t000\n00012\t014\t000\t110\n00013\t019\t000\t050\n00014\t061\t000\t000\n00015\t068\t000\t097\n00016\t051\t077\t145\n00017\t051\t077\t145\n00018\t051\t077\t145\n00019\t050\t062\t055\n00020\t050\t062\t055\n00021\t051\t000\t097\n00022\t051\t000\t097\n00023\t022\t061\t127\n00024\t022\t061\t127\n00025\t009\t000\t031\n00026\t009\t000\t031\n00027\t008\t000\t146\n00028\t008\t000\t146\n00029\t038\t079\t055\n00030\t038\t079\t055\n00031\t038\t079\t125\n00032\t038\t079\t055\n00033\t038\t079\t055\n00034\t038\t079\t125\n00035\t056\t098\t132\n00036\t056\t098\t109\n00037\t018\t000\t070\n00038\t018\t000\t070\n00039\t056\t000\t132\n00040\t056\t000\t119\n00041\t039\t000\t151\n00042\t039\t000\t151\n00043\t034\t000\t050\n00044\t034\t000\t001\n00045\t034\t000\t027\n00046\t027\t087\t006\n00047\t027\t087\t006\n00048\t014\t110\t050\n00049\t019\t110\t147\n00050\t008\t071\t159\n00051\t008\t071\t159\n00052\t053\t101\t127\n00053\t007\t101\t127\n00054\t006\t013\t033\n00055\t006\t013\t033\n00056\t072\t083\t128\n00057\t072\t083\t128\n00058\t022\t018\t154\n00059\t022\t018\t154\n00060\t011\t006\t033\n00061\t011\t006\t033\n00062\t011\t006\t033\n00063\t028\t039\t098\n00064\t028\t039\t098\n00065\t028\t039\t098\n00066\t062\t099\t080\n00067\t062\t099\t080\n00068\t062\t099\t080\n00069\t034\t000\t082\n00070\t034\t000\t082\n00071\t034\t000\t082\n00072\t029\t064\t044\n00073\t029\t064\t044\n00074\t069\t005\t008\n00075\t069\t005\t008\n00076\t069\t005\t008\n00077\t050\t018\t049\n00078\t050\t018\t049\n00079\t012\t020\t144\n00080\t012\t020\t144\n00081\t042\t005\t148\n00082\t042\t005\t148\n00083\t051\t039\t128\n00084\t050\t048\t077\n00085\t050\t048\t077\n00086\t047\t093\t115\n00087\t047\t093\t115\n00088\t001\t060\t143\n00089\t001\t060\t143\n00090\t075\t092\t142\n00091\t075\t092\t142\n00092\t026\t000\t000\n00093\t026\t000\t000\n00094\t026\t000\t000\n00095\t069\t005\t133\n00096\t015\t108\t039\n00097\t015\t108\t039\n00098\t052\t075\t125\n00099\t052\t075\t125\n00100\t043\t009\t106\n00101\t043\t009\t106\n00102\t034\t000\t139\n00103\t034\t000\t139\n00104\t069\t031\t004\n00105\t069\t031\t004\n00106\t007\t120\t084\n00107\t051\t089\t039\n00108\t020\t012\t013\n00109\t026\t000\t000\n00110\t026\t000\t000\n00111\t031\t069\t120\n00112\t031\t069\t120\n00113\t030\t032\t131\n00114\t034\t102\t144\n00115\t048\t113\t039\n00116\t033\t097\t006\n00117\t038\t097\t006\n00118\t033\t041\t031\n00119\t033\t041\t031\n00120\t035\t030\t148\n00121\t035\t030\t148\n00122\t043\t111\t101\n00123\t068\t101\t080\n00124\t012\t108\t087\n00125\t009\t000\t072\n00126\t049\t000\t072\n00127\t052\t104\t153\n00128\t022\t083\t125\n00129\t033\t000\t155\n00130\t022\t000\t153\n00131\t011\t075\t093\n00132\t007\t000\t150\n00133\t050\t091\t107\n00134\t011\t000\t093\n00135\t010\t000\t095\n00136\t018\t000\t062\n00137\t036\t088\t148\n00138\t033\t075\t133\n00139\t033\t075\t133\n00140\t033\t004\t133\n00141\t033\t004\t133\n00142\t069\t046\t127\n00143\t017\t047\t082\n00144\t046\t000\t081\n00145\t046\t000\t031\n00146\t046\t000\t049\n00147\t061\t000\t063\n00148\t061\t000\t063\n00149\t039\t000\t136\n00150\t046\t000\t127\n00151\t028\t000\t000\n00152\t065\t000\t102\n00153\t065\t000\t102\n00154\t065\t000\t102\n00155\t066\t000\t018\n00156\t066\t000\t018\n00157\t066\t000\t018\n00158\t067\t000\t125\n00159\t067\t000\t125\n00160\t067\t000\t125\n00161\t050\t051\t119\n00162\t050\t051\t119\n00163\t015\t051\t110\n00164\t015\t051\t110\n00165\t068\t048\t155\n00166\t068\t048\t089\n00167\t068\t015\t097\n00168\t068\t015\t097\n00169\t039\t000\t151\n00170\t010\t035\t011\n00171\t010\t035\t011\n00172\t009\t000\t031\n00173\t056\t098\t132\n00174\t056\t000\t132\n00175\t055\t032\t105\n00176\t055\t032\t105\n00177\t028\t048\t156\n00178\t028\t048\t156\n00179\t009\t000\t057\n00180\t009\t000\t057\n00181\t009\t000\t057\n00182\t034\t000\t131\n00183\t047\t037\t157\n00184\t047\t037\t157\n00185\t005\t069\t155\n00186\t011\t006\t002\n00187\t034\t102\t151\n00188\t034\t102\t151\n00189\t034\t102\t151\n00190\t050\t053\t092\n00191\t034\t094\t048\n00192\t034\t094\t048\n00193\t003\t014\t119\n00194\t006\t011\t109\n00195\t006\t011\t109\n00196\t028\t000\t156\n00197\t028\t000\t039\n00198\t015\t105\t158\n00199\t012\t020\t144\n00200\t026\t000\t000\n00201\t026\t000\t000\n00202\t023\t000\t140\n00203\t039\t048\t157\n00204\t005\t000\t142\n00205\t005\t000\t142\n00206\t032\t050\t155\n00207\t052\t008\t017\n00208\t069\t005\t125\n00209\t022\t050\t155\n00210\t022\t095\t155\n00211\t038\t033\t022\n00212\t068\t101\t135\n00213\t005\t082\t126\n00214\t068\t062\t153\n00215\t039\t051\t124\n00216\t053\t095\t118\n00217\t062\t095\t127\n00218\t040\t049\t133\n00219\t040\t049\t133\n00220\t012\t081\t047\n00221\t012\t081\t047\n00222\t055\t030\t144\n00223\t055\t097\t141\n00224\t021\t097\t141\n00225\t072\t055\t015\n00226\t033\t011\t041\n00227\t051\t005\t133\n00228\t048\t018\t127\n00229\t048\t018\t127\n00230\t033\t097\t006\n00231\t053\t000\t008\n00232\t005\t000\t008\n00233\t036\t088\t148\n00234\t022\t119\t157\n00235\t020\t101\t141\n00236\t062\t080\t072\n00237\t022\t101\t080\n00238\t012\t108\t093\n00239\t009\t000\t072\n00240\t049\t000\t072\n00241\t047\t113\t157\n00242\t030\t032\t131\n00243\t046\t000\t010\n00244\t046\t000\t018\n00245\t046\t000\t011\n00246\t062\t000\t008\n00247\t061\t000\t000\n00248\t045\t000\t127\n00249\t046\t000\t136\n00250\t046\t000\t144\n00251\t030\t000\t000\n00252\t065\t000\t084\n00253\t065\t000\t084\n00254\t065\t000\t084\n00255\t066\t000\t003\n00256\t066\t000\t003\n00257\t066\t000\t003\n00258\t067\t000\t006\n00259\t067\t000\t006\n00260\t067\t000\t006\n00261\t050\t095\t155\n00262\t022\t095\t153\n00263\t053\t082\t095\n00264\t053\t082\t095\n00265\t019\t000\t050\n00266\t061\t000\t000\n00267\t068\t000\t079\n00268\t061\t000\t000\n00269\t019\t000\t014\n00270\t033\t044\t020\n00271\t033\t044\t020\n00272\t033\t044\t020\n00273\t034\t048\t124\n00274\t034\t048\t124\n00275\t034\t048\t124\n00276\t062\t000\t113\n00277\t062\t000\t113\n00278\t051\t000\t044\n00279\t051\t000\t044\n00280\t028\t036\t140\n00281\t028\t036\t140\n00282\t028\t036\t140\n00283\t033\t000\t044\n00284\t022\t000\t127\n00285\t027\t090\t095\n00286\t027\t090\t101\n00287\t054\t000\t000\n00288\t072\t000\t000\n00289\t054\t000\t000\n00290\t014\t000\t050\n00291\t003\t000\t151\n00292\t025\t000\t000\n00293\t043\t000\t155\n00294\t043\t000\t113\n00295\t043\t000\t113\n00296\t047\t062\t125\n00297\t047\t062\t125\n00298\t047\t037\t157\n00299\t005\t042\t159\n00300\t056\t096\t147\n00301\t056\t096\t147\n00302\t051\t100\t158\n00303\t052\t022\t125\n00304\t005\t069\t134\n00305\t005\t069\t134\n00306\t005\t069\t134\n00307\t074\t000\t140\n00308\t074\t000\t140\n00309\t009\t031\t058\n00310\t009\t031\t058\n00311\t057\t000\t000\n00312\t058\t000\t000\n00313\t035\t068\t158\n00314\t012\t110\t158\n00315\t030\t038\t102\n00316\t064\t060\t082\n00317\t064\t060\t082\n00318\t024\t000\t003\n00319\t024\t000\t003\n00320\t041\t012\t046\n00321\t041\t012\t046\n00322\t012\t086\t020\n00323\t040\t116\t083\n00324\t073\t000\t075\n00325\t047\t020\t082\n00326\t047\t020\t082\n00327\t020\t077\t126\n00328\t052\t071\t125\n00329\t026\t000\t000\n00330\t026\t000\t000\n00331\t008\t000\t011\n00332\t008\t000\t011\n00333\t030\t000\t013\n00334\t030\t000\t013\n00335\t017\t000\t137\n00336\t061\t000\t151\n00337\t026\t000\t000\n00338\t026\t000\t000\n00339\t012\t107\t093\n00340\t012\t107\t093\n00341\t052\t075\t091\n00342\t052\t075\t091\n00343\t026\t000\t000\n00344\t026\t000\t000\n00345\t021\t000\t114\n00346\t021\t000\t114\n00347\t004\t000\t033\n00348\t004\t000\t033\n00349\t033\t000\t091\n00350\t063\t000\t056\n00351\t059\t000\t000\n00352\t016\t000\t000\n00353\t015\t119\t130\n00354\t015\t119\t130\n00355\t026\t000\t000\n00356\t046\t000\t000\n00357\t034\t094\t139\n00358\t026\t000\t000\n00359\t046\t105\t154\n00360\t023\t000\t140\n00361\t039\t115\t141\n00362\t039\t115\t141\n00363\t047\t115\t012\n00364\t047\t115\t012\n00365\t047\t115\t012\n00366\t075\t000\t155\n00367\t033\t000\t041\n00368\t033\t000\t093\n00369\t033\t069\t005\n00370\t033\t000\t093\n00371\t069\t000\t125\n00372\t069\t000\t142\n00373\t022\t000\t153\n00374\t029\t000\t135\n00375\t029\t000\t135\n00376\t029\t000\t135\n00377\t029\t000\t005\n00378\t029\t000\t115\n00379\t029\t000\t135\n00380\t026\t000\t000\n00381\t026\t000\t000\n00382\t002\t000\t000\n00383\t070\t000\t000\n00384\t076\t000\t000\n00385\t032\t000\t000\n00386\t046\t000\t000\n00387\t065\t000\t075\n00388\t065\t000\t075\n00389\t065\t000\t075\n00390\t066\t000\t089\n00391\t066\t000\t089\n00392\t066\t000\t089\n00393\t067\t000\t128\n00394\t067\t000\t128\n00395\t067\t000\t128\n00396\t051\t000\t000\n00397\t022\t000\t120\n00398\t022\t000\t120\n00399\t086\t109\t141\n00400\t086\t109\t141\n00401\t061\t000\t050\n00402\t068\t000\t101\n00403\t079\t022\t062\n00404\t079\t022\t062\n00405\t079\t022\t062\n00406\t030\t038\t102\n00407\t030\t038\t101\n00408\t104\t000\t125\n00409\t104\t000\t125\n00410\t005\t000\t043\n00411\t005\t000\t043\n00412\t061\t000\t142\n00413\t107\t000\t142\n00414\t068\t000\t110\n00415\t118\t000\t055\n00416\t046\t000\t127\n00417\t050\t053\t010\n00418\t033\t000\t041\n00419\t033\t000\t041\n00420\t034\t000\t000\n00421\t122\t000\t000\n00422\t060\t114\t159\n00423\t060\t114\t159\n00424\t101\t053\t092\n00425\t106\t084\t138\n00426\t106\t084\t138\n00427\t050\t103\t007\n00428\t056\t103\t007\n00429\t026\t000\t000\n00430\t015\t105\t153\n00431\t007\t020\t051\n00432\t047\t020\t128\n00433\t026\t000\t000\n00434\t001\t106\t051\n00435\t001\t106\t051\n00436\t026\t085\t134\n00437\t026\t085\t134\n00438\t005\t069\t155\n00439\t043\t111\t101\n00440\t030\t032\t132\n00441\t051\t077\t145\n00442\t046\t000\t151\n00443\t008\t000\t024\n00444\t008\t000\t024\n00445\t008\t000\t024\n00446\t053\t047\t082\n00447\t080\t039\t158\n00448\t080\t039\t154\n00449\t045\t000\t159\n00450\t045\t000\t159\n00451\t004\t097\t051\n00452\t004\t097\t051\n00453\t107\t087\t143\n00454\t107\t087\t143\n00455\t026\t000\t000\n00456\t033\t114\t041\n00457\t033\t114\t041\n00458\t033\t011\t041\n00459\t117\t000\t043\n00460\t117\t000\t043\n00461\t046\t000\t124\n00462\t042\t005\t148\n00463\t020\t012\t013\n00464\t031\t116\t120\n00465\t034\t102\t144\n00466\t078\t000\t072\n00467\t049\t000\t072\n00468\t055\t032\t105\n00469\t003\t110\t119\n00470\t102\t000\t034\n00471\t081\t000\t115\n00472\t052\t008\t090\n00473\t012\t081\t047\n00474\t091\t088\t148\n00475\t080\t000\t154\n00476\t005\t042\t159\n00477\t046\t000\t000\n00478\t081\t000\t130\n00479\t026\t000\t000\n00480\t026\t000\t000\n00481\t026\t000\t000\n00482\t026\t000\t000\n00483\t046\t000\t140\n00484\t046\t000\t140\n00485\t018\t000\t049\n00486\t112\t000\t000\n00487\t046\t000\t140\n00488\t026\t000\t000\n00489\t093\t000\t000\n00490\t093\t000\t000\n00491\t123\t000\t000\n00492\t030\t000\t000\n00493\t121\t000\t000\n00494\t162\t000\t000\n00495\t065\t000\t126\n00496\t065\t000\t126\n00497\t065\t000\t126\n00498\t066\t000\t047\n00499\t066\t000\t047\n00500\t066\t000\t120\n00501\t067\t000\t075\n00502\t067\t000\t075\n00503\t067\t000\t075\n00504\t050\t051\t148\n00505\t035\t051\t148\n00506\t072\t053\t050\n00507\t022\t146\t113\n00508\t022\t146\t113\n00509\t007\t084\t158\n00510\t007\t084\t158\n00511\t082\t000\t065\n00512\t082\t000\t065\n00513\t082\t000\t066\n00514\t082\t000\t066\n00515\t082\t000\t067\n00516\t082\t000\t067\n00517\t108\t028\t140\n00518\t108\t028\t140\n00519\t145\t105\t079\n00520\t145\t105\t079\n00521\t145\t105\t079\n00522\t031\t078\t157\n00523\t031\t078\t157\n00524\t005\t000\t159\n00525\t005\t000\t159\n00526\t005\t000\t159\n00527\t109\t103\t086\n00528\t109\t103\t086\n00529\t146\t159\t104\n00530\t146\t159\t104\n00531\t131\t144\t103\n00532\t062\t125\t089\n00533\t062\t125\t089\n00534\t062\t125\t089\n00535\t033\t093\t011\n00536\t033\t093\t011\n00537\t033\t143\t011\n00538\t062\t039\t104\n00539\t005\t039\t104\n00540\t068\t034\t142\n00541\t102\t034\t142\n00542\t068\t034\t142\n00543\t038\t068\t095\n00544\t038\t068\t095\n00545\t038\t068\t095\n00546\t158\t151\t034\n00547\t158\t151\t034\n00548\t034\t020\t102\n00549\t034\t020\t102\n00550\t120\t091\t104\n00551\t022\t153\t083\n00552\t022\t153\t083\n00553\t022\t153\t083\n00554\t055\t000\t039\n00555\t125\t000\t161\n00556\t011\t034\t114\n00557\t005\t075\t133\n00558\t005\t075\t133\n00559\t061\t153\t022\n00560\t061\t153\t022\n00561\t147\t098\t110\n00562\t152\t000\t000\n00563\t152\t000\t000\n00564\t116\t005\t033\n00565\t116\t005\t033\n00566\t129\t000\t000\n00567\t129\t000\t000\n00568\t001\t060\t106\n00569\t001\t133\t106\n00570\t149\t000\t000\n00571\t149\t000\t000\n00572\t056\t101\t092\n00573\t056\t101\t092\n00574\t119\t000\t023\n00575\t119\t000\t023\n00576\t119\t000\t023\n00577\t142\t098\t144\n00578\t142\t098\t144\n00579\t142\t098\t144\n00580\t051\t145\t093\n00581\t051\t145\t093\n00582\t115\t000\t133\n00583\t115\t000\t133\n00584\t115\t000\t133\n00585\t034\t157\t032\n00586\t034\t157\t032\n00587\t009\t000\t078\n00588\t068\t061\t099\n00589\t068\t075\t142\n00590\t027\t000\t144\n00591\t027\t000\t144\n00592\t011\t130\t006\n00593\t011\t130\t006\n00594\t131\t093\t144\n00595\t014\t127\t068\n00596\t014\t127\t068\n00597\t160\t000\t000\n00598\t160\t000\t000\n00599\t057\t058\t029\n00600\t057\t058\t029\n00601\t057\t058\t029\n00602\t026\t000\t000\n00603\t026\t000\t000\n00604\t026\t000\t000\n00605\t140\t028\t148\n00606\t140\t028\t148\n00607\t018\t049\t023\n00608\t018\t049\t023\n00609\t018\t049\t023\n00610\t079\t104\t127\n00611\t079\t104\t127\n00612\t079\t104\t127\n00613\t081\t000\t155\n00614\t081\t000\t033\n00615\t026\t000\t000\n00616\t093\t075\t142\n00617\t093\t060\t084\n00618\t009\t007\t008\n00619\t039\t144\t120\n00620\t039\t144\t120\n00621\t024\t125\t104\n00622\t089\t103\t099\n00623\t089\t103\t099\n00624\t128\t039\t046\n00625\t128\t039\t046\n00626\t120\t157\t043\n00627\t051\t125\t055\n00628\t051\t125\t128\n00629\t145\t142\t133\n00630\t145\t142\t133\n00631\t082\t018\t073\n00632\t068\t055\t054\n00633\t055\t000\t000\n00634\t055\t000\t000\n00635\t026\t000\t000\n00636\t049\t000\t068\n00637\t049\t000\t068\n00638\t154\t000\t000\n00639\t154\t000\t000\n00640\t154\t000\t000\n00641\t158\t000\t128\n00642\t158\t000\t128\n00643\t163\t000\t000\n00644\t164\t000\t000\n00645\t159\t000\t125\n00646\t046\t000\t000\n00647\t154\t000\t000\n00648\t032\t000\t000\n00649\t088\t000\t000\n10001\t026\t000\t000\n10002\t026\t000\t000\n10003\t026\t000\t000\n10004\t026\t000\t000\n10005\t026\t000\t000\n10006\t026\t000\t000\n10007\t026\t000\t000\n10008\t026\t000\t000\n10009\t026\t000\t000\n10010\t026\t000\t000\n10011\t026\t000\t000\n10012\t026\t000\t000\n10013\t026\t000\t000\n10014\t026\t000\t000\n10015\t026\t000\t000\n10016\t026\t000\t000\n10017\t026\t000\t000\n10018\t026\t000\t000\n10019\t026\t000\t000\n10020\t026\t000\t000\n10021\t026\t000\t000\n10022\t026\t000\t000\n10023\t026\t000\t000\n10024\t026\t000\t000\n10025\t026\t000\t000\n10026\t026\t000\t000\n10027\t026\t000\t000\n10028\t059\t000\t000\n10029\t059\t000\t000\n10030\t059\t000\t000\n10031\t046\t000\t000\n10032\t046\t000\t000\n10033\t046\t000\t000\n10034\t061\t000\t142\n10035\t061\t000\t142\n10036\t107\t000\t142\n10037\t107\t000\t142\n10038\t122\t000\t000\n10039\t060\t114\t159\n10040\t060\t114\t159\n10041\t121\t000\t000\n10042\t121\t000\t000\n10043\t121\t000\t000\n10044\t121\t000\t000\n10045\t121\t000\t000\n10046\t121\t000\t000\n10047\t121\t000\t000\n10048\t121\t000\t000\n10049\t121\t000\t000\n10050\t121\t000\t000\n10051\t121\t000\t000\n10052\t121\t000\t000\n10053\t121\t000\t000\n10054\t121\t000\t000\n10055\t121\t000\t000\n10056\t121\t000\t000\n10057\t121\t000\t000\n10058\t026\t000\t000\n10059\t026\t000\t000\n10060\t026\t000\t000\n10061\t026\t000\t000\n10062\t026\t000\t000\n10063\t026\t000\t000\n10064\t032\t000\t000\n10065\t009\t000\t031\n10066\t069\t091\t104\n10067\t125\t000\t161\n10068\t034\t157\t032\n10069\t034\t157\t032\n10070\t034\t157\t032\n10071\t034\t157\t032\n10072\t034\t157\t032\n10073\t034\t157\t032\n10074\t032\t000\t000\n10075\t088\t000\t000\n10076\t088\t000\t000\n10077\t088\t000\t000\n10078\t088\t000\t000\n10079\t144\t000\t000\n10080\t010\t000\t000\n10081\t022\t000\t000\n10082\t164\t000\t000\n10083\t163\t000\t000\n10084\t154\t000\t000\n"
  },
  {
    "path": "VeekunImport/form_abilities6.txt",
    "content": "00039\t056\t172\t132\n00040\t056\t172\t119\n00145\t046\t000\t009\n00174\t056\t172\t132\n00311\t057\t000\t031\n00312\t058\t000\t010\n00349\t033\t012\t091\n00350\t063\t172\t056\n00352\t016\t000\t168\n00355\t026\t000\t119\n00356\t046\t000\t119\n00396\t051\t000\t120\n00477\t046\t000\t119\n00543\t038\t068\t003\n00544\t038\t068\t003\n00545\t038\t068\t003\n00574\t119\t172\t023\n00575\t119\t172\t023\n00576\t119\t172\t023\n00598\t160\t000\t107\n00607\t018\t049\t151\n00608\t018\t049\t151\n00609\t018\t049\t151\n00650\t065\t000\t171\n00651\t065\t000\t171\n00652\t065\t000\t171\n00653\t066\t000\t170\n00654\t066\t000\t170\n00655\t066\t000\t170\n00656\t067\t000\t168\n00657\t067\t000\t168\n00658\t067\t000\t168\n00659\t053\t167\t037\n00660\t053\t167\t037\n00661\t145\t000\t177\n00662\t049\t000\t177\n00663\t049\t000\t177\n00664\t019\t014\t132\n00665\t061\t000\t132\n00666\t019\t014\t132\n00667\t079\t127\t153\n00668\t079\t127\t153\n00669\t166\t000\t180\n00670\t166\t000\t180\n00671\t166\t000\t180\n00672\t157\t000\t179\n00673\t157\t000\t179\n00674\t089\t104\t113\n00675\t089\t104\t113\n00676\t169\t000\t000\n00677\t051\t151\t020\n00678\t051\t151\t158\n00679\t099\t000\t000\n00680\t099\t000\t000\n00681\t176\t000\t000\n00682\t131\t000\t165\n00683\t131\t000\t165\n00684\t175\t000\t084\n00685\t175\t000\t084\n00686\t126\t021\t151\n00687\t126\t021\t151\n00688\t181\t097\t124\n00689\t181\t097\t124\n00690\t038\t143\t091\n00691\t038\t143\t091\n00692\t178\t000\t000\n00693\t178\t000\t000\n00694\t087\t008\t094\n00695\t087\t008\t094\n00696\t173\t000\t005\n00697\t173\t000\t069\n00698\t174\t000\t117\n00699\t174\t000\t117\n00700\t056\t000\t182\n00701\t007\t084\t104\n00702\t167\t053\t057\n00703\t029\t000\t005\n00704\t157\t093\t183\n00705\t157\t093\t183\n00706\t157\t093\t183\n00707\t158\t000\t170\n00708\t030\t119\t139\n00709\t030\t119\t139\n00710\t053\t119\t015\n00711\t053\t119\t015\n00712\t020\t115\t005\n00713\t020\t115\t005\n00714\t119\t151\t140\n00715\t119\t151\t140\n00716\t187\t000\t000\n00717\t186\t000\t000\n00718\t188\t000\t000\n00719\t029\t000\t000\n00720\t170\t000\t000\n00721\t011\t000\t000\n10085\t121\t000\t000\n10086\t019\t014\t132\n10087\t019\t014\t132\n10088\t019\t014\t132\n10089\t019\t014\t132\n10090\t019\t014\t132\n10091\t019\t014\t132\n10092\t019\t014\t132\n10093\t019\t014\t132\n10094\t019\t014\t132\n10095\t019\t014\t132\n10096\t019\t014\t132\n10097\t019\t014\t132\n10098\t019\t014\t132\n10099\t019\t014\t132\n10100\t019\t014\t132\n10101\t019\t014\t132\n10102\t019\t014\t132\n10103\t166\t000\t180\n10104\t166\t000\t180\n10105\t166\t000\t180\n10106\t166\t000\t180\n10107\t166\t000\t180\n10108\t166\t000\t180\n10109\t166\t000\t180\n10110\t166\t000\t180\n10111\t166\t000\t180\n10112\t166\t000\t180\n10113\t166\t000\t180\n10114\t166\t000\t180\n10115\t169\t000\t000\n10116\t169\t000\t000\n10117\t169\t000\t000\n10118\t169\t000\t000\n10119\t169\t000\t000\n10120\t169\t000\t000\n10121\t169\t000\t000\n10122\t169\t000\t000\n10123\t169\t000\t000\n10124\t051\t151\t172\n10125\t176\t000\t000\n10126\t053\t119\t015\n10127\t053\t119\t015\n10128\t053\t119\t015\n10129\t053\t119\t015\n10130\t053\t119\t015\n10131\t053\t119\t015\n10132\t187\t000\t000\n10133\t047\t000\t000\n10134\t181\t000\t000\n10135\t070\t000\t000\n10136\t178\t000\t000\n10137\t036\t000\t000\n10138\t023\t000\t000\n10139\t185\t000\t000\n10140\t184\t000\t000\n10141\t104\t000\t000\n10142\t181\t000\t000\n10143\t080\t000\t000\n10144\t015\t000\t000\n10145\t104\t000\t000\n10146\t101\t000\t000\n10147\t092\t000\t000\n10148\t094\t000\t000\n10149\t045\t000\t000\n10150\t003\t000\t000\n10151\t182\t000\t000\n10152\t037\t000\t000\n10153\t111\t000\t000\n10154\t074\t000\t000\n10155\t022\t000\t000\n10156\t158\t000\t000\n10157\t156\t000\t000\n10158\t159\t000\t000\n10159\t091\t000\t000\n10160\t117\t000\t000\n10161\t019\t014\t132\n10162\t019\t014\t132\n10163\t166\t000\t180\n10164\t026\t000\t000\n10165\t026\t000\t000\n10166\t033\t000\t000\n10167\t031\t000\t000\n10168\t156\t000\t000\n10169\t182\t000\t000\n10170\t039\t000\t000\n10171\t131\t000\t000\n10172\t173\t000\t000\n10173\t075\t000\t000\n10174\t159\t000\t000\n10175\t099\t000\t000\n10176\t174\t000\t000\n10177\t156\t000\t000\n10178\t181\t000\t000\n10179\t189\t000\t000\n10180\t190\t000\t000\n10181\t191\t000\t000\n10182\t009\t000\t031\n10183\t009\t000\t031\n10184\t009\t000\t031\n10185\t009\t000\t031\n10186\t009\t000\t031\n10187\t009\t000\t031\n10188\t170\t000\t000\n10189\t125\t000\t000\n10190\t113\t000\t000\n10191\t184\t000\t000\n10192\t091\t000\t000\n"
  },
  {
    "path": "VeekunImport/form_stats1.txt",
    "content": "00001\t12\t04\t045\t049\t049\t045\t065\t065\t0\t0\t0\t0\t1\t0\n00002\t12\t04\t060\t062\t063\t060\t080\t080\t0\t0\t0\t0\t1\t1\n00003\t12\t04\t080\t082\t083\t080\t100\t100\t0\t0\t0\t0\t2\t1\n00004\t10\t00\t039\t052\t043\t065\t050\t050\t0\t0\t0\t1\t0\t0\n00005\t10\t00\t058\t064\t058\t080\t065\t065\t0\t0\t0\t1\t1\t0\n00006\t10\t03\t078\t084\t078\t100\t085\t085\t0\t0\t0\t0\t3\t0\n00007\t11\t00\t044\t048\t065\t043\t050\t050\t0\t0\t1\t0\t0\t0\n00008\t11\t00\t059\t063\t080\t058\t065\t065\t0\t0\t1\t0\t0\t1\n00009\t11\t00\t079\t083\t100\t078\t085\t085\t0\t0\t0\t0\t0\t3\n00010\t07\t00\t045\t030\t035\t045\t020\t020\t1\t0\t0\t0\t0\t0\n00011\t07\t00\t050\t020\t055\t030\t025\t025\t0\t0\t2\t0\t0\t0\n00012\t07\t03\t060\t045\t050\t070\t080\t080\t0\t0\t0\t0\t2\t1\n00013\t07\t04\t040\t035\t030\t050\t020\t020\t0\t0\t0\t1\t0\t0\n00014\t07\t04\t045\t025\t050\t035\t025\t025\t0\t0\t2\t0\t0\t0\n00015\t07\t04\t065\t080\t040\t075\t045\t045\t0\t2\t0\t0\t0\t1\n00016\t01\t03\t040\t045\t040\t056\t035\t035\t0\t0\t0\t1\t0\t0\n00017\t01\t03\t063\t060\t055\t071\t050\t050\t0\t0\t0\t2\t0\t0\n00018\t01\t03\t083\t080\t075\t091\t070\t070\t0\t0\t0\t3\t0\t0\n00019\t01\t00\t030\t056\t035\t072\t025\t025\t0\t0\t0\t1\t0\t0\n00020\t01\t00\t055\t081\t060\t097\t050\t050\t0\t0\t0\t2\t0\t0\n00021\t01\t03\t040\t060\t030\t070\t031\t031\t0\t0\t0\t1\t0\t0\n00022\t01\t03\t065\t090\t065\t100\t061\t061\t0\t0\t0\t2\t0\t0\n00023\t04\t00\t035\t060\t044\t055\t040\t040\t0\t1\t0\t0\t0\t0\n00024\t04\t00\t060\t085\t069\t080\t065\t065\t0\t2\t0\t0\t0\t0\n00025\t13\t00\t035\t055\t030\t090\t050\t050\t0\t0\t0\t2\t0\t0\n00026\t13\t00\t060\t090\t055\t110\t090\t090\t0\t0\t0\t3\t0\t0\n00027\t05\t00\t050\t075\t085\t040\t030\t030\t0\t0\t1\t0\t0\t0\n00028\t05\t00\t075\t100\t110\t065\t055\t055\t0\t0\t2\t0\t0\t0\n00029\t04\t00\t055\t047\t052\t041\t040\t040\t1\t0\t0\t0\t0\t0\n00030\t04\t00\t070\t062\t067\t056\t055\t055\t2\t0\t0\t0\t0\t0\n00031\t04\t05\t090\t082\t087\t076\t075\t075\t3\t0\t0\t0\t0\t0\n00032\t04\t00\t046\t057\t040\t050\t040\t040\t0\t1\t0\t0\t0\t0\n00033\t04\t00\t061\t072\t057\t065\t055\t055\t0\t2\t0\t0\t0\t0\n00034\t04\t05\t081\t092\t077\t085\t075\t075\t0\t3\t0\t0\t0\t0\n00035\t01\t00\t070\t045\t048\t035\t060\t060\t2\t0\t0\t0\t0\t0\n00036\t01\t00\t095\t070\t073\t060\t085\t085\t3\t0\t0\t0\t0\t0\n00037\t10\t00\t038\t041\t040\t065\t065\t065\t0\t0\t0\t1\t0\t0\n00038\t10\t00\t073\t076\t075\t100\t100\t100\t0\t0\t0\t1\t0\t1\n00039\t01\t00\t115\t045\t020\t020\t025\t025\t2\t0\t0\t0\t0\t0\n00040\t01\t00\t140\t070\t045\t045\t050\t050\t3\t0\t0\t0\t0\t0\n00041\t04\t03\t040\t045\t035\t055\t040\t040\t0\t0\t0\t1\t0\t0\n00042\t04\t03\t075\t080\t070\t090\t075\t075\t0\t0\t0\t2\t0\t0\n00043\t12\t04\t045\t050\t055\t030\t075\t075\t0\t0\t0\t0\t1\t0\n00044\t12\t04\t060\t065\t070\t040\t085\t085\t0\t0\t0\t0\t2\t0\n00045\t12\t04\t075\t080\t085\t050\t100\t100\t0\t0\t0\t0\t3\t0\n00046\t07\t12\t035\t070\t055\t025\t055\t055\t0\t1\t0\t0\t0\t0\n00047\t07\t12\t060\t095\t080\t030\t080\t080\t0\t2\t1\t0\t0\t0\n00048\t07\t04\t060\t055\t050\t045\t040\t040\t0\t0\t0\t0\t0\t1\n00049\t07\t04\t070\t065\t060\t090\t090\t090\t0\t0\t0\t1\t1\t0\n00050\t05\t00\t010\t055\t025\t095\t045\t045\t0\t0\t0\t1\t0\t0\n00051\t05\t00\t035\t080\t050\t120\t070\t070\t0\t0\t0\t2\t0\t0\n00052\t01\t00\t040\t045\t035\t090\t040\t040\t0\t0\t0\t1\t0\t0\n00053\t01\t00\t065\t070\t060\t115\t065\t065\t0\t0\t0\t2\t0\t0\n00054\t11\t00\t050\t052\t048\t055\t050\t050\t0\t0\t0\t0\t1\t0\n00055\t11\t00\t080\t082\t078\t085\t080\t080\t0\t0\t0\t0\t2\t0\n00056\t02\t00\t040\t080\t035\t070\t035\t035\t0\t1\t0\t0\t0\t0\n00057\t02\t00\t065\t105\t060\t095\t060\t060\t0\t2\t0\t0\t0\t0\n00058\t10\t00\t055\t070\t045\t060\t050\t050\t0\t1\t0\t0\t0\t0\n00059\t10\t00\t090\t110\t080\t095\t080\t080\t0\t2\t0\t0\t0\t0\n00060\t11\t00\t040\t050\t040\t090\t040\t040\t0\t0\t0\t1\t0\t0\n00061\t11\t00\t065\t065\t065\t090\t050\t050\t0\t0\t0\t2\t0\t0\n00062\t11\t02\t090\t085\t095\t070\t070\t070\t0\t0\t3\t0\t0\t0\n00063\t14\t00\t025\t020\t015\t090\t105\t105\t0\t0\t0\t0\t1\t0\n00064\t14\t00\t040\t035\t030\t105\t120\t120\t0\t0\t0\t0\t2\t0\n00065\t14\t00\t055\t050\t045\t120\t135\t135\t0\t0\t0\t0\t3\t0\n00066\t02\t00\t070\t080\t050\t035\t035\t035\t0\t1\t0\t0\t0\t0\n00067\t02\t00\t080\t100\t070\t045\t050\t050\t0\t2\t0\t0\t0\t0\n00068\t02\t00\t090\t130\t080\t055\t065\t065\t0\t3\t0\t0\t0\t0\n00069\t12\t04\t050\t075\t035\t040\t070\t070\t0\t1\t0\t0\t0\t0\n00070\t12\t04\t065\t090\t050\t055\t085\t085\t0\t2\t0\t0\t0\t0\n00071\t12\t04\t080\t105\t065\t070\t100\t100\t0\t3\t0\t0\t0\t0\n00072\t11\t04\t040\t040\t035\t070\t100\t100\t0\t0\t0\t0\t0\t1\n00073\t11\t04\t080\t070\t065\t100\t120\t120\t0\t0\t0\t0\t0\t2\n00074\t06\t05\t040\t080\t100\t020\t030\t030\t0\t0\t1\t0\t0\t0\n00075\t06\t05\t055\t095\t115\t035\t045\t045\t0\t0\t2\t0\t0\t0\n00076\t06\t05\t080\t110\t130\t045\t055\t055\t0\t0\t3\t0\t0\t0\n00077\t10\t00\t050\t085\t055\t090\t065\t065\t0\t0\t0\t1\t0\t0\n00078\t10\t00\t065\t100\t070\t105\t080\t080\t0\t0\t0\t2\t0\t0\n00079\t11\t14\t090\t065\t065\t015\t040\t040\t1\t0\t0\t0\t0\t0\n00080\t11\t14\t095\t075\t110\t030\t080\t080\t0\t0\t2\t0\t0\t0\n00081\t13\t00\t025\t035\t070\t045\t095\t095\t0\t0\t0\t0\t1\t0\n00082\t13\t00\t050\t060\t095\t070\t120\t120\t0\t0\t0\t0\t2\t0\n00083\t01\t03\t052\t065\t055\t060\t058\t058\t0\t1\t0\t0\t0\t0\n00084\t01\t03\t035\t085\t045\t075\t035\t035\t0\t1\t0\t0\t0\t0\n00085\t01\t03\t060\t110\t070\t100\t060\t060\t0\t2\t0\t0\t0\t0\n00086\t11\t00\t065\t045\t055\t045\t070\t070\t0\t0\t0\t0\t0\t1\n00087\t11\t15\t090\t070\t080\t070\t095\t095\t0\t0\t0\t0\t0\t2\n00088\t04\t00\t080\t080\t050\t025\t040\t040\t1\t0\t0\t0\t0\t0\n00089\t04\t00\t105\t105\t075\t050\t065\t065\t1\t1\t0\t0\t0\t0\n00090\t11\t00\t030\t065\t100\t040\t045\t045\t0\t0\t1\t0\t0\t0\n00091\t11\t15\t050\t095\t180\t070\t085\t085\t0\t0\t2\t0\t0\t0\n00092\t08\t04\t030\t035\t030\t080\t100\t100\t0\t0\t0\t0\t1\t0\n00093\t08\t04\t045\t050\t045\t095\t115\t115\t0\t0\t0\t0\t2\t0\n00094\t08\t04\t060\t065\t060\t110\t130\t130\t0\t0\t0\t0\t3\t0\n00095\t06\t05\t035\t045\t160\t070\t030\t030\t0\t0\t1\t0\t0\t0\n00096\t14\t00\t060\t048\t045\t042\t090\t090\t0\t0\t0\t0\t0\t1\n00097\t14\t00\t085\t073\t070\t067\t115\t115\t0\t0\t0\t0\t0\t2\n00098\t11\t00\t030\t105\t090\t050\t025\t025\t0\t1\t0\t0\t0\t0\n00099\t11\t00\t055\t130\t115\t075\t050\t050\t0\t2\t0\t0\t0\t0\n00100\t13\t00\t040\t030\t050\t100\t055\t055\t0\t0\t0\t1\t0\t0\n00101\t13\t00\t060\t050\t070\t140\t080\t080\t0\t0\t0\t2\t0\t0\n00102\t12\t14\t060\t040\t080\t040\t060\t060\t0\t0\t1\t0\t0\t0\n00103\t12\t14\t095\t095\t085\t055\t125\t125\t0\t0\t0\t0\t2\t0\n00104\t05\t00\t050\t050\t095\t035\t040\t040\t0\t0\t1\t0\t0\t0\n00105\t05\t00\t060\t080\t110\t045\t050\t050\t0\t0\t2\t0\t0\t0\n00106\t02\t00\t050\t120\t053\t087\t035\t035\t0\t2\t0\t0\t0\t0\n00107\t02\t00\t050\t105\t079\t076\t035\t035\t0\t0\t0\t0\t0\t2\n00108\t01\t00\t090\t055\t075\t030\t060\t060\t2\t0\t0\t0\t0\t0\n00109\t04\t00\t040\t065\t095\t035\t060\t060\t0\t0\t1\t0\t0\t0\n00110\t04\t00\t065\t090\t120\t060\t085\t085\t0\t0\t2\t0\t0\t0\n00111\t05\t06\t080\t085\t095\t025\t030\t030\t0\t0\t1\t0\t0\t0\n00112\t05\t06\t105\t130\t120\t040\t045\t045\t0\t2\t0\t0\t0\t0\n00113\t01\t00\t250\t005\t005\t050\t105\t105\t2\t0\t0\t0\t0\t0\n00114\t12\t00\t065\t055\t115\t060\t100\t100\t0\t0\t1\t0\t0\t0\n00115\t01\t00\t105\t095\t080\t090\t040\t040\t2\t0\t0\t0\t0\t0\n00116\t11\t00\t030\t040\t070\t060\t070\t070\t0\t0\t0\t0\t1\t0\n00117\t11\t00\t055\t065\t095\t085\t095\t095\t0\t0\t1\t0\t1\t0\n00118\t11\t00\t045\t067\t060\t063\t050\t050\t0\t1\t0\t0\t0\t0\n00119\t11\t00\t080\t092\t065\t068\t080\t080\t0\t2\t0\t0\t0\t0\n00120\t11\t00\t030\t045\t055\t085\t070\t070\t0\t0\t0\t1\t0\t0\n00121\t11\t14\t060\t075\t085\t115\t100\t100\t0\t0\t0\t2\t0\t0\n00122\t14\t00\t040\t045\t065\t090\t100\t100\t0\t0\t0\t0\t0\t2\n00123\t07\t03\t070\t110\t080\t105\t055\t055\t0\t1\t0\t0\t0\t0\n00124\t15\t14\t065\t050\t035\t095\t095\t095\t0\t0\t0\t0\t2\t0\n00125\t13\t00\t065\t083\t057\t105\t085\t085\t0\t0\t0\t2\t0\t0\n00126\t10\t00\t065\t095\t057\t093\t085\t085\t0\t0\t0\t0\t2\t0\n00127\t07\t00\t065\t125\t100\t085\t055\t055\t0\t2\t0\t0\t0\t0\n00128\t01\t00\t075\t100\t095\t110\t070\t070\t0\t1\t0\t1\t0\t0\n00129\t11\t00\t020\t010\t055\t080\t020\t020\t0\t0\t0\t1\t0\t0\n00130\t11\t03\t095\t125\t079\t081\t100\t100\t0\t2\t0\t0\t0\t0\n00131\t11\t15\t130\t085\t080\t060\t095\t095\t2\t0\t0\t0\t0\t0\n00132\t01\t00\t048\t048\t048\t048\t048\t048\t1\t0\t0\t0\t0\t0\n00133\t01\t00\t055\t055\t050\t055\t065\t065\t0\t0\t0\t0\t0\t1\n00134\t11\t00\t130\t065\t060\t065\t110\t110\t2\t0\t0\t0\t0\t0\n00135\t13\t00\t065\t065\t060\t130\t110\t110\t0\t0\t0\t2\t0\t0\n00136\t10\t00\t065\t130\t060\t065\t110\t110\t0\t2\t0\t0\t0\t0\n00137\t01\t00\t065\t060\t070\t040\t075\t075\t0\t0\t0\t0\t1\t0\n00138\t06\t11\t035\t040\t100\t035\t090\t090\t0\t0\t1\t0\t0\t0\n00139\t06\t11\t070\t060\t125\t055\t115\t115\t0\t0\t2\t0\t0\t0\n00140\t06\t11\t030\t080\t090\t055\t045\t045\t0\t0\t1\t0\t0\t0\n00141\t06\t11\t060\t115\t105\t080\t070\t070\t0\t2\t0\t0\t0\t0\n00142\t06\t03\t080\t105\t065\t130\t060\t060\t0\t0\t0\t2\t0\t0\n00143\t01\t00\t160\t110\t065\t030\t065\t065\t2\t0\t0\t0\t0\t0\n00144\t15\t03\t090\t085\t100\t085\t125\t125\t0\t0\t0\t0\t0\t3\n00145\t13\t03\t090\t090\t085\t100\t125\t125\t0\t0\t0\t0\t3\t0\n00146\t10\t03\t090\t100\t090\t090\t125\t125\t0\t0\t0\t0\t3\t0\n00147\t16\t00\t041\t064\t045\t050\t050\t050\t0\t1\t0\t0\t0\t0\n00148\t16\t00\t061\t084\t065\t070\t070\t070\t0\t2\t0\t0\t0\t0\n00149\t16\t03\t091\t134\t095\t080\t100\t100\t0\t3\t0\t0\t0\t0\n00150\t14\t00\t106\t110\t090\t130\t154\t154\t0\t0\t0\t0\t3\t0\n00151\t14\t00\t100\t100\t100\t100\t100\t100\t3\t0\t0\t0\t0\t0\n"
  },
  {
    "path": "VeekunImport/form_stats2.txt",
    "content": "00004\t10\t00\t039\t052\t043\t065\t060\t050\t0\t0\t0\t1\t0\t0\n00005\t10\t00\t058\t064\t058\t080\t080\t065\t0\t0\t0\t1\t1\t0\n00006\t10\t03\t078\t084\t078\t100\t109\t085\t0\t0\t0\t0\t3\t0\n00007\t11\t00\t044\t048\t065\t043\t050\t064\t0\t0\t1\t0\t0\t0\n00008\t11\t00\t059\t063\t080\t058\t065\t080\t0\t0\t1\t0\t0\t1\n00009\t11\t00\t079\t083\t100\t078\t085\t105\t0\t0\t0\t0\t0\t3\n00015\t07\t04\t065\t080\t040\t075\t045\t080\t0\t2\t0\t0\t0\t1\n00019\t01\t00\t030\t056\t035\t072\t025\t035\t0\t0\t0\t1\t0\t0\n00020\t01\t00\t055\t081\t060\t097\t050\t070\t0\t0\t0\t2\t0\t0\n00023\t04\t00\t035\t060\t044\t055\t040\t054\t0\t1\t0\t0\t0\t0\n00024\t04\t00\t060\t085\t069\t080\t065\t079\t0\t2\t0\t0\t0\t0\n00025\t13\t00\t035\t055\t030\t090\t050\t040\t0\t0\t0\t2\t0\t0\n00026\t13\t00\t060\t090\t055\t110\t090\t080\t0\t0\t0\t3\t0\t0\n00027\t05\t00\t050\t075\t085\t040\t020\t030\t0\t0\t1\t0\t0\t0\n00028\t05\t00\t075\t100\t110\t065\t045\t055\t0\t0\t2\t0\t0\t0\n00031\t04\t05\t090\t082\t087\t076\t075\t085\t3\t0\t0\t0\t0\t0\n00034\t04\t05\t081\t092\t077\t085\t085\t075\t0\t3\t0\t0\t0\t0\n00035\t01\t00\t070\t045\t048\t035\t060\t065\t2\t0\t0\t0\t0\t0\n00036\t01\t00\t095\t070\t073\t060\t085\t090\t3\t0\t0\t0\t0\t0\n00037\t10\t00\t038\t041\t040\t065\t050\t065\t0\t0\t0\t1\t0\t0\n00038\t10\t00\t073\t076\t075\t100\t081\t100\t0\t0\t0\t1\t0\t1\n00039\t01\t00\t115\t045\t020\t020\t045\t025\t2\t0\t0\t0\t0\t0\n00040\t01\t00\t140\t070\t045\t045\t075\t050\t3\t0\t0\t0\t0\t0\n00041\t04\t03\t040\t045\t035\t055\t030\t040\t0\t0\t0\t1\t0\t0\n00042\t04\t03\t075\t080\t070\t090\t065\t075\t0\t0\t0\t2\t0\t0\n00043\t12\t04\t045\t050\t055\t030\t075\t065\t0\t0\t0\t0\t1\t0\n00044\t12\t04\t060\t065\t070\t040\t085\t075\t0\t0\t0\t0\t2\t0\n00045\t12\t04\t075\t080\t085\t050\t100\t090\t0\t0\t0\t0\t3\t0\n00046\t07\t12\t035\t070\t055\t025\t045\t055\t0\t1\t0\t0\t0\t0\n00047\t07\t12\t060\t095\t080\t030\t060\t080\t0\t2\t1\t0\t0\t0\n00048\t07\t04\t060\t055\t050\t045\t040\t055\t0\t0\t0\t0\t0\t1\n00049\t07\t04\t070\t065\t060\t090\t090\t075\t0\t0\t0\t1\t1\t0\n00050\t05\t00\t010\t055\t025\t095\t035\t045\t0\t0\t0\t1\t0\t0\n00051\t05\t00\t035\t080\t050\t120\t050\t070\t0\t0\t0\t2\t0\t0\n00054\t11\t00\t050\t052\t048\t055\t065\t050\t0\t0\t0\t0\t1\t0\n00055\t11\t00\t080\t082\t078\t085\t095\t080\t0\t0\t0\t0\t2\t0\n00056\t02\t00\t040\t080\t035\t070\t035\t045\t0\t1\t0\t0\t0\t0\n00057\t02\t00\t065\t105\t060\t095\t060\t070\t0\t2\t0\t0\t0\t0\n00058\t10\t00\t055\t070\t045\t060\t070\t050\t0\t1\t0\t0\t0\t0\n00059\t10\t00\t090\t110\t080\t095\t100\t080\t0\t2\t0\t0\t0\t0\n00062\t11\t02\t090\t085\t095\t070\t070\t090\t0\t0\t3\t0\t0\t0\n00063\t14\t00\t025\t020\t015\t090\t105\t055\t0\t0\t0\t0\t1\t0\n00064\t14\t00\t040\t035\t030\t105\t120\t070\t0\t0\t0\t0\t2\t0\n00065\t14\t00\t055\t050\t045\t120\t135\t085\t0\t0\t0\t0\t3\t0\n00067\t02\t00\t080\t100\t070\t045\t050\t060\t0\t2\t0\t0\t0\t0\n00068\t02\t00\t090\t130\t080\t055\t065\t085\t0\t3\t0\t0\t0\t0\n00069\t12\t04\t050\t075\t035\t040\t070\t030\t0\t1\t0\t0\t0\t0\n00070\t12\t04\t065\t090\t050\t055\t085\t045\t0\t2\t0\t0\t0\t0\n00071\t12\t04\t080\t105\t065\t070\t100\t060\t0\t3\t0\t0\t0\t0\n00072\t11\t04\t040\t040\t035\t070\t050\t100\t0\t0\t0\t0\t0\t1\n00073\t11\t04\t080\t070\t065\t100\t080\t120\t0\t0\t0\t0\t0\t2\n00076\t06\t05\t080\t110\t130\t045\t055\t065\t0\t0\t3\t0\t0\t0\n00080\t11\t14\t095\t075\t110\t030\t100\t080\t0\t0\t2\t0\t0\t0\n00081\t13\t09\t025\t035\t070\t045\t095\t055\t0\t0\t0\t0\t1\t0\n00082\t13\t09\t050\t060\t095\t070\t120\t070\t0\t0\t0\t0\t2\t0\n00083\t01\t03\t052\t065\t055\t060\t058\t062\t0\t1\t0\t0\t0\t0\n00086\t11\t00\t065\t045\t055\t045\t045\t070\t0\t0\t0\t0\t0\t1\n00087\t11\t15\t090\t070\t080\t070\t070\t095\t0\t0\t0\t0\t0\t2\n00088\t04\t00\t080\t080\t050\t025\t040\t050\t1\t0\t0\t0\t0\t0\n00089\t04\t00\t105\t105\t075\t050\t065\t100\t1\t1\t0\t0\t0\t0\n00090\t11\t00\t030\t065\t100\t040\t045\t025\t0\t0\t1\t0\t0\t0\n00091\t11\t15\t050\t095\t180\t070\t085\t045\t0\t0\t2\t0\t0\t0\n00092\t08\t04\t030\t035\t030\t080\t100\t035\t0\t0\t0\t0\t1\t0\n00093\t08\t04\t045\t050\t045\t095\t115\t055\t0\t0\t0\t0\t2\t0\n00094\t08\t04\t060\t065\t060\t110\t130\t075\t0\t0\t0\t0\t3\t0\n00095\t06\t05\t035\t045\t160\t070\t030\t045\t0\t0\t1\t0\t0\t0\n00096\t14\t00\t060\t048\t045\t042\t043\t090\t0\t0\t0\t0\t0\t1\n00097\t14\t00\t085\t073\t070\t067\t073\t115\t0\t0\t0\t0\t0\t2\n00102\t12\t14\t060\t040\t080\t040\t060\t045\t0\t0\t1\t0\t0\t0\n00103\t12\t14\t095\t095\t085\t055\t125\t065\t0\t0\t0\t0\t2\t0\n00104\t05\t00\t050\t050\t095\t035\t040\t050\t0\t0\t1\t0\t0\t0\n00105\t05\t00\t060\t080\t110\t045\t050\t080\t0\t0\t2\t0\t0\t0\n00106\t02\t00\t050\t120\t053\t087\t035\t110\t0\t2\t0\t0\t0\t0\n00107\t02\t00\t050\t105\t079\t076\t035\t110\t0\t0\t0\t0\t0\t2\n00108\t01\t00\t090\t055\t075\t030\t060\t075\t2\t0\t0\t0\t0\t0\n00109\t04\t00\t040\t065\t095\t035\t060\t045\t0\t0\t1\t0\t0\t0\n00110\t04\t00\t065\t090\t120\t060\t085\t070\t0\t0\t2\t0\t0\t0\n00113\t01\t00\t250\t005\t005\t050\t035\t105\t2\t0\t0\t0\t0\t0\n00114\t12\t00\t065\t055\t115\t060\t100\t040\t0\t0\t1\t0\t0\t0\n00115\t01\t00\t105\t095\t080\t090\t040\t080\t2\t0\t0\t0\t0\t0\n00116\t11\t00\t030\t040\t070\t060\t070\t025\t0\t0\t0\t0\t1\t0\n00117\t11\t00\t055\t065\t095\t085\t095\t045\t0\t0\t1\t0\t1\t0\n00118\t11\t00\t045\t067\t060\t063\t035\t050\t0\t1\t0\t0\t0\t0\n00119\t11\t00\t080\t092\t065\t068\t065\t080\t0\t2\t0\t0\t0\t0\n00120\t11\t00\t030\t045\t055\t085\t070\t055\t0\t0\t0\t1\t0\t0\n00121\t11\t14\t060\t075\t085\t115\t100\t085\t0\t0\t0\t2\t0\t0\n00122\t14\t00\t040\t045\t065\t090\t100\t120\t0\t0\t0\t0\t0\t2\n00123\t07\t03\t070\t110\t080\t105\t055\t080\t0\t1\t0\t0\t0\t0\n00124\t15\t14\t065\t050\t035\t095\t115\t095\t0\t0\t0\t0\t2\t0\n00125\t13\t00\t065\t083\t057\t105\t095\t085\t0\t0\t0\t2\t0\t0\n00126\t10\t00\t065\t095\t057\t093\t100\t085\t0\t0\t0\t0\t2\t0\n00127\t07\t00\t065\t125\t100\t085\t055\t070\t0\t2\t0\t0\t0\t0\n00128\t01\t00\t075\t100\t095\t110\t040\t070\t0\t1\t0\t1\t0\t0\n00129\t11\t00\t020\t010\t055\t080\t015\t020\t0\t0\t0\t1\t0\t0\n00130\t11\t03\t095\t125\t079\t081\t060\t100\t0\t2\t0\t0\t0\t0\n00131\t11\t15\t130\t085\t080\t060\t085\t095\t2\t0\t0\t0\t0\t0\n00133\t01\t00\t055\t055\t050\t055\t045\t065\t0\t0\t0\t0\t0\t1\n00134\t11\t00\t130\t065\t060\t065\t110\t095\t2\t0\t0\t0\t0\t0\n00135\t13\t00\t065\t065\t060\t130\t110\t095\t0\t0\t0\t2\t0\t0\n00136\t10\t00\t065\t130\t060\t065\t095\t110\t0\t2\t0\t0\t0\t0\n00137\t01\t00\t065\t060\t070\t040\t085\t075\t0\t0\t0\t0\t1\t0\n00138\t06\t11\t035\t040\t100\t035\t090\t055\t0\t0\t1\t0\t0\t0\n00139\t06\t11\t070\t060\t125\t055\t115\t070\t0\t0\t2\t0\t0\t0\n00140\t06\t11\t030\t080\t090\t055\t055\t045\t0\t0\t1\t0\t0\t0\n00141\t06\t11\t060\t115\t105\t080\t065\t070\t0\t2\t0\t0\t0\t0\n00142\t06\t03\t080\t105\t065\t130\t060\t075\t0\t0\t0\t2\t0\t0\n00143\t01\t00\t160\t110\t065\t030\t065\t110\t2\t0\t0\t0\t0\t0\n00144\t15\t03\t090\t085\t100\t085\t095\t125\t0\t0\t0\t0\t0\t3\n00145\t13\t03\t090\t090\t085\t100\t125\t090\t0\t0\t0\t0\t3\t0\n00146\t10\t03\t090\t100\t090\t090\t125\t085\t0\t0\t0\t0\t3\t0\n00150\t14\t00\t106\t110\t090\t130\t154\t090\t0\t0\t0\t0\t3\t0\n00152\t12\t00\t045\t049\t065\t045\t049\t065\t0\t0\t0\t0\t0\t1\n00153\t12\t00\t060\t062\t080\t060\t063\t080\t0\t0\t1\t0\t0\t1\n00154\t12\t00\t080\t082\t100\t080\t083\t100\t0\t0\t1\t0\t0\t2\n00155\t10\t00\t039\t052\t043\t065\t060\t050\t0\t0\t0\t1\t0\t0\n00156\t10\t00\t058\t064\t058\t080\t080\t065\t0\t0\t0\t1\t1\t0\n00157\t10\t00\t078\t084\t078\t100\t109\t085\t0\t0\t0\t0\t3\t0\n00158\t11\t00\t050\t065\t064\t043\t044\t048\t0\t1\t0\t0\t0\t0\n00159\t11\t00\t065\t080\t080\t058\t059\t063\t0\t1\t1\t0\t0\t0\n00160\t11\t00\t085\t105\t100\t078\t079\t083\t0\t2\t1\t0\t0\t0\n00161\t01\t00\t035\t046\t034\t020\t035\t045\t0\t1\t0\t0\t0\t0\n00162\t01\t00\t085\t076\t064\t090\t045\t055\t0\t0\t0\t2\t0\t0\n00163\t01\t03\t060\t030\t030\t050\t036\t056\t1\t0\t0\t0\t0\t0\n00164\t01\t03\t100\t050\t050\t070\t076\t096\t2\t0\t0\t0\t0\t0\n00165\t07\t03\t040\t020\t030\t055\t040\t080\t0\t0\t0\t0\t0\t1\n00166\t07\t03\t055\t035\t050\t085\t055\t110\t0\t0\t0\t0\t0\t2\n00167\t07\t04\t040\t060\t040\t030\t040\t040\t0\t1\t0\t0\t0\t0\n00168\t07\t04\t070\t090\t070\t040\t060\t060\t0\t2\t0\t0\t0\t0\n00169\t04\t03\t085\t090\t080\t130\t070\t080\t0\t0\t0\t3\t0\t0\n00170\t11\t13\t075\t038\t038\t067\t056\t056\t1\t0\t0\t0\t0\t0\n00171\t11\t13\t125\t058\t058\t067\t076\t076\t2\t0\t0\t0\t0\t0\n00172\t13\t00\t020\t040\t015\t060\t035\t035\t0\t0\t0\t1\t0\t0\n00173\t01\t00\t050\t025\t028\t015\t045\t055\t0\t0\t0\t0\t0\t1\n00174\t01\t00\t090\t030\t015\t015\t040\t020\t1\t0\t0\t0\t0\t0\n00175\t01\t00\t035\t020\t065\t020\t040\t065\t0\t0\t0\t0\t0\t1\n00176\t01\t03\t055\t040\t085\t040\t080\t105\t0\t0\t0\t0\t0\t2\n00177\t14\t03\t040\t050\t045\t070\t070\t045\t0\t0\t0\t0\t1\t0\n00178\t14\t03\t065\t075\t070\t095\t095\t070\t0\t0\t0\t1\t1\t0\n00179\t13\t00\t055\t040\t040\t035\t065\t045\t0\t0\t0\t0\t1\t0\n00180\t13\t00\t070\t055\t055\t045\t080\t060\t0\t0\t0\t0\t2\t0\n00181\t13\t00\t090\t075\t075\t055\t115\t090\t0\t0\t0\t0\t3\t0\n00182\t12\t00\t075\t080\t085\t050\t090\t100\t0\t0\t0\t0\t0\t3\n00183\t11\t00\t070\t020\t050\t040\t020\t050\t2\t0\t0\t0\t0\t0\n00184\t11\t00\t100\t050\t080\t050\t050\t080\t3\t0\t0\t0\t0\t0\n00185\t06\t00\t070\t100\t115\t030\t030\t065\t0\t0\t2\t0\t0\t0\n00186\t11\t00\t090\t075\t075\t070\t090\t100\t0\t0\t0\t0\t0\t3\n00187\t12\t03\t035\t035\t040\t050\t035\t055\t0\t0\t0\t0\t0\t1\n00188\t12\t03\t055\t045\t050\t080\t045\t065\t0\t0\t0\t2\t0\t0\n00189\t12\t03\t075\t055\t070\t110\t055\t085\t0\t0\t0\t3\t0\t0\n00190\t01\t00\t055\t070\t055\t085\t040\t055\t0\t0\t0\t1\t0\t0\n00191\t12\t00\t030\t030\t030\t030\t030\t030\t0\t0\t0\t0\t1\t0\n00192\t12\t00\t075\t075\t055\t030\t105\t085\t0\t0\t0\t0\t2\t0\n00193\t07\t03\t065\t065\t045\t095\t075\t045\t0\t0\t0\t1\t0\t0\n00194\t11\t05\t055\t045\t045\t015\t025\t025\t1\t0\t0\t0\t0\t0\n00195\t11\t05\t095\t085\t085\t035\t065\t065\t2\t0\t0\t0\t0\t0\n00196\t14\t00\t065\t065\t060\t110\t130\t095\t0\t0\t0\t0\t2\t0\n00197\t17\t00\t095\t065\t110\t065\t060\t130\t0\t0\t0\t0\t0\t2\n00198\t17\t03\t060\t085\t042\t091\t085\t042\t0\t0\t0\t1\t0\t0\n00199\t11\t14\t095\t075\t080\t030\t100\t110\t0\t0\t0\t0\t0\t3\n00200\t08\t00\t060\t060\t060\t085\t085\t085\t0\t0\t0\t0\t0\t1\n00201\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n00202\t14\t00\t190\t033\t058\t033\t033\t058\t2\t0\t0\t0\t0\t0\n00203\t01\t14\t070\t080\t065\t085\t090\t065\t0\t0\t0\t0\t2\t0\n00204\t07\t00\t050\t065\t090\t015\t035\t035\t0\t0\t1\t0\t0\t0\n00205\t07\t09\t075\t090\t140\t040\t060\t060\t0\t0\t2\t0\t0\t0\n00206\t01\t00\t100\t070\t070\t045\t065\t065\t1\t0\t0\t0\t0\t0\n00207\t05\t03\t065\t075\t105\t085\t035\t065\t0\t0\t1\t0\t0\t0\n00208\t09\t05\t075\t085\t200\t030\t055\t065\t0\t0\t2\t0\t0\t0\n00209\t01\t00\t060\t080\t050\t030\t040\t040\t0\t1\t0\t0\t0\t0\n00210\t01\t00\t090\t120\t075\t045\t060\t060\t0\t2\t0\t0\t0\t0\n00211\t11\t04\t065\t095\t075\t085\t055\t055\t0\t1\t0\t0\t0\t0\n00212\t07\t09\t070\t130\t100\t065\t055\t080\t0\t2\t0\t0\t0\t0\n00213\t07\t06\t020\t010\t230\t005\t010\t230\t0\t0\t1\t0\t0\t1\n00214\t07\t02\t080\t125\t075\t085\t040\t095\t0\t2\t0\t0\t0\t0\n00215\t17\t15\t055\t095\t055\t115\t035\t075\t0\t0\t0\t1\t0\t0\n00216\t01\t00\t060\t080\t050\t040\t050\t050\t0\t1\t0\t0\t0\t0\n00217\t01\t00\t090\t130\t075\t055\t075\t075\t0\t2\t0\t0\t0\t0\n00218\t10\t00\t040\t040\t040\t020\t070\t040\t0\t0\t0\t0\t1\t0\n00219\t10\t06\t050\t050\t120\t030\t080\t080\t0\t0\t2\t0\t0\t0\n00220\t15\t05\t050\t050\t040\t050\t030\t030\t0\t1\t0\t0\t0\t0\n00221\t15\t05\t100\t100\t080\t050\t060\t060\t1\t1\t0\t0\t0\t0\n00222\t11\t06\t055\t055\t085\t035\t065\t085\t0\t0\t1\t0\t0\t1\n00223\t11\t00\t035\t065\t035\t065\t065\t035\t0\t0\t0\t0\t1\t0\n00224\t11\t00\t075\t105\t075\t045\t105\t075\t0\t1\t0\t0\t1\t0\n00225\t15\t03\t045\t055\t045\t075\t065\t045\t0\t0\t0\t1\t0\t0\n00226\t11\t03\t065\t040\t070\t070\t080\t140\t0\t0\t0\t0\t0\t2\n00227\t09\t03\t065\t080\t140\t070\t040\t070\t0\t0\t2\t0\t0\t0\n00228\t17\t10\t045\t060\t030\t065\t080\t050\t0\t0\t0\t0\t1\t0\n00229\t17\t10\t075\t090\t050\t095\t110\t080\t0\t0\t0\t0\t2\t0\n00230\t11\t16\t075\t095\t095\t085\t095\t095\t0\t1\t0\t0\t1\t1\n00231\t05\t00\t090\t060\t060\t040\t040\t040\t1\t0\t0\t0\t0\t0\n00232\t05\t00\t090\t120\t120\t050\t060\t060\t0\t1\t1\t0\t0\t0\n00233\t01\t00\t085\t080\t090\t060\t105\t095\t0\t0\t0\t0\t2\t0\n00234\t01\t00\t073\t095\t062\t085\t085\t065\t0\t1\t0\t0\t0\t0\n00235\t01\t00\t055\t020\t035\t075\t020\t045\t0\t0\t0\t1\t0\t0\n00236\t02\t00\t035\t035\t035\t035\t035\t035\t0\t1\t0\t0\t0\t0\n00237\t02\t00\t050\t095\t095\t070\t035\t110\t0\t0\t0\t0\t0\t2\n00238\t15\t14\t045\t030\t015\t065\t085\t065\t0\t0\t0\t0\t1\t0\n00239\t13\t00\t045\t063\t037\t095\t065\t055\t0\t0\t0\t1\t0\t0\n00240\t10\t00\t045\t075\t037\t083\t070\t055\t0\t0\t0\t1\t0\t0\n00241\t01\t00\t095\t080\t105\t100\t040\t070\t0\t0\t2\t0\t0\t0\n00242\t01\t00\t255\t010\t010\t055\t075\t135\t3\t0\t0\t0\t0\t0\n00243\t13\t00\t090\t085\t075\t115\t115\t100\t0\t0\t0\t2\t1\t0\n00244\t10\t00\t115\t115\t085\t100\t090\t075\t1\t2\t0\t0\t0\t0\n00245\t11\t00\t100\t075\t115\t085\t090\t115\t0\t0\t1\t0\t0\t2\n00246\t06\t05\t050\t064\t050\t041\t045\t050\t0\t1\t0\t0\t0\t0\n00247\t06\t05\t070\t084\t070\t051\t065\t070\t0\t2\t0\t0\t0\t0\n00248\t06\t17\t100\t134\t110\t061\t095\t100\t0\t3\t0\t0\t0\t0\n00249\t14\t03\t106\t090\t130\t110\t090\t154\t0\t0\t0\t0\t0\t3\n00250\t10\t03\t106\t130\t090\t090\t110\t154\t0\t0\t0\t0\t0\t3\n00251\t14\t12\t100\t100\t100\t100\t100\t100\t3\t0\t0\t0\t0\t0\n10001\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10002\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10003\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10004\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10005\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10006\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10007\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10008\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10009\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10010\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10011\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10012\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10013\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10014\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10015\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10016\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10017\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10018\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10019\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10020\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10021\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10022\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10023\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10024\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10025\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n"
  },
  {
    "path": "VeekunImport/form_stats3.txt",
    "content": "00252\t12\t00\t040\t045\t035\t070\t065\t055\t0\t0\t0\t1\t0\t0\n00253\t12\t00\t050\t065\t045\t095\t085\t065\t0\t0\t0\t2\t0\t0\n00254\t12\t00\t070\t085\t065\t120\t105\t085\t0\t0\t0\t3\t0\t0\n00255\t10\t00\t045\t060\t040\t045\t070\t050\t0\t0\t0\t0\t1\t0\n00256\t10\t02\t060\t085\t060\t055\t085\t060\t0\t1\t0\t0\t1\t0\n00257\t10\t02\t080\t120\t070\t080\t110\t070\t0\t3\t0\t0\t0\t0\n00258\t11\t00\t050\t070\t050\t040\t050\t050\t0\t1\t0\t0\t0\t0\n00259\t11\t05\t070\t085\t070\t050\t060\t070\t0\t2\t0\t0\t0\t0\n00260\t11\t05\t100\t110\t090\t060\t085\t090\t0\t3\t0\t0\t0\t0\n00261\t17\t00\t035\t055\t035\t035\t030\t030\t0\t1\t0\t0\t0\t0\n00262\t17\t00\t070\t090\t070\t070\t060\t060\t0\t2\t0\t0\t0\t0\n00263\t01\t00\t038\t030\t041\t060\t030\t041\t0\t0\t0\t1\t0\t0\n00264\t01\t00\t078\t070\t061\t100\t050\t061\t0\t0\t0\t2\t0\t0\n00265\t07\t00\t045\t045\t035\t020\t020\t030\t1\t0\t0\t0\t0\t0\n00266\t07\t00\t050\t035\t055\t015\t025\t025\t0\t0\t2\t0\t0\t0\n00267\t07\t03\t060\t070\t050\t065\t090\t050\t0\t0\t0\t0\t3\t0\n00268\t07\t00\t050\t035\t055\t015\t025\t025\t0\t0\t2\t0\t0\t0\n00269\t07\t04\t060\t050\t070\t065\t050\t090\t0\t0\t0\t0\t0\t3\n00270\t11\t12\t040\t030\t030\t030\t040\t050\t0\t0\t0\t0\t0\t1\n00271\t11\t12\t060\t050\t050\t050\t060\t070\t0\t0\t0\t0\t0\t2\n00272\t11\t12\t080\t070\t070\t070\t090\t100\t0\t0\t0\t0\t0\t3\n00273\t12\t00\t040\t040\t050\t030\t030\t030\t0\t0\t1\t0\t0\t0\n00274\t12\t17\t070\t070\t040\t060\t060\t040\t0\t2\t0\t0\t0\t0\n00275\t12\t17\t090\t100\t060\t080\t090\t060\t0\t3\t0\t0\t0\t0\n00276\t01\t03\t040\t055\t030\t085\t030\t030\t0\t0\t0\t1\t0\t0\n00277\t01\t03\t060\t085\t060\t125\t050\t050\t0\t0\t0\t2\t0\t0\n00278\t11\t03\t040\t030\t030\t085\t055\t030\t0\t0\t0\t1\t0\t0\n00279\t11\t03\t060\t050\t100\t065\t085\t070\t0\t0\t2\t0\t0\t0\n00280\t14\t00\t028\t025\t025\t040\t045\t035\t0\t0\t0\t0\t1\t0\n00281\t14\t00\t038\t035\t035\t050\t065\t055\t0\t0\t0\t0\t2\t0\n00282\t14\t00\t068\t065\t065\t080\t125\t115\t0\t0\t0\t0\t3\t0\n00283\t07\t11\t040\t030\t032\t065\t050\t052\t0\t0\t0\t1\t0\t0\n00284\t07\t03\t070\t060\t062\t060\t080\t082\t0\t0\t0\t0\t1\t1\n00285\t12\t00\t060\t040\t060\t035\t040\t060\t1\t0\t0\t0\t0\t0\n00286\t12\t02\t060\t130\t080\t070\t060\t060\t0\t2\t0\t0\t0\t0\n00287\t01\t00\t060\t060\t060\t030\t035\t035\t1\t0\t0\t0\t0\t0\n00288\t01\t00\t080\t080\t080\t090\t055\t055\t0\t0\t0\t2\t0\t0\n00289\t01\t00\t150\t160\t100\t100\t095\t065\t3\t0\t0\t0\t0\t0\n00290\t07\t05\t031\t045\t090\t040\t030\t030\t0\t0\t1\t0\t0\t0\n00291\t07\t03\t061\t090\t045\t160\t050\t050\t0\t0\t0\t2\t0\t0\n00292\t07\t08\t001\t090\t045\t040\t030\t030\t2\t0\t0\t0\t0\t0\n00293\t01\t00\t064\t051\t023\t028\t051\t023\t1\t0\t0\t0\t0\t0\n00294\t01\t00\t084\t071\t043\t048\t071\t043\t2\t0\t0\t0\t0\t0\n00295\t01\t00\t104\t091\t063\t068\t091\t063\t3\t0\t0\t0\t0\t0\n00296\t02\t00\t072\t060\t030\t025\t020\t030\t1\t0\t0\t0\t0\t0\n00297\t02\t00\t144\t120\t060\t050\t040\t060\t2\t0\t0\t0\t0\t0\n00298\t01\t00\t050\t020\t040\t020\t020\t040\t1\t0\t0\t0\t0\t0\n00299\t06\t00\t030\t045\t135\t030\t045\t090\t0\t0\t1\t0\t0\t0\n00300\t01\t00\t050\t045\t045\t050\t035\t035\t0\t0\t0\t1\t0\t0\n00301\t01\t00\t070\t065\t065\t070\t055\t055\t1\t0\t0\t1\t0\t0\n00302\t17\t08\t050\t075\t075\t050\t065\t065\t0\t1\t1\t0\t0\t0\n00303\t09\t00\t050\t085\t085\t050\t055\t055\t0\t1\t1\t0\t0\t0\n00304\t09\t06\t050\t070\t100\t030\t040\t040\t0\t0\t1\t0\t0\t0\n00305\t09\t06\t060\t090\t140\t040\t050\t050\t0\t0\t2\t0\t0\t0\n00306\t09\t06\t070\t110\t180\t050\t060\t060\t0\t0\t3\t0\t0\t0\n00307\t02\t14\t030\t040\t055\t060\t040\t055\t0\t0\t0\t1\t0\t0\n00308\t02\t14\t060\t060\t075\t080\t060\t075\t0\t0\t0\t2\t0\t0\n00309\t13\t00\t040\t045\t040\t065\t065\t040\t0\t0\t0\t1\t0\t0\n00310\t13\t00\t070\t075\t060\t105\t105\t060\t0\t0\t0\t2\t0\t0\n00311\t13\t00\t060\t050\t040\t095\t085\t075\t0\t0\t0\t1\t0\t0\n00312\t13\t00\t060\t040\t050\t095\t075\t085\t0\t0\t0\t1\t0\t0\n00313\t07\t00\t065\t073\t055\t085\t047\t075\t0\t0\t0\t1\t0\t0\n00314\t07\t00\t065\t047\t055\t085\t073\t075\t0\t0\t0\t1\t0\t0\n00315\t12\t04\t050\t060\t045\t065\t100\t080\t0\t0\t0\t0\t2\t0\n00316\t04\t00\t070\t043\t053\t040\t043\t053\t1\t0\t0\t0\t0\t0\n00317\t04\t00\t100\t073\t083\t055\t073\t083\t2\t0\t0\t0\t0\t0\n00318\t11\t17\t045\t090\t020\t065\t065\t020\t0\t1\t0\t0\t0\t0\n00319\t11\t17\t070\t120\t040\t095\t095\t040\t0\t2\t0\t0\t0\t0\n00320\t11\t00\t130\t070\t035\t060\t070\t035\t1\t0\t0\t0\t0\t0\n00321\t11\t00\t170\t090\t045\t060\t090\t045\t2\t0\t0\t0\t0\t0\n00322\t10\t05\t060\t060\t040\t035\t065\t045\t0\t0\t0\t0\t1\t0\n00323\t10\t05\t070\t100\t070\t040\t105\t075\t0\t1\t0\t0\t1\t0\n00324\t10\t00\t070\t085\t140\t020\t085\t070\t0\t0\t2\t0\t0\t0\n00325\t14\t00\t060\t025\t035\t060\t070\t080\t0\t0\t0\t0\t0\t1\n00326\t14\t00\t080\t045\t065\t080\t090\t110\t0\t0\t0\t0\t0\t2\n00327\t01\t00\t060\t060\t060\t060\t060\t060\t0\t0\t0\t0\t1\t0\n00328\t05\t00\t045\t100\t045\t010\t045\t045\t0\t1\t0\t0\t0\t0\n00329\t05\t16\t050\t070\t050\t070\t050\t050\t0\t1\t0\t1\t0\t0\n00330\t05\t16\t080\t100\t080\t100\t080\t080\t0\t1\t0\t2\t0\t0\n00331\t12\t00\t050\t085\t040\t035\t085\t040\t0\t0\t0\t0\t1\t0\n00332\t12\t17\t070\t115\t060\t055\t115\t060\t0\t1\t0\t0\t1\t0\n00333\t01\t03\t045\t040\t060\t050\t040\t075\t0\t0\t0\t0\t0\t1\n00334\t16\t03\t075\t070\t090\t080\t070\t105\t0\t0\t0\t0\t0\t2\n00335\t01\t00\t073\t115\t060\t090\t060\t060\t0\t2\t0\t0\t0\t0\n00336\t04\t00\t073\t100\t060\t065\t100\t060\t0\t1\t0\t0\t1\t0\n00337\t06\t14\t070\t055\t065\t070\t095\t085\t0\t0\t0\t0\t2\t0\n00338\t06\t14\t070\t095\t085\t070\t055\t065\t0\t2\t0\t0\t0\t0\n00339\t11\t05\t050\t048\t043\t060\t046\t041\t1\t0\t0\t0\t0\t0\n00340\t11\t05\t110\t078\t073\t060\t076\t071\t2\t0\t0\t0\t0\t0\n00341\t11\t00\t043\t080\t065\t035\t050\t035\t0\t1\t0\t0\t0\t0\n00342\t11\t17\t063\t120\t085\t055\t090\t055\t0\t2\t0\t0\t0\t0\n00343\t05\t14\t040\t040\t055\t055\t040\t070\t0\t0\t0\t0\t0\t1\n00344\t05\t14\t060\t070\t105\t075\t070\t120\t0\t0\t0\t0\t0\t2\n00345\t06\t12\t066\t041\t077\t023\t061\t087\t0\t0\t0\t0\t0\t1\n00346\t06\t12\t086\t081\t097\t043\t081\t107\t0\t0\t0\t0\t0\t2\n00347\t06\t07\t045\t095\t050\t075\t040\t050\t0\t1\t0\t0\t0\t0\n00348\t06\t07\t075\t125\t100\t045\t070\t080\t0\t2\t0\t0\t0\t0\n00349\t11\t00\t020\t015\t020\t080\t010\t055\t0\t0\t0\t1\t0\t0\n00350\t11\t00\t095\t060\t079\t081\t100\t125\t0\t0\t0\t0\t0\t2\n00351\t01\t00\t070\t070\t070\t070\t070\t070\t1\t0\t0\t0\t0\t0\n00352\t01\t00\t060\t090\t070\t040\t060\t120\t0\t0\t0\t0\t0\t1\n00353\t08\t00\t044\t075\t035\t045\t063\t033\t0\t1\t0\t0\t0\t0\n00354\t08\t00\t064\t115\t065\t065\t083\t063\t0\t2\t0\t0\t0\t0\n00355\t08\t00\t020\t040\t090\t025\t030\t090\t0\t0\t0\t0\t0\t1\n00356\t08\t00\t040\t070\t130\t025\t060\t130\t0\t0\t1\t0\t0\t1\n00357\t12\t03\t099\t068\t083\t051\t072\t087\t2\t0\t0\t0\t0\t0\n00358\t14\t00\t065\t050\t070\t065\t095\t080\t0\t0\t0\t0\t1\t1\n00359\t17\t00\t065\t130\t060\t075\t075\t060\t0\t2\t0\t0\t0\t0\n00360\t14\t00\t095\t023\t048\t023\t023\t048\t1\t0\t0\t0\t0\t0\n00361\t15\t00\t050\t050\t050\t050\t050\t050\t1\t0\t0\t0\t0\t0\n00362\t15\t00\t080\t080\t080\t080\t080\t080\t2\t0\t0\t0\t0\t0\n00363\t15\t11\t070\t040\t050\t025\t055\t050\t1\t0\t0\t0\t0\t0\n00364\t15\t11\t090\t060\t070\t045\t075\t070\t2\t0\t0\t0\t0\t0\n00365\t15\t11\t110\t080\t090\t065\t095\t090\t3\t0\t0\t0\t0\t0\n00366\t11\t00\t035\t064\t085\t032\t074\t055\t0\t0\t1\t0\t0\t0\n00367\t11\t00\t055\t104\t105\t052\t094\t075\t0\t1\t1\t0\t0\t0\n00368\t11\t00\t055\t084\t105\t052\t114\t075\t0\t0\t0\t0\t2\t0\n00369\t11\t06\t100\t090\t130\t055\t045\t065\t1\t0\t1\t0\t0\t0\n00370\t11\t00\t043\t030\t055\t097\t040\t065\t0\t0\t0\t1\t0\t0\n00371\t16\t00\t045\t075\t060\t050\t040\t030\t0\t1\t0\t0\t0\t0\n00372\t16\t00\t065\t095\t100\t050\t060\t050\t0\t0\t2\t0\t0\t0\n00373\t16\t03\t095\t135\t080\t100\t110\t080\t0\t3\t0\t0\t0\t0\n00374\t09\t14\t040\t055\t080\t030\t035\t060\t0\t0\t1\t0\t0\t0\n00375\t09\t14\t060\t075\t100\t050\t055\t080\t0\t0\t2\t0\t0\t0\n00376\t09\t14\t080\t135\t130\t070\t095\t090\t0\t0\t3\t0\t0\t0\n00377\t06\t00\t080\t100\t200\t050\t050\t100\t0\t0\t3\t0\t0\t0\n00378\t15\t00\t080\t050\t100\t050\t100\t200\t0\t0\t0\t0\t0\t3\n00379\t09\t00\t080\t075\t150\t050\t075\t150\t0\t0\t2\t0\t0\t1\n00380\t16\t14\t080\t080\t090\t110\t110\t130\t0\t0\t0\t0\t0\t3\n00381\t16\t14\t080\t090\t080\t110\t130\t110\t0\t0\t0\t0\t3\t0\n00382\t11\t00\t100\t100\t090\t090\t150\t140\t0\t0\t0\t0\t3\t0\n00383\t05\t00\t100\t150\t140\t090\t100\t090\t0\t3\t0\t0\t0\t0\n00384\t16\t03\t105\t150\t090\t095\t150\t090\t0\t2\t0\t0\t1\t0\n00385\t09\t14\t100\t100\t100\t100\t100\t100\t3\t0\t0\t0\t0\t0\n00386\t14\t00\t050\t150\t050\t150\t150\t050\t0\t1\t0\t1\t1\t0\n10026\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10027\t14\t00\t048\t072\t048\t048\t072\t048\t0\t1\t0\t0\t1\t0\n10028\t10\t00\t070\t070\t070\t070\t070\t070\t1\t0\t0\t0\t0\t0\n10029\t11\t00\t070\t070\t070\t070\t070\t070\t1\t0\t0\t0\t0\t0\n10030\t15\t00\t070\t070\t070\t070\t070\t070\t1\t0\t0\t0\t0\t0\n10031\t14\t00\t050\t180\t020\t150\t180\t020\t0\t2\t0\t0\t1\t0\n10032\t14\t00\t050\t070\t160\t090\t070\t160\t0\t0\t2\t0\t0\t1\n10033\t14\t00\t050\t095\t090\t180\t095\t090\t0\t0\t0\t3\t0\t0\n"
  },
  {
    "path": "VeekunImport/form_stats4.txt",
    "content": "00387\t12\t00\t055\t068\t064\t031\t045\t055\t0\t1\t0\t0\t0\t0\n00388\t12\t00\t075\t089\t085\t036\t055\t065\t0\t1\t1\t0\t0\t0\n00389\t12\t05\t095\t109\t105\t056\t075\t085\t0\t2\t1\t0\t0\t0\n00390\t10\t00\t044\t058\t044\t061\t058\t044\t0\t0\t0\t1\t0\t0\n00391\t10\t02\t064\t078\t052\t081\t078\t052\t0\t0\t0\t1\t1\t0\n00392\t10\t02\t076\t104\t071\t108\t104\t071\t0\t1\t0\t1\t1\t0\n00393\t11\t00\t053\t051\t053\t040\t061\t056\t0\t0\t0\t0\t1\t0\n00394\t11\t00\t064\t066\t068\t050\t081\t076\t0\t0\t0\t0\t2\t0\n00395\t11\t09\t084\t086\t088\t060\t111\t101\t0\t0\t0\t0\t3\t0\n00396\t01\t03\t040\t055\t030\t060\t030\t030\t0\t0\t0\t1\t0\t0\n00397\t01\t03\t055\t075\t050\t080\t040\t040\t0\t0\t0\t2\t0\t0\n00398\t01\t03\t085\t120\t070\t100\t050\t050\t0\t3\t0\t0\t0\t0\n00399\t01\t00\t059\t045\t040\t031\t035\t040\t1\t0\t0\t0\t0\t0\n00400\t01\t11\t079\t085\t060\t071\t055\t060\t0\t2\t0\t0\t0\t0\n00401\t07\t00\t037\t025\t041\t025\t025\t041\t0\t0\t1\t0\t0\t0\n00402\t07\t00\t077\t085\t051\t065\t055\t051\t0\t2\t0\t0\t0\t0\n00403\t13\t00\t045\t065\t034\t045\t040\t034\t0\t1\t0\t0\t0\t0\n00404\t13\t00\t060\t085\t049\t060\t060\t049\t0\t2\t0\t0\t0\t0\n00405\t13\t00\t080\t120\t079\t070\t095\t079\t0\t3\t0\t0\t0\t0\n00406\t12\t04\t040\t030\t035\t055\t050\t070\t0\t0\t0\t0\t1\t0\n00407\t12\t04\t060\t070\t055\t090\t125\t105\t0\t0\t0\t0\t3\t0\n00408\t06\t00\t067\t125\t040\t058\t030\t030\t0\t1\t0\t0\t0\t0\n00409\t06\t00\t097\t165\t060\t058\t065\t050\t0\t2\t0\t0\t0\t0\n00410\t06\t09\t030\t042\t118\t030\t042\t088\t0\t0\t1\t0\t0\t0\n00411\t06\t09\t060\t052\t168\t030\t047\t138\t0\t0\t2\t0\t0\t0\n00412\t07\t00\t040\t029\t045\t036\t029\t045\t0\t0\t0\t0\t0\t1\n00413\t07\t12\t060\t059\t085\t036\t079\t105\t0\t0\t0\t0\t0\t2\n00414\t07\t03\t070\t094\t050\t066\t094\t050\t0\t1\t0\t0\t1\t0\n00415\t07\t03\t030\t030\t042\t070\t030\t042\t0\t0\t0\t1\t0\t0\n00416\t07\t03\t070\t080\t102\t040\t080\t102\t0\t0\t1\t0\t0\t1\n00417\t13\t00\t060\t045\t070\t095\t045\t090\t0\t0\t0\t1\t0\t0\n00418\t11\t00\t055\t065\t035\t085\t060\t030\t0\t0\t0\t1\t0\t0\n00419\t11\t00\t085\t105\t055\t115\t085\t050\t0\t0\t0\t2\t0\t0\n00420\t12\t00\t045\t035\t045\t035\t062\t053\t0\t0\t0\t0\t1\t0\n00421\t12\t00\t070\t060\t070\t085\t087\t078\t0\t0\t0\t0\t2\t0\n00422\t11\t00\t076\t048\t048\t034\t057\t062\t1\t0\t0\t0\t0\t0\n00423\t11\t05\t111\t083\t068\t039\t092\t082\t2\t0\t0\t0\t0\t0\n00424\t01\t00\t075\t100\t066\t115\t060\t066\t0\t0\t0\t2\t0\t0\n00425\t08\t03\t090\t050\t034\t070\t060\t044\t1\t0\t0\t0\t0\t0\n00426\t08\t03\t150\t080\t044\t080\t090\t054\t2\t0\t0\t0\t0\t0\n00427\t01\t00\t055\t066\t044\t085\t044\t056\t0\t0\t0\t1\t0\t0\n00428\t01\t00\t065\t076\t084\t105\t054\t096\t0\t0\t0\t2\t0\t0\n00429\t08\t00\t060\t060\t060\t105\t105\t105\t0\t0\t0\t0\t1\t1\n00430\t17\t03\t100\t125\t052\t071\t105\t052\t0\t2\t0\t0\t0\t0\n00431\t01\t00\t049\t055\t042\t085\t042\t037\t0\t0\t0\t1\t0\t0\n00432\t01\t00\t071\t082\t064\t112\t064\t059\t0\t0\t0\t2\t0\t0\n00433\t14\t00\t045\t030\t050\t045\t065\t050\t0\t0\t0\t0\t1\t0\n00434\t04\t17\t063\t063\t047\t074\t041\t041\t0\t0\t0\t1\t0\t0\n00435\t04\t17\t103\t093\t067\t084\t071\t061\t2\t0\t0\t0\t0\t0\n00436\t09\t14\t057\t024\t086\t023\t024\t086\t0\t0\t1\t0\t0\t0\n00437\t09\t14\t067\t089\t116\t033\t079\t116\t0\t0\t1\t0\t0\t1\n00438\t06\t00\t050\t080\t095\t010\t010\t045\t0\t0\t1\t0\t0\t0\n00439\t14\t00\t020\t025\t045\t060\t070\t090\t0\t0\t0\t0\t0\t1\n00440\t01\t00\t100\t005\t005\t030\t015\t065\t1\t0\t0\t0\t0\t0\n00441\t01\t03\t076\t065\t045\t091\t092\t042\t0\t1\t0\t0\t0\t0\n00442\t08\t17\t050\t092\t108\t035\t092\t108\t0\t0\t1\t0\t0\t1\n00443\t16\t05\t058\t070\t045\t042\t040\t045\t0\t1\t0\t0\t0\t0\n00444\t16\t05\t068\t090\t065\t082\t050\t055\t0\t2\t0\t0\t0\t0\n00445\t16\t05\t108\t130\t095\t102\t080\t085\t0\t3\t0\t0\t0\t0\n00446\t01\t00\t135\t085\t040\t005\t040\t085\t1\t0\t0\t0\t0\t0\n00447\t02\t00\t040\t070\t040\t060\t035\t040\t0\t1\t0\t0\t0\t0\n00448\t02\t09\t070\t110\t070\t090\t115\t070\t0\t1\t0\t0\t1\t0\n00449\t05\t00\t068\t072\t078\t032\t038\t042\t0\t0\t1\t0\t0\t0\n00450\t05\t00\t108\t112\t118\t047\t068\t072\t0\t0\t2\t0\t0\t0\n00451\t04\t07\t040\t050\t090\t065\t030\t055\t0\t0\t1\t0\t0\t0\n00452\t04\t17\t070\t090\t110\t095\t060\t075\t0\t0\t2\t0\t0\t0\n00453\t04\t02\t048\t061\t040\t050\t061\t040\t0\t1\t0\t0\t0\t0\n00454\t04\t02\t083\t106\t065\t085\t086\t065\t0\t2\t0\t0\t0\t0\n00455\t12\t00\t074\t100\t072\t046\t090\t072\t0\t2\t0\t0\t0\t0\n00456\t11\t00\t049\t049\t056\t066\t049\t061\t0\t0\t0\t1\t0\t0\n00457\t11\t00\t069\t069\t076\t091\t069\t086\t0\t0\t0\t2\t0\t0\n00458\t11\t03\t045\t020\t050\t050\t060\t120\t0\t0\t0\t0\t0\t1\n00459\t12\t15\t060\t062\t050\t040\t062\t060\t0\t1\t0\t0\t0\t0\n00460\t12\t15\t090\t092\t075\t060\t092\t085\t0\t1\t0\t0\t1\t0\n00461\t17\t15\t070\t120\t065\t125\t045\t085\t0\t1\t0\t1\t0\t0\n00462\t13\t09\t070\t070\t115\t060\t130\t090\t0\t0\t0\t0\t3\t0\n00463\t01\t00\t110\t085\t095\t050\t080\t095\t3\t0\t0\t0\t0\t0\n00464\t05\t06\t115\t140\t130\t040\t055\t055\t0\t3\t0\t0\t0\t0\n00465\t12\t00\t100\t100\t125\t050\t110\t050\t0\t0\t2\t0\t0\t0\n00466\t13\t00\t075\t123\t067\t095\t095\t085\t0\t3\t0\t0\t0\t0\n00467\t10\t00\t075\t095\t067\t083\t125\t095\t0\t0\t0\t0\t3\t0\n00468\t01\t03\t085\t050\t095\t080\t120\t115\t0\t0\t0\t0\t2\t1\n00469\t07\t03\t086\t076\t086\t095\t116\t056\t0\t2\t0\t0\t0\t0\n00470\t12\t00\t065\t110\t130\t095\t060\t065\t0\t0\t2\t0\t0\t0\n00471\t15\t00\t065\t060\t110\t065\t130\t095\t0\t0\t0\t0\t2\t0\n00472\t05\t03\t075\t095\t125\t095\t045\t075\t0\t0\t2\t0\t0\t0\n00473\t15\t05\t110\t130\t080\t080\t070\t060\t0\t3\t0\t0\t0\t0\n00474\t01\t00\t085\t080\t070\t090\t135\t075\t0\t0\t0\t0\t3\t0\n00475\t14\t02\t068\t125\t065\t080\t065\t115\t0\t3\t0\t0\t0\t0\n00476\t06\t09\t060\t055\t145\t040\t075\t150\t0\t0\t1\t0\t0\t2\n00477\t08\t00\t045\t100\t135\t045\t065\t135\t0\t0\t1\t0\t0\t2\n00478\t15\t08\t070\t080\t070\t110\t080\t070\t0\t0\t0\t2\t0\t0\n00479\t13\t08\t050\t050\t077\t091\t095\t077\t0\t0\t0\t1\t1\t0\n00480\t14\t00\t075\t075\t130\t095\t075\t130\t0\t0\t2\t0\t0\t1\n00481\t14\t00\t080\t105\t105\t080\t105\t105\t0\t1\t0\t0\t1\t1\n00482\t14\t00\t075\t125\t070\t115\t125\t070\t0\t2\t0\t0\t1\t0\n00483\t09\t16\t100\t120\t120\t090\t150\t100\t0\t0\t0\t0\t3\t0\n00484\t11\t16\t090\t120\t100\t100\t150\t120\t0\t0\t0\t0\t3\t0\n00485\t10\t09\t091\t090\t106\t077\t130\t106\t0\t0\t0\t0\t3\t0\n00486\t01\t00\t110\t160\t110\t100\t080\t110\t0\t3\t0\t0\t0\t0\n00487\t08\t16\t150\t100\t120\t090\t100\t120\t3\t0\t0\t0\t0\t0\n00488\t14\t00\t120\t070\t120\t085\t075\t130\t0\t0\t0\t0\t0\t3\n00489\t11\t00\t080\t080\t080\t080\t080\t080\t1\t0\t0\t0\t0\t0\n00490\t11\t00\t100\t100\t100\t100\t100\t100\t3\t0\t0\t0\t0\t0\n00491\t17\t00\t070\t090\t090\t125\t135\t090\t0\t0\t0\t1\t2\t0\n00492\t12\t00\t100\t100\t100\t100\t100\t100\t3\t0\t0\t0\t0\t0\n00493\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10034\t07\t00\t040\t029\t045\t036\t029\t045\t0\t0\t0\t0\t0\t1\n10035\t07\t00\t040\t029\t045\t036\t029\t045\t0\t0\t0\t0\t0\t1\n10036\t07\t05\t060\t079\t105\t036\t059\t085\t0\t0\t2\t0\t0\t0\n10037\t07\t09\t060\t069\t095\t036\t069\t095\t0\t0\t1\t0\t0\t1\n10038\t12\t00\t070\t060\t070\t085\t087\t078\t0\t0\t0\t0\t2\t0\n10039\t11\t00\t076\t048\t048\t034\t057\t062\t1\t0\t0\t0\t0\t0\n10040\t11\t05\t111\t083\t068\t039\t092\t082\t2\t0\t0\t0\t0\t0\n10041\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10042\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10043\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10044\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10045\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10046\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10047\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10048\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10049\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10050\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10051\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10052\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10053\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10054\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10055\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10056\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10057\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10058\t13\t08\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10059\t13\t08\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10060\t13\t08\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10061\t13\t08\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10062\t13\t08\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10063\t08\t16\t150\t120\t100\t090\t120\t100\t3\t0\t0\t0\t0\t0\n10064\t12\t03\t100\t103\t075\t127\t120\t075\t0\t0\t0\t3\t0\t0\n10065\t13\t00\t020\t040\t015\t060\t035\t035\t0\t0\t0\t1\t0\t0\n"
  },
  {
    "path": "VeekunImport/form_stats5.txt",
    "content": "00494\t14\t10\t100\t100\t100\t100\t100\t100\t3\t0\t0\t0\t0\t0\n00495\t12\t00\t045\t045\t055\t063\t045\t055\t0\t0\t0\t1\t0\t0\n00496\t12\t00\t060\t060\t075\t083\t060\t075\t0\t0\t0\t2\t0\t0\n00497\t12\t00\t075\t075\t095\t113\t075\t095\t0\t0\t0\t3\t0\t0\n00498\t10\t00\t065\t063\t045\t045\t045\t045\t1\t0\t0\t0\t0\t0\n00499\t10\t02\t090\t093\t055\t055\t070\t055\t0\t2\t0\t0\t0\t0\n00500\t10\t02\t110\t123\t065\t065\t100\t065\t0\t3\t0\t0\t0\t0\n00501\t11\t00\t055\t055\t045\t045\t063\t045\t0\t0\t0\t0\t1\t0\n00502\t11\t00\t075\t075\t060\t060\t083\t060\t0\t0\t0\t0\t2\t0\n00503\t11\t00\t095\t100\t085\t070\t108\t070\t0\t0\t0\t0\t3\t0\n00504\t01\t00\t045\t055\t039\t042\t035\t039\t0\t1\t0\t0\t0\t0\n00505\t01\t00\t060\t085\t069\t077\t060\t069\t0\t2\t0\t0\t0\t0\n00506\t01\t00\t045\t060\t045\t055\t025\t045\t0\t1\t0\t0\t0\t0\n00507\t01\t00\t065\t080\t065\t060\t035\t065\t0\t2\t0\t0\t0\t0\n00508\t01\t00\t085\t100\t090\t080\t045\t090\t0\t3\t0\t0\t0\t0\n00509\t17\t00\t041\t050\t037\t066\t050\t037\t0\t0\t0\t1\t0\t0\n00510\t17\t00\t064\t088\t050\t106\t088\t050\t0\t0\t0\t2\t0\t0\n00511\t12\t00\t050\t053\t048\t064\t053\t048\t0\t0\t0\t1\t0\t0\n00512\t12\t00\t075\t098\t063\t101\t098\t063\t0\t0\t0\t2\t0\t0\n00513\t10\t00\t050\t053\t048\t064\t053\t048\t0\t0\t0\t1\t0\t0\n00514\t10\t00\t075\t098\t063\t101\t098\t063\t0\t0\t0\t2\t0\t0\n00515\t11\t00\t050\t053\t048\t064\t053\t048\t0\t0\t0\t1\t0\t0\n00516\t11\t00\t075\t098\t063\t101\t098\t063\t0\t0\t0\t2\t0\t0\n00517\t14\t00\t076\t025\t045\t024\t067\t055\t1\t0\t0\t0\t0\t0\n00518\t14\t00\t116\t055\t085\t029\t107\t095\t2\t0\t0\t0\t0\t0\n00519\t01\t03\t050\t055\t050\t043\t036\t030\t0\t1\t0\t0\t0\t0\n00520\t01\t03\t062\t077\t062\t065\t050\t042\t0\t2\t0\t0\t0\t0\n00521\t01\t03\t080\t105\t080\t093\t065\t055\t0\t3\t0\t0\t0\t0\n00522\t13\t00\t045\t060\t032\t076\t050\t032\t0\t0\t0\t1\t0\t0\n00523\t13\t00\t075\t100\t063\t116\t080\t063\t0\t0\t0\t2\t0\t0\n00524\t06\t00\t055\t075\t085\t015\t025\t025\t0\t0\t1\t0\t0\t0\n00525\t06\t00\t070\t105\t105\t020\t050\t040\t0\t1\t1\t0\t0\t0\n00526\t06\t00\t085\t135\t130\t025\t060\t070\t0\t3\t0\t0\t0\t0\n00527\t14\t03\t055\t045\t043\t072\t055\t043\t0\t0\t0\t1\t0\t0\n00528\t14\t03\t067\t057\t055\t114\t077\t055\t0\t0\t0\t2\t0\t0\n00529\t05\t00\t060\t085\t040\t068\t030\t045\t0\t1\t0\t0\t0\t0\n00530\t05\t09\t110\t135\t060\t088\t050\t065\t0\t2\t0\t0\t0\t0\n00531\t01\t00\t103\t060\t086\t050\t060\t086\t2\t0\t0\t0\t0\t0\n00532\t02\t00\t075\t080\t055\t035\t025\t035\t0\t1\t0\t0\t0\t0\n00533\t02\t00\t085\t105\t085\t040\t040\t050\t0\t2\t0\t0\t0\t0\n00534\t02\t00\t105\t140\t095\t045\t055\t065\t0\t3\t0\t0\t0\t0\n00535\t11\t00\t050\t050\t040\t064\t050\t040\t0\t0\t0\t1\t0\t0\n00536\t11\t05\t075\t065\t055\t069\t065\t055\t2\t0\t0\t0\t0\t0\n00537\t11\t05\t105\t085\t075\t074\t085\t075\t3\t0\t0\t0\t0\t0\n00538\t02\t00\t120\t100\t085\t045\t030\t085\t2\t0\t0\t0\t0\t0\n00539\t02\t00\t075\t125\t075\t085\t030\t075\t0\t2\t0\t0\t0\t0\n00540\t07\t12\t045\t053\t070\t042\t040\t060\t0\t0\t1\t0\t0\t0\n00541\t07\t12\t055\t063\t090\t042\t050\t080\t0\t0\t2\t0\t0\t0\n00542\t07\t12\t075\t103\t080\t092\t070\t070\t0\t3\t0\t0\t0\t0\n00543\t07\t04\t030\t045\t059\t057\t030\t039\t0\t0\t1\t0\t0\t0\n00544\t07\t04\t040\t055\t099\t047\t040\t079\t0\t0\t2\t0\t0\t0\n00545\t07\t04\t060\t090\t089\t112\t055\t069\t0\t0\t0\t3\t0\t0\n00546\t12\t00\t040\t027\t060\t066\t037\t050\t0\t0\t0\t1\t0\t0\n00547\t12\t00\t060\t067\t085\t116\t077\t075\t0\t0\t0\t2\t0\t0\n00548\t12\t00\t045\t035\t050\t030\t070\t050\t0\t0\t0\t0\t1\t0\n00549\t12\t00\t070\t060\t075\t090\t110\t075\t0\t0\t0\t0\t2\t0\n00550\t11\t00\t070\t092\t065\t098\t080\t055\t0\t0\t0\t2\t0\t0\n00551\t05\t17\t050\t072\t035\t065\t035\t035\t0\t1\t0\t0\t0\t0\n00552\t05\t17\t060\t082\t045\t074\t045\t045\t0\t2\t0\t0\t0\t0\n00553\t05\t17\t095\t117\t070\t092\t065\t070\t0\t3\t0\t0\t0\t0\n00554\t10\t00\t070\t090\t045\t050\t015\t045\t0\t1\t0\t0\t0\t0\n00555\t10\t00\t105\t140\t055\t095\t030\t055\t0\t2\t0\t0\t0\t0\n00556\t12\t00\t075\t086\t067\t060\t106\t067\t0\t0\t0\t0\t2\t0\n00557\t07\t06\t050\t065\t085\t055\t035\t035\t0\t0\t1\t0\t0\t0\n00558\t07\t06\t070\t095\t125\t045\t065\t075\t0\t0\t2\t0\t0\t0\n00559\t17\t02\t050\t075\t070\t048\t035\t070\t0\t1\t0\t0\t0\t0\n00560\t17\t02\t065\t090\t115\t058\t045\t115\t0\t0\t1\t0\t0\t1\n00561\t14\t03\t072\t058\t080\t097\t103\t080\t0\t0\t0\t0\t2\t0\n00562\t08\t00\t038\t030\t085\t030\t055\t065\t0\t0\t1\t0\t0\t0\n00563\t08\t00\t058\t050\t145\t030\t095\t105\t0\t0\t2\t0\t0\t0\n00564\t11\t06\t054\t078\t103\t022\t053\t045\t0\t0\t1\t0\t0\t0\n00565\t11\t06\t074\t108\t133\t032\t083\t065\t0\t0\t2\t0\t0\t0\n00566\t06\t03\t055\t112\t045\t070\t074\t045\t0\t1\t0\t0\t0\t0\n00567\t06\t03\t075\t140\t065\t110\t112\t065\t0\t2\t0\t0\t0\t0\n00568\t04\t00\t050\t050\t062\t065\t040\t062\t0\t0\t0\t1\t0\t0\n00569\t04\t00\t080\t095\t082\t075\t060\t082\t0\t2\t0\t0\t0\t0\n00570\t17\t00\t040\t065\t040\t065\t080\t040\t0\t0\t0\t0\t1\t0\n00571\t17\t00\t060\t105\t060\t105\t120\t060\t0\t0\t0\t0\t2\t0\n00572\t01\t00\t055\t050\t040\t075\t040\t040\t0\t0\t0\t1\t0\t0\n00573\t01\t00\t075\t095\t060\t115\t065\t060\t0\t0\t0\t2\t0\t0\n00574\t14\t00\t045\t030\t050\t045\t055\t065\t0\t0\t0\t0\t0\t1\n00575\t14\t00\t060\t045\t070\t055\t075\t085\t0\t0\t0\t0\t0\t2\n00576\t14\t00\t070\t055\t095\t065\t095\t110\t0\t0\t0\t0\t0\t3\n00577\t14\t00\t045\t030\t040\t020\t105\t050\t0\t0\t0\t0\t1\t0\n00578\t14\t00\t065\t040\t050\t030\t125\t060\t0\t0\t0\t0\t2\t0\n00579\t14\t00\t110\t065\t075\t030\t125\t085\t0\t0\t0\t0\t3\t0\n00580\t11\t03\t062\t044\t050\t055\t044\t050\t1\t0\t0\t0\t0\t0\n00581\t11\t03\t075\t087\t063\t098\t087\t063\t0\t0\t0\t2\t0\t0\n00582\t15\t00\t036\t050\t050\t044\t065\t060\t0\t0\t0\t0\t1\t0\n00583\t15\t00\t051\t065\t065\t059\t080\t075\t0\t0\t0\t0\t2\t0\n00584\t15\t00\t071\t095\t085\t079\t110\t095\t0\t0\t0\t0\t3\t0\n00585\t01\t12\t060\t060\t050\t075\t040\t050\t0\t0\t0\t1\t0\t0\n00586\t01\t12\t080\t100\t070\t095\t060\t070\t0\t2\t0\t0\t0\t0\n00587\t13\t03\t055\t075\t060\t103\t075\t060\t0\t0\t0\t2\t0\t0\n00588\t07\t00\t050\t075\t045\t060\t040\t045\t0\t1\t0\t0\t0\t0\n00589\t07\t09\t070\t135\t105\t020\t060\t105\t0\t2\t0\t0\t0\t0\n00590\t12\t04\t069\t055\t045\t015\t055\t055\t1\t0\t0\t0\t0\t0\n00591\t12\t04\t114\t085\t070\t030\t085\t080\t2\t0\t0\t0\t0\t0\n00592\t11\t08\t055\t040\t050\t040\t065\t085\t0\t0\t0\t0\t0\t1\n00593\t11\t08\t100\t060\t070\t060\t085\t105\t0\t0\t0\t0\t0\t2\n00594\t11\t00\t165\t075\t080\t065\t040\t045\t2\t0\t0\t0\t0\t0\n00595\t07\t13\t050\t047\t050\t065\t057\t050\t0\t0\t0\t1\t0\t0\n00596\t07\t13\t070\t077\t060\t108\t097\t060\t0\t0\t0\t2\t0\t0\n00597\t12\t09\t044\t050\t091\t010\t024\t086\t0\t0\t1\t0\t0\t0\n00598\t12\t09\t074\t094\t131\t020\t054\t116\t0\t0\t2\t0\t0\t0\n00599\t09\t00\t040\t055\t070\t030\t045\t060\t0\t0\t1\t0\t0\t0\n00600\t09\t00\t060\t080\t095\t050\t070\t085\t0\t0\t2\t0\t0\t0\n00601\t09\t00\t060\t100\t115\t090\t070\t085\t0\t0\t3\t0\t0\t0\n00602\t13\t00\t035\t055\t040\t060\t045\t040\t0\t0\t0\t1\t0\t0\n00603\t13\t00\t065\t085\t070\t040\t075\t070\t0\t2\t0\t0\t0\t0\n00604\t13\t00\t085\t115\t080\t050\t105\t080\t0\t3\t0\t0\t0\t0\n00605\t14\t00\t055\t055\t055\t030\t085\t055\t0\t0\t0\t0\t1\t0\n00606\t14\t00\t075\t075\t075\t040\t125\t095\t0\t0\t0\t0\t2\t0\n00607\t08\t10\t050\t030\t055\t020\t065\t055\t0\t0\t0\t0\t1\t0\n00608\t08\t10\t060\t040\t060\t055\t095\t060\t0\t0\t0\t0\t2\t0\n00609\t08\t10\t060\t055\t090\t080\t145\t090\t0\t0\t0\t0\t3\t0\n00610\t16\t00\t046\t087\t060\t057\t030\t040\t0\t1\t0\t0\t0\t0\n00611\t16\t00\t066\t117\t070\t067\t040\t050\t0\t2\t0\t0\t0\t0\n00612\t16\t00\t076\t147\t090\t097\t060\t070\t0\t3\t0\t0\t0\t0\n00613\t15\t00\t055\t070\t040\t040\t060\t040\t0\t1\t0\t0\t0\t0\n00614\t15\t00\t095\t110\t080\t050\t070\t080\t0\t2\t0\t0\t0\t0\n00615\t15\t00\t070\t050\t030\t105\t095\t135\t0\t0\t0\t0\t0\t2\n00616\t07\t00\t050\t040\t085\t025\t040\t065\t0\t0\t1\t0\t0\t0\n00617\t07\t00\t080\t070\t040\t145\t100\t060\t0\t0\t0\t2\t0\t0\n00618\t05\t13\t109\t066\t084\t032\t081\t099\t2\t0\t0\t0\t0\t0\n00619\t02\t00\t045\t085\t050\t065\t055\t050\t0\t1\t0\t0\t0\t0\n00620\t02\t00\t065\t125\t060\t105\t095\t060\t0\t2\t0\t0\t0\t0\n00621\t16\t00\t077\t120\t090\t048\t060\t090\t0\t2\t0\t0\t0\t0\n00622\t05\t08\t059\t074\t050\t035\t035\t050\t0\t1\t0\t0\t0\t0\n00623\t05\t08\t089\t124\t080\t055\t055\t080\t0\t2\t0\t0\t0\t0\n00624\t17\t09\t045\t085\t070\t060\t040\t040\t0\t1\t0\t0\t0\t0\n00625\t17\t09\t065\t125\t100\t070\t060\t070\t0\t2\t0\t0\t0\t0\n00626\t01\t00\t095\t110\t095\t055\t040\t095\t0\t2\t0\t0\t0\t0\n00627\t01\t03\t070\t083\t050\t060\t037\t050\t0\t1\t0\t0\t0\t0\n00628\t01\t03\t100\t123\t075\t080\t057\t075\t0\t2\t0\t0\t0\t0\n00629\t17\t03\t070\t055\t075\t060\t045\t065\t0\t0\t1\t0\t0\t0\n00630\t17\t03\t110\t065\t105\t080\t055\t095\t0\t0\t0\t0\t2\t0\n00631\t10\t00\t085\t097\t066\t065\t105\t066\t0\t0\t0\t0\t2\t0\n00632\t07\t09\t058\t109\t112\t109\t048\t048\t0\t0\t2\t0\t0\t0\n00633\t17\t16\t052\t065\t050\t038\t045\t050\t0\t1\t0\t0\t0\t0\n00634\t17\t16\t072\t085\t070\t058\t065\t070\t0\t2\t0\t0\t0\t0\n00635\t17\t16\t092\t105\t090\t098\t125\t090\t0\t0\t0\t0\t3\t0\n00636\t07\t10\t055\t085\t055\t060\t050\t055\t0\t1\t0\t0\t0\t0\n00637\t07\t10\t085\t060\t065\t100\t135\t105\t0\t0\t0\t0\t3\t0\n00638\t09\t02\t091\t090\t129\t108\t090\t072\t0\t0\t3\t0\t0\t0\n00639\t06\t02\t091\t129\t090\t108\t072\t090\t0\t3\t0\t0\t0\t0\n00640\t12\t02\t091\t090\t072\t108\t090\t129\t0\t0\t0\t0\t0\t3\n00641\t03\t00\t079\t115\t070\t111\t125\t080\t0\t3\t0\t0\t0\t0\n00642\t13\t03\t079\t115\t070\t111\t125\t080\t0\t3\t0\t0\t0\t0\n00643\t16\t10\t100\t120\t100\t090\t150\t120\t0\t0\t0\t0\t3\t0\n00644\t16\t13\t100\t150\t120\t090\t120\t100\t0\t3\t0\t0\t0\t0\n00645\t05\t03\t089\t125\t090\t101\t115\t080\t0\t0\t0\t0\t3\t0\n00646\t16\t15\t125\t130\t090\t095\t130\t090\t1\t1\t0\t0\t1\t0\n00647\t11\t02\t091\t072\t090\t108\t129\t090\t0\t0\t0\t0\t3\t0\n00648\t01\t14\t100\t077\t077\t090\t128\t128\t0\t0\t0\t1\t1\t1\n00649\t07\t09\t071\t120\t095\t099\t120\t095\t0\t1\t0\t1\t1\t0\n10058\t13\t10\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10059\t13\t11\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10060\t13\t15\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10061\t13\t03\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10062\t13\t12\t050\t065\t107\t086\t105\t107\t0\t0\t0\t1\t1\t0\n10066\t11\t00\t070\t092\t065\t098\t080\t055\t0\t0\t0\t2\t0\t0\n10067\t10\t14\t105\t030\t105\t055\t140\t105\t0\t0\t0\t0\t2\t0\n10068\t01\t12\t060\t060\t050\t075\t040\t050\t0\t0\t0\t1\t0\t0\n10069\t01\t12\t060\t060\t050\t075\t040\t050\t0\t0\t0\t1\t0\t0\n10070\t01\t12\t060\t060\t050\t075\t040\t050\t0\t0\t0\t1\t0\t0\n10071\t01\t12\t080\t100\t070\t095\t060\t070\t0\t2\t0\t0\t0\t0\n10072\t01\t12\t080\t100\t070\t095\t060\t070\t0\t2\t0\t0\t0\t0\n10073\t01\t12\t080\t100\t070\t095\t060\t070\t0\t2\t0\t0\t0\t0\n10074\t01\t02\t100\t128\t090\t128\t077\t077\t0\t1\t1\t1\t0\t0\n10075\t07\t09\t071\t120\t095\t099\t120\t095\t0\t1\t0\t1\t1\t0\n10076\t07\t09\t071\t120\t095\t099\t120\t095\t0\t1\t0\t1\t1\t0\n10077\t07\t09\t071\t120\t095\t099\t120\t095\t0\t1\t0\t1\t1\t0\n10078\t07\t09\t071\t120\t095\t099\t120\t095\t0\t1\t0\t1\t1\t0\n10079\t03\t00\t079\t100\t080\t121\t110\t090\t0\t0\t0\t3\t0\t0\n10080\t13\t03\t079\t105\t070\t101\t145\t080\t0\t0\t0\t0\t3\t0\n10081\t05\t03\t089\t145\t090\t091\t105\t080\t0\t3\t0\t0\t0\t0\n10082\t16\t15\t125\t170\t100\t095\t120\t090\t0\t3\t0\t0\t0\t0\n10083\t16\t15\t125\t120\t090\t095\t170\t100\t0\t0\t0\t0\t3\t0\n10084\t11\t02\t091\t072\t090\t108\t129\t090\t0\t0\t0\t0\t3\t0\n"
  },
  {
    "path": "VeekunImport/form_stats6.txt",
    "content": "00012\t07\t03\t060\t045\t050\t070\t090\t080\t0\t0\t0\t0\t2\t1\n00015\t07\t04\t065\t090\t040\t075\t045\t080\t0\t2\t0\t0\t0\t1\n00018\t01\t03\t083\t080\t075\t101\t070\t070\t0\t0\t0\t3\t0\t0\n00025\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n00026\t13\t00\t060\t090\t055\t110\t090\t080\t0\t0\t0\t3\t0\t0\n00031\t04\t05\t090\t092\t087\t076\t075\t085\t3\t0\t0\t0\t0\t0\n00034\t04\t05\t081\t102\t077\t085\t085\t075\t0\t3\t0\t0\t0\t0\n00035\t18\t00\t070\t045\t048\t035\t060\t065\t2\t0\t0\t0\t0\t0\n00036\t18\t00\t095\t070\t073\t060\t095\t090\t3\t0\t0\t0\t0\t0\n00039\t01\t18\t115\t045\t020\t020\t045\t025\t2\t0\t0\t0\t0\t0\n00040\t01\t18\t140\t070\t045\t045\t085\t050\t3\t0\t0\t0\t0\t0\n00045\t12\t04\t075\t080\t085\t050\t110\t090\t0\t0\t0\t0\t3\t0\n00062\t11\t02\t090\t095\t095\t070\t070\t090\t0\t0\t3\t0\t0\t0\n00065\t14\t00\t055\t050\t045\t120\t135\t095\t0\t0\t0\t0\t3\t0\n00071\t12\t04\t080\t105\t065\t070\t100\t070\t0\t3\t0\t0\t0\t0\n00076\t06\t05\t080\t120\t130\t045\t055\t065\t0\t0\t3\t0\t0\t0\n00122\t14\t18\t040\t045\t065\t090\t100\t120\t0\t0\t0\t0\t0\t2\n00173\t18\t00\t050\t025\t028\t015\t045\t055\t0\t0\t0\t0\t0\t1\n00174\t01\t18\t090\t030\t015\t015\t040\t020\t1\t0\t0\t0\t0\t0\n00175\t18\t00\t035\t020\t065\t020\t040\t065\t0\t0\t0\t0\t0\t1\n00176\t18\t03\t055\t040\t085\t040\t080\t105\t0\t0\t0\t0\t0\t2\n00181\t13\t00\t090\t075\t085\t055\t115\t090\t0\t0\t0\t0\t3\t0\n00182\t12\t00\t075\t080\t095\t050\t090\t100\t0\t0\t0\t0\t0\t3\n00183\t11\t18\t070\t020\t050\t040\t020\t050\t2\t0\t0\t0\t0\t0\n00184\t11\t18\t100\t050\t080\t050\t060\t080\t3\t0\t0\t0\t0\t0\n00189\t12\t03\t075\t055\t070\t110\t055\t095\t0\t0\t0\t3\t0\t0\n00209\t18\t00\t060\t080\t050\t030\t040\t040\t0\t1\t0\t0\t0\t0\n00210\t18\t00\t090\t120\t075\t045\t060\t060\t0\t2\t0\t0\t0\t0\n00267\t07\t03\t060\t070\t050\t065\t100\t050\t0\t0\t0\t0\t3\t0\n00280\t14\t18\t028\t025\t025\t040\t045\t035\t0\t0\t0\t0\t1\t0\n00281\t14\t18\t038\t035\t035\t050\t065\t055\t0\t0\t0\t0\t2\t0\n00282\t14\t18\t068\t065\t065\t080\t125\t115\t0\t0\t0\t0\t3\t0\n00295\t01\t00\t104\t091\t063\t068\t091\t073\t3\t0\t0\t0\t0\t0\n00298\t01\t18\t050\t020\t040\t020\t020\t040\t1\t0\t0\t0\t0\t0\n00303\t09\t18\t050\t085\t085\t050\t055\t055\t0\t1\t1\t0\t0\t0\n00398\t01\t03\t085\t120\t070\t100\t050\t060\t0\t3\t0\t0\t0\t0\n00407\t12\t04\t060\t070\t065\t090\t125\t105\t0\t0\t0\t0\t3\t0\n00439\t14\t18\t020\t025\t045\t060\t070\t090\t0\t0\t0\t0\t0\t1\n00468\t18\t03\t085\t050\t095\t080\t120\t115\t0\t0\t0\t0\t2\t1\n00508\t01\t00\t085\t110\t090\t080\t045\t090\t0\t3\t0\t0\t0\t0\n00521\t01\t03\t080\t115\t080\t093\t065\t055\t0\t3\t0\t0\t0\t0\n00526\t06\t00\t085\t135\t130\t025\t060\t080\t0\t3\t0\t0\t0\t0\n00537\t11\t05\t105\t095\t075\t074\t085\t075\t3\t0\t0\t0\t0\t0\n00542\t07\t12\t075\t103\t080\t092\t070\t080\t0\t3\t0\t0\t0\t0\n00545\t07\t04\t060\t100\t089\t112\t055\t069\t0\t0\t0\t3\t0\t0\n00546\t12\t18\t040\t027\t060\t066\t037\t050\t0\t0\t0\t1\t0\t0\n00547\t12\t18\t060\t067\t085\t116\t077\t075\t0\t0\t0\t2\t0\t0\n00553\t05\t17\t095\t117\t080\t092\t065\t070\t0\t3\t0\t0\t0\t0\n00650\t12\t00\t056\t061\t065\t038\t048\t045\t0\t0\t1\t0\t0\t0\n00651\t12\t00\t061\t078\t095\t057\t056\t058\t0\t0\t2\t0\t0\t0\n00652\t12\t02\t088\t107\t122\t064\t074\t075\t0\t0\t3\t0\t0\t0\n00653\t10\t00\t040\t045\t040\t060\t062\t060\t0\t0\t0\t0\t1\t0\n00654\t10\t00\t059\t059\t058\t073\t090\t070\t0\t0\t0\t0\t2\t0\n00655\t10\t14\t075\t069\t072\t104\t114\t100\t0\t0\t0\t0\t3\t0\n00656\t11\t00\t041\t056\t040\t071\t062\t044\t0\t0\t0\t1\t0\t0\n00657\t11\t00\t054\t063\t052\t097\t083\t056\t0\t0\t0\t2\t0\t0\n00658\t11\t17\t072\t095\t067\t122\t103\t071\t0\t0\t0\t3\t0\t0\n00659\t01\t00\t038\t036\t038\t057\t032\t036\t0\t0\t0\t1\t0\t0\n00660\t01\t05\t085\t056\t077\t078\t050\t077\t2\t0\t0\t0\t0\t0\n00661\t01\t03\t045\t050\t043\t062\t040\t038\t0\t0\t0\t1\t0\t0\n00662\t10\t03\t062\t073\t055\t084\t056\t052\t0\t0\t0\t2\t0\t0\n00663\t10\t03\t078\t081\t071\t126\t074\t069\t0\t0\t0\t3\t0\t0\n00664\t07\t00\t038\t035\t040\t035\t027\t025\t0\t0\t1\t0\t0\t0\n00665\t07\t00\t045\t022\t060\t029\t027\t030\t0\t0\t2\t0\t0\t0\n00666\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n00667\t10\t01\t062\t050\t058\t072\t073\t054\t0\t0\t0\t0\t1\t0\n00668\t10\t01\t086\t068\t072\t106\t109\t066\t0\t0\t0\t0\t2\t0\n00669\t18\t00\t044\t038\t039\t042\t061\t079\t0\t0\t0\t0\t0\t1\n00670\t18\t00\t054\t045\t047\t052\t075\t098\t0\t0\t0\t0\t0\t2\n00671\t18\t00\t078\t065\t068\t075\t112\t154\t0\t0\t0\t0\t0\t3\n00672\t12\t00\t066\t065\t048\t052\t062\t057\t1\t0\t0\t0\t0\t0\n00673\t12\t00\t123\t100\t062\t068\t097\t081\t2\t0\t0\t0\t0\t0\n00674\t02\t00\t067\t082\t062\t043\t046\t048\t0\t1\t0\t0\t0\t0\n00675\t02\t17\t095\t124\t078\t058\t069\t071\t0\t2\t0\t0\t0\t0\n00676\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n00677\t14\t00\t062\t048\t054\t068\t063\t060\t0\t0\t0\t1\t0\t0\n00678\t14\t00\t074\t048\t076\t104\t083\t081\t0\t0\t0\t2\t0\t0\n00679\t09\t08\t045\t080\t100\t028\t035\t037\t0\t0\t1\t0\t0\t0\n00680\t09\t08\t059\t110\t150\t035\t045\t049\t0\t0\t2\t0\t0\t0\n00681\t09\t08\t060\t050\t150\t060\t050\t150\t0\t0\t2\t0\t0\t1\n00682\t18\t00\t078\t052\t060\t023\t063\t065\t1\t0\t0\t0\t0\t0\n00683\t18\t00\t101\t072\t072\t029\t099\t089\t2\t0\t0\t0\t0\t0\n00684\t18\t00\t062\t048\t066\t049\t059\t057\t0\t0\t1\t0\t0\t0\n00685\t18\t00\t082\t080\t086\t072\t085\t075\t0\t0\t2\t0\t0\t0\n00686\t17\t14\t053\t054\t053\t045\t037\t046\t0\t1\t0\t0\t0\t0\n00687\t17\t14\t086\t092\t088\t073\t068\t075\t0\t2\t0\t0\t0\t0\n00688\t06\t11\t042\t052\t067\t050\t039\t056\t0\t1\t0\t0\t0\t0\n00689\t06\t11\t072\t105\t115\t068\t054\t086\t0\t2\t0\t0\t0\t0\n00690\t04\t11\t050\t060\t060\t030\t060\t060\t0\t0\t0\t0\t0\t1\n00691\t04\t16\t065\t075\t090\t044\t097\t123\t0\t0\t0\t0\t0\t2\n00692\t11\t00\t050\t053\t062\t044\t058\t063\t0\t0\t0\t0\t1\t0\n00693\t11\t00\t071\t073\t088\t059\t120\t089\t0\t0\t0\t0\t2\t0\n00694\t13\t01\t044\t038\t033\t070\t061\t043\t0\t0\t0\t1\t0\t0\n00695\t13\t01\t062\t055\t052\t109\t109\t094\t0\t0\t0\t1\t1\t0\n00696\t06\t16\t058\t089\t077\t048\t045\t045\t0\t1\t0\t0\t0\t0\n00697\t06\t16\t082\t121\t119\t071\t069\t059\t0\t2\t0\t0\t0\t0\n00698\t06\t15\t077\t059\t050\t046\t067\t063\t1\t0\t0\t0\t0\t0\n00699\t06\t15\t123\t077\t072\t058\t099\t092\t2\t0\t0\t0\t0\t0\n00700\t18\t00\t095\t065\t065\t060\t110\t130\t0\t0\t0\t0\t0\t2\n00701\t02\t03\t078\t092\t075\t118\t074\t063\t0\t2\t0\t0\t0\t0\n00702\t13\t18\t067\t058\t057\t101\t081\t067\t0\t0\t0\t2\t0\t0\n00703\t06\t18\t050\t050\t150\t050\t050\t150\t0\t0\t1\t0\t0\t1\n00704\t16\t00\t045\t050\t035\t040\t055\t075\t0\t0\t0\t0\t0\t1\n00705\t16\t00\t068\t075\t053\t060\t083\t113\t0\t0\t0\t0\t0\t2\n00706\t16\t00\t090\t100\t070\t080\t110\t150\t0\t0\t0\t0\t0\t3\n00707\t09\t18\t057\t080\t091\t075\t080\t087\t0\t0\t1\t0\t0\t0\n00708\t08\t12\t043\t070\t048\t038\t050\t060\t0\t1\t0\t0\t0\t0\n00709\t08\t12\t085\t110\t076\t056\t065\t082\t0\t2\t0\t0\t0\t0\n00710\t08\t12\t049\t066\t070\t051\t044\t055\t0\t0\t1\t0\t0\t0\n00711\t08\t12\t065\t090\t122\t084\t058\t075\t0\t0\t2\t0\t0\t0\n00712\t15\t00\t055\t069\t085\t028\t032\t035\t0\t0\t1\t0\t0\t0\n00713\t15\t00\t095\t117\t184\t028\t044\t046\t0\t0\t2\t0\t0\t0\n00714\t03\t16\t040\t030\t035\t055\t045\t040\t0\t0\t0\t1\t0\t0\n00715\t03\t16\t085\t070\t080\t123\t097\t080\t0\t0\t0\t2\t0\t0\n00716\t18\t00\t126\t131\t095\t099\t131\t098\t3\t0\t0\t0\t0\t0\n00717\t17\t03\t126\t131\t095\t099\t131\t098\t3\t0\t0\t0\t0\t0\n00718\t16\t05\t108\t100\t121\t095\t081\t095\t3\t0\t0\t0\t0\t0\n00719\t06\t18\t050\t100\t150\t050\t100\t150\t0\t0\t1\t0\t0\t2\n00720\t14\t08\t080\t110\t060\t070\t150\t130\t0\t0\t0\t0\t3\t0\n00721\t10\t11\t080\t110\t120\t070\t130\t090\t0\t0\t0\t0\t3\t0\n10085\t01\t00\t120\t120\t120\t120\t120\t120\t3\t0\t0\t0\t0\t0\n10086\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10087\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10088\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10089\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10090\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10091\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10092\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10093\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10094\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10095\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10096\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10097\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10098\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10099\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10100\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10101\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10102\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10103\t18\t00\t044\t038\t039\t042\t061\t079\t0\t0\t0\t0\t0\t1\n10104\t18\t00\t044\t038\t039\t042\t061\t079\t0\t0\t0\t0\t0\t1\n10105\t18\t00\t044\t038\t039\t042\t061\t079\t0\t0\t0\t0\t0\t1\n10106\t18\t00\t044\t038\t039\t042\t061\t079\t0\t0\t0\t0\t0\t1\n10107\t18\t00\t054\t045\t047\t052\t075\t098\t0\t0\t0\t0\t0\t2\n10108\t18\t00\t054\t045\t047\t052\t075\t098\t0\t0\t0\t0\t0\t2\n10109\t18\t00\t054\t045\t047\t052\t075\t098\t0\t0\t0\t0\t0\t2\n10110\t18\t00\t054\t045\t047\t052\t075\t098\t0\t0\t0\t0\t0\t2\n10111\t18\t00\t078\t065\t068\t075\t112\t154\t0\t0\t0\t0\t0\t3\n10112\t18\t00\t078\t065\t068\t075\t112\t154\t0\t0\t0\t0\t0\t3\n10113\t18\t00\t078\t065\t068\t075\t112\t154\t0\t0\t0\t0\t0\t3\n10114\t18\t00\t078\t065\t068\t075\t112\t154\t0\t0\t0\t0\t0\t3\n10115\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10116\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10117\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10118\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10119\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10120\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10121\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10122\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10123\t01\t00\t075\t080\t060\t102\t065\t090\t0\t0\t0\t1\t0\t0\n10124\t14\t00\t074\t048\t076\t104\t083\t081\t0\t0\t0\t2\t0\t0\n10125\t09\t08\t060\t150\t050\t060\t150\t050\t0\t2\t0\t0\t1\t0\n10126\t08\t12\t044\t066\t070\t056\t044\t055\t0\t0\t1\t0\t0\t0\n10127\t08\t12\t054\t066\t070\t046\t044\t055\t0\t0\t1\t0\t0\t0\n10128\t08\t12\t059\t066\t070\t041\t044\t055\t0\t0\t1\t0\t0\t0\n10129\t08\t12\t055\t085\t122\t099\t058\t075\t0\t0\t2\t0\t0\t0\n10130\t08\t12\t075\t095\t122\t069\t058\t075\t0\t0\t2\t0\t0\t0\n10131\t08\t12\t085\t100\t122\t054\t058\t075\t0\t0\t2\t0\t0\t0\n10132\t18\t00\t126\t131\t095\t099\t131\t098\t3\t0\t0\t0\t0\t0\n10133\t12\t04\t080\t100\t123\t080\t122\t120\t0\t0\t0\t0\t2\t1\n10134\t10\t16\t078\t130\t111\t100\t130\t085\t0\t0\t0\t0\t3\t0\n10135\t10\t03\t078\t104\t078\t100\t159\t115\t0\t0\t0\t0\t3\t0\n10136\t11\t00\t079\t103\t120\t078\t135\t115\t0\t0\t0\t0\t0\t3\n10137\t14\t00\t055\t050\t065\t150\t175\t095\t0\t0\t0\t0\t3\t0\n10138\t08\t04\t060\t065\t080\t130\t170\t095\t0\t0\t0\t0\t3\t0\n10139\t01\t00\t105\t125\t100\t100\t060\t100\t2\t0\t0\t0\t0\t0\n10140\t07\t03\t065\t155\t120\t105\t065\t090\t0\t2\t0\t0\t0\t0\n10141\t11\t17\t095\t155\t109\t081\t070\t130\t0\t2\t0\t0\t0\t0\n10142\t06\t03\t080\t135\t085\t150\t070\t095\t0\t0\t0\t2\t0\t0\n10143\t14\t02\t106\t190\t100\t130\t154\t100\t0\t0\t0\t0\t3\t0\n10144\t14\t00\t106\t150\t070\t140\t194\t120\t0\t0\t0\t0\t3\t0\n10145\t13\t16\t090\t095\t105\t045\t165\t110\t0\t0\t0\t0\t3\t0\n10146\t07\t09\t070\t150\t140\t075\t065\t100\t0\t2\t0\t0\t0\t0\n10147\t07\t02\t080\t185\t115\t075\t040\t105\t0\t2\t0\t0\t0\t0\n10148\t17\t10\t075\t090\t090\t115\t140\t090\t0\t0\t0\t0\t2\t0\n10149\t06\t17\t100\t164\t150\t071\t095\t120\t0\t3\t0\t0\t0\t0\n10150\t10\t02\t080\t160\t080\t100\t130\t080\t0\t3\t0\t0\t0\t0\n10151\t14\t18\t068\t085\t065\t100\t165\t135\t0\t0\t0\t0\t3\t0\n10152\t09\t18\t050\t105\t125\t050\t055\t095\t0\t1\t1\t0\t0\t0\n10153\t09\t00\t070\t140\t230\t050\t060\t080\t0\t0\t3\t0\t0\t0\n10154\t02\t14\t060\t100\t085\t100\t080\t085\t0\t0\t0\t2\t0\t0\n10155\t13\t00\t070\t075\t080\t135\t135\t080\t0\t0\t0\t2\t0\t0\n10156\t08\t00\t064\t165\t075\t075\t093\t083\t0\t2\t0\t0\t0\t0\n10157\t17\t00\t065\t150\t060\t115\t115\t060\t0\t2\t0\t0\t0\t0\n10158\t16\t05\t108\t170\t115\t092\t120\t095\t0\t3\t0\t0\t0\t0\n10159\t02\t09\t070\t145\t088\t112\t140\t070\t0\t1\t0\t0\t1\t0\n10160\t12\t15\t090\t132\t105\t030\t132\t105\t0\t1\t0\t0\t1\t0\n10161\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10162\t07\t03\t080\t052\t050\t089\t090\t050\t1\t0\t0\t1\t1\t0\n10163\t18\t00\t074\t065\t067\t092\t125\t128\t0\t0\t0\t0\t0\t2\n10164\t16\t14\t080\t100\t120\t110\t140\t150\t0\t0\t0\t0\t0\t3\n10165\t16\t14\t080\t130\t100\t110\t160\t120\t0\t0\t0\t0\t3\t0\n10166\t11\t05\t100\t150\t110\t070\t095\t110\t0\t3\t0\t0\t0\t0\n10167\t12\t16\t070\t110\t075\t145\t145\t085\t0\t0\t0\t3\t0\t0\n10168\t17\t08\t050\t085\t125\t020\t085\t115\t0\t1\t1\t0\t0\t0\n10169\t16\t18\t075\t110\t110\t080\t110\t105\t0\t0\t0\t0\t0\t2\n10170\t14\t02\t068\t165\t095\t110\t065\t115\t0\t3\t0\t0\t0\t0\n10171\t01\t18\t103\t060\t126\t050\t080\t126\t2\t0\t0\t0\t0\t0\n10172\t11\t17\t070\t140\t070\t105\t110\t065\t0\t2\t0\t0\t0\t0\n10173\t11\t14\t095\t075\t180\t030\t130\t080\t0\t0\t2\t0\t0\t0\n10174\t09\t05\t075\t125\t230\t030\t055\t095\t0\t0\t2\t0\t0\t0\n10175\t01\t03\t083\t080\t080\t121\t135\t080\t0\t0\t0\t3\t0\t0\n10176\t15\t00\t080\t120\t080\t100\t120\t080\t2\t0\t0\t0\t0\t0\n10177\t06\t18\t050\t160\t110\t110\t160\t110\t0\t0\t1\t0\t0\t2\n10178\t09\t14\t080\t145\t150\t110\t105\t110\t0\t0\t3\t0\t0\t0\n10179\t11\t00\t100\t150\t090\t090\t180\t160\t0\t0\t0\t0\t3\t0\n10180\t05\t10\t100\t180\t160\t090\t150\t090\t0\t3\t0\t0\t0\t0\n10181\t16\t03\t105\t180\t100\t115\t180\t100\t0\t2\t0\t0\t1\t0\n10182\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n10183\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n10184\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n10185\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n10186\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n10187\t13\t00\t035\t055\t040\t090\t050\t050\t0\t0\t0\t2\t0\t0\n10188\t14\t17\t080\t160\t060\t080\t170\t130\t0\t0\t0\t0\t3\t0\n10189\t10\t05\t070\t120\t100\t020\t145\t105\t0\t1\t0\t0\t1\t0\n10190\t01\t02\t065\t136\t094\t135\t054\t096\t0\t0\t0\t2\t0\t0\n10191\t16\t03\t095\t145\t130\t120\t120\t090\t0\t3\t0\t0\t0\t0\n10192\t07\t04\t065\t150\t040\t145\t015\t080\t0\t2\t0\t0\t0\t1\n"
  },
  {
    "path": "VeekunImport/form_values.txt",
    "content": "﻿201\t201\t0\n201\t10001\t1\n201\t10002\t2\n201\t10003\t3\n201\t10004\t4\n201\t10005\t5\n201\t10006\t6\n201\t10007\t7\n201\t10008\t8\n201\t10009\t9\n201\t10010\t10\n201\t10011\t11\n201\t10012\t12\n201\t10013\t13\n201\t10014\t14\n201\t10015\t15\n201\t10016\t16\n201\t10017\t17\n201\t10018\t18\n201\t10019\t19\n201\t10020\t20\n201\t10021\t21\n201\t10022\t22\n201\t10023\t23\n201\t10024\t24\n201\t10025\t25\n201\t10026\t26\n201\t10027\t27\n493\t493\t0\n493\t10045\t1\n493\t10047\t2\n493\t10052\t3\n493\t10050\t4\n493\t10054\t5\n493\t10041\t6\n493\t10048\t7\n493\t10055\t8\n493\t10046\t9\n493\t10056\t10\n493\t10049\t11\n493\t10044\t12\n493\t10053\t13\n493\t10051\t14\n493\t10043\t15\n493\t10042\t16\n493\t10057\t31\n493\t10085\t17\n646\t646\t0\n646\t10083\t1\n646\t10082\t2\n649\t649\t0\n649\t10075\t1\n649\t10076\t2\n649\t10077\t3\n649\t10078\t4\n676\t676\t0\n676\t10115\t1\n676\t10116\t2\n676\t10117\t3\n676\t10118\t4\n676\t10119\t5\n676\t10120\t6\n676\t10121\t7\n676\t10122\t8\n676\t10123\t9"
  },
  {
    "path": "VeekunImport/items3.txt",
    "content": "1\tMaster Ball\t3001\n2\tUltra Ball\t3002\n3\tGreat Ball\t3003\n4\tPoké Ball\t3004\n5\tSafari Ball\t3005\n6\tNet Ball\t3006\n7\tDive Ball\t3007\n8\tNest Ball\t3008\n9\tRepeat Ball\t3009\n10\tTimer Ball\t3010\n11\tLuxury Ball\t3011\n12\tPremier Ball\t3012\n13\tPotion\t3013\n14\tAntidote\t3014\n15\tBurn Heal\t3015\n16\tIce Heal\t3016\n17\tAwakening\t3017\n18\tParlyz Heal\t3018\n19\tFull Restore\t3019\n20\tMax Potion\t3020\n21\tHyper Potion\t3021\n22\tSuper Potion\t3022\n23\tFull Heal\t3023\n24\tRevive\t3024\n25\tMax Revive\t3025\n26\tFresh Water\t3026\n27\tSoda Pop\t3027\n28\tLemonade\t3028\n29\tMoomoo Milk\t3029\n30\tEnergyPowder\t3030\n31\tEnergy Root\t3031\n32\tHeal Powder\t3032\n33\tRevival Herb\t3033\n34\tEther\t3034\n35\tMax Ether\t3035\n36\tElixir\t3036\n37\tMax Elixir\t3037\n38\tLava Cookie\t3038\n39\tBlue Flute\t3039\n40\tYellow Flute\t3040\n41\tRed Flute\t3041\n42\tBlack Flute\t3042\n43\tWhite Flute\t3043\n44\tBerry Juice\t3044\n45\tSacred Ash\t3045\n46\tShoal Salt\t3046\n47\tShoal Shell\t3047\n48\tRed Shard\t3048\n49\tBlue Shard\t3049\n50\tYellow Shard\t3050\n51\tGreen Shard\t3051\n63\tHP Up\t3063\n64\tProtein\t3064\n65\tIron\t3065\n66\tCarbos\t3066\n67\tCalcium\t3067\n68\tRare Candy\t3068\n69\tPP Up\t3069\n70\tZinc\t3070\n71\tPP Max\t3071\n73\tGuard Spec.\t3073\n74\tDire Hit\t3074\n75\tX Attack\t3075\n76\tX Defend\t3076\n77\tX Speed\t3077\n78\tX Accuracy\t3078\n79\tX Special\t3079\n80\tPoké Doll\t3080\n81\tFluffy Tail\t3081\n83\tSuper Repel\t3083\n84\tMax Repel\t3084\n85\tEscape Rope\t3085\n86\tRepel\t3086\n93\tSun Stone\t3093\n94\tMoon Stone\t3094\n95\tFire Stone\t3095\n96\tThunder Stone\t3096\n97\tWater Stone\t3097\n98\tLeaf Stone\t3098\n103\tTinyMushroom\t3103\n104\tBig Mushroom\t3104\n106\tPearl\t3106\n107\tBig Pearl\t3107\n108\tStardust\t3108\n109\tStar Piece\t3109\n110\tNugget\t3110\n111\tHeart Scale\t3111\n121\tOrange Mail\t3121\n122\tHarbor Mail\t3122\n123\tGlitter Mail\t3123\n124\tMech Mail\t3124\n125\tWood Mail\t3125\n126\tWave Mail\t3126\n127\tBead Mail\t3127\n128\tShadow Mail\t3128\n129\tTropic Mail\t3129\n130\tDream Mail\t3130\n131\tFab Mail\t3131\n132\tRetro Mail\t3132\n133\tCheri Berry\t3133\n134\tChesto Berry\t3134\n135\tPecha Berry\t3135\n136\tRawst Berry\t3136\n137\tAspear Berry\t3137\n138\tLeppa Berry\t3138\n139\tOran Berry\t3139\n140\tPersim Berry\t3140\n141\tLum Berry\t3141\n142\tSitrus Berry\t3142\n143\tFigy Berry\t3143\n144\tWiki Berry\t3144\n145\tMago Berry\t3145\n146\tAguav Berry\t3146\n147\tIapapa Berry\t3147\n148\tRazz Berry\t3148\n149\tBluk Berry\t3149\n150\tNanab Berry\t3150\n151\tWepear Berry\t3151\n152\tPinap Berry\t3152\n153\tPomeg Berry\t3153\n154\tKelpsy Berry\t3154\n155\tQualot Berry\t3155\n156\tHondew Berry\t3156\n157\tGrepa Berry\t3157\n158\tTamato Berry\t3158\n159\tCornn Berry\t3159\n160\tMagost Berry\t3160\n161\tRabuta Berry\t3161\n162\tNomel Berry\t3162\n163\tSpelon Berry\t3163\n164\tPamtre Berry\t3164\n165\tWatmel Berry\t3165\n166\tDurin Berry\t3166\n167\tBelue Berry\t3167\n168\tLiechi Berry\t3168\n169\tGanlon Berry\t3169\n170\tSalac Berry\t3170\n171\tPetaya Berry\t3171\n172\tApicot Berry\t3172\n173\tLansat Berry\t3173\n174\tStarf Berry\t3174\n175\tEnigma Berry\t3175\n179\tBrightPowder\t3179\n180\tWhite Herb\t3180\n181\tMacho Brace\t3181\n182\tExp. Share\t3182\n183\tQuick Claw\t3183\n184\tSoothe Bell\t3184\n185\tMental Herb\t3185\n186\tChoice Band\t3186\n187\tKing's Rock\t3187\n188\tSilverPowder\t3188\n189\tAmulet Coin\t3189\n190\tCleanse Tag\t3190\n191\tSoul Dew\t3191\n192\tDeepSeaTooth\t3192\n193\tDeepSeaScale\t3193\n194\tSmoke Ball\t3194\n195\tEverstone\t3195\n196\tFocus Band\t3196\n197\tLucky Egg\t3197\n198\tScope Lens\t3198\n199\tMetal Coat\t3199\n200\tLeftovers\t3200\n201\tDragon Scale\t3201\n202\tLight Ball\t3202\n203\tSoft Sand\t3203\n204\tHard Stone\t3204\n205\tMiracle Seed\t3205\n206\tBlackGlasses\t3206\n207\tBlack Belt\t3207\n208\tMagnet\t3208\n209\tMystic Water\t3209\n210\tSharp Beak\t3210\n211\tPoison Barb\t3211\n212\tNeverMeltIce\t3212\n213\tSpell Tag\t3213\n214\tTwistedSpoon\t3214\n215\tCharcoal\t3215\n216\tDragon Fang\t3216\n217\tSilk Scarf\t3217\n218\tUp-Grade\t3218\n219\tShell Bell\t3219\n220\tSea Incense\t3220\n221\tLax Incense\t3221\n222\tLucky Punch\t3222\n223\tMetal Powder\t3223\n224\tThick Club\t3224\n225\tStick\t3225\n254\tRed Scarf\t3254\n255\tBlue Scarf\t3255\n256\tPink Scarf\t3256\n257\tGreen Scarf\t3257\n258\tYellow Scarf\t3258\n259\tMach Bike\t3259\n260\tCoin Case\t3260\n261\tItemfinder\t3261\n262\tOld Rod\t3262\n263\tGood Rod\t3263\n264\tSuper Rod\t3264\n265\tS.S. Ticket\t3265\n266\tContest Pass\t3266\n268\tWailmer Pail\t3268\n269\tDevon Goods\t3269\n270\tSoot Sack\t3270\n271\tBasement Key\t3271\n272\tAcro Bike\t3272\n273\tPokéblock Case\t3273\n274\tLetter\t3274\n275\tEon Ticket\t3275\n276\tRed Orb\t3276\n277\tBlue Orb\t3277\n278\tScanner\t3278\n279\tGo-Goggles\t3279\n280\tMeteorite\t3280\n281\tRm. 1 Key\t3281\n282\tRm. 2 Key\t3282\n283\tRm. 4 Key\t3283\n284\tRm. 6 Key\t3284\n285\tStorage Key\t3285\n286\tRoot Fossil\t3286\n287\tClaw Fossil\t3287\n288\tDevon Scope\t3288\n289\tTM01\t3289\n290\tTM02\t3290\n291\tTM03\t3291\n292\tTM04\t3292\n293\tTM05\t3293\n294\tTM06\t3294\n295\tTM07\t3295\n296\tTM08\t3296\n297\tTM09\t3297\n298\tTM10\t3298\n299\tTM11\t3299\n300\tTM12\t3300\n301\tTM13\t3301\n302\tTM14\t3302\n303\tTM15\t3303\n304\tTM16\t3304\n305\tTM17\t3305\n306\tTM18\t3306\n307\tTM19\t3307\n308\tTM20\t3308\n309\tTM21\t3309\n310\tTM22\t3310\n311\tTM23\t3311\n312\tTM24\t3312\n313\tTM25\t3313\n314\tTM26\t3314\n315\tTM27\t3315\n316\tTM28\t3316\n317\tTM29\t3317\n318\tTM30\t3318\n319\tTM31\t3319\n320\tTM32\t3320\n321\tTM33\t3321\n322\tTM34\t3322\n323\tTM35\t3323\n324\tTM36\t3324\n325\tTM37\t3325\n326\tTM38\t3326\n327\tTM39\t3327\n328\tTM40\t3328\n329\tTM41\t3329\n330\tTM42\t3330\n331\tTM43\t3331\n332\tTM44\t3332\n333\tTM45\t3333\n334\tTM46\t3334\n335\tTM47\t3335\n336\tTM48\t3336\n337\tTM49\t3337\n338\tTM50\t3338\n339\tHM01\t3339\n340\tHM02\t3340\n341\tHM03\t3341\n342\tHM04\t3342\n343\tHM05\t3343\n344\tHM06\t3344\n345\tHM07\t3345\n346\tHM08\t3346\n349\tOak's Parcel\t3349\n350\tPoké Flute\t3350\n351\tSecret Key\t3351\n352\tBike Voucher\t3352\n353\tGold Teeth\t3353\n354\tOld Amber\t3354\n355\tCard Key\t3355\n356\tLift Key\t3356\n357\tDome Fossil\t3357\n358\tHelix Fossil\t3358\n359\tSilph Scope\t3359\n360\tBicycle\t3360\n361\tTown Map\t3361\n362\tVs. Seeker\t3362\n363\tFame Checker\t3363\n364\tTM Case\t3364\n365\tBerry Pouch\t3365\n366\tTeachy TV\t3366\n367\tTri-Pass\t3367\n368\tRainbow Pass\t3368\n369\tTea\t3369\n370\tMysticTicket\t3370\n371\tAuroraTicket\t3371\n372\tPowder Jar\t3372\n373\tRuby\t3373\n374\tSapphire\t3374\n375\tMagma Emblem\t3375\n376\tOld Sea Map\t3376"
  },
  {
    "path": "VeekunImport/items4.txt",
    "content": "﻿1\tMaster Ball\t3001\n2\tUltra Ball\t3002\n3\tGreat Ball\t3003\n4\tPoké Ball\t3004\n5\tSafari Ball\t3005\n6\tNet Ball\t3006\n7\tDive Ball\t3007\n8\tNest Ball\t3008\n9\tRepeat Ball\t3009\n10\tTimer Ball\t3010\n11\tLuxury Ball\t3011\n12\tPremier Ball\t3012\n13\tDusk Ball\t4013\n14\tHeal Ball\t4014\n15\tQuick Ball\t4015\n16\tCherish Ball\t4016\n17\tPotion\t3013\n18\tAntidote\t3014\n19\tBurn Heal\t3015\n20\tIce Heal\t3016\n21\tAwakening\t3017\n22\tParlyz Heal\t3018\n23\tFull Restore\t3019\n24\tMax Potion\t3020\n25\tHyper Potion\t3021\n26\tSuper Potion\t3022\n27\tFull Heal\t3023\n28\tRevive\t3024\n29\tMax Revive\t3025\n30\tFresh Water\t3026\n31\tSoda Pop\t3027\n32\tLemonade\t3028\n33\tMoomoo Milk\t3029\n34\tEnergyPowder\t3030\n35\tEnergy Root\t3031\n36\tHeal Powder\t3032\n37\tRevival Herb\t3033\n38\tEther\t3034\n39\tMax Ether\t3035\n40\tElixir\t3036\n41\tMax Elixir\t3037\n42\tLava Cookie\t3038\n43\tBerry Juice\t3044\n44\tSacred Ash\t3045\n45\tHP Up\t3063\n46\tProtein\t3064\n47\tIron\t3065\n48\tCarbos\t3066\n49\tCalcium\t3067\n50\tRare Candy\t3068\n51\tPP Up\t3069\n52\tZinc\t3070\n53\tPP Max\t3071\n54\tOld Gateau\t4054\n55\tGuard Spec.\t3073\n56\tDire Hit\t3074\n57\tX Attack\t3075\n58\tX Defend\t3076\n59\tX Speed\t3077\n60\tX Accuracy\t3078\n61\tX Special\t3079\n62\tX Sp. Def\t4062\n63\tPoké Doll\t3080\n64\tFluffy Tail\t3081\n65\tBlue Flute\t3039\n66\tYellow Flute\t3040\n67\tRed Flute\t3041\n68\tBlack Flute\t3042\n69\tWhite Flute\t3043\n70\tShoal Salt\t3046\n71\tShoal Shell\t3047\n72\tRed Shard\t3048\n73\tBlue Shard\t3049\n74\tYellow Shard\t3050\n75\tGreen Shard\t3051\n76\tSuper Repel\t3083\n77\tMax Repel\t3084\n78\tEscape Rope\t3085\n79\tRepel\t3086\n80\tSun Stone\t3093\n81\tMoon Stone\t3094\n82\tFire Stone\t3095\n83\tThunderstone\t3096\n84\tWater Stone\t3097\n85\tLeaf Stone\t3098\n86\tTinyMushroom\t3103\n87\tBig Mushroom\t3104\n88\tPearl\t3106\n89\tBig Pearl\t3107\n90\tStardust\t3108\n91\tStar Piece\t3109\n92\tNugget\t3110\n93\tHeart Scale\t3111\n94\tHoney\t4094\n95\tGrowth Mulch\t4095\n96\tDamp Mulch\t4096\n97\tStable Mulch\t4097\n98\tGooey Mulch\t4098\n99\tRoot Fossil\t3286\n100\tClaw Fossil\t3287\n101\tHelix Fossil\t3358\n102\tDome Fossil\t3357\n103\tOld Amber\t3354\n104\tArmor Fossil\t4104\n105\tSkull Fossil\t4105\n106\tRare Bone\t4106\n107\tShiny Stone\t4107\n108\tDusk Stone\t4108\n109\tDawn Stone\t4109\n110\tOval Stone\t4110\n111\tOdd Keystone\t4111\n112\tGriseous Orb\t4112\n135\tAdamant Orb\t4135\n136\tLustrous Orb\t4136\n137\tGrass Mail\t4137\n138\tFlame Mail\t4138\n139\tBubble Mail\t4139\n140\tBloom Mail\t4140\n141\tTunnel Mail\t4141\n142\tSteel Mail\t4142\n143\tHeart Mail\t4143\n144\tSnow Mail\t4144\n145\tSpace Mail\t4145\n146\tAir Mail\t4146\n147\tMosaic Mail\t4147\n148\tBrick Mail\t4148\n149\tCheri Berry\t3133\n150\tChesto Berry\t3134\n151\tPecha Berry\t3135\n152\tRawst Berry\t3136\n153\tAspear Berry\t3137\n154\tLeppa Berry\t3138\n155\tOran Berry\t3139\n156\tPersim Berry\t3140\n157\tLum Berry\t3141\n158\tSitrus Berry\t3142\n159\tFigy Berry\t3143\n160\tWiki Berry\t3144\n161\tMago Berry\t3145\n162\tAguav Berry\t3146\n163\tIapapa Berry\t3147\n164\tRazz Berry\t3148\n165\tBluk Berry\t3149\n166\tNanab Berry\t3150\n167\tWepear Berry\t3151\n168\tPinap Berry\t3152\n169\tPomeg Berry\t3153\n170\tKelpsy Berry\t3154\n171\tQualot Berry\t3155\n172\tHondew Berry\t3156\n173\tGrepa Berry\t3157\n174\tTamato Berry\t3158\n175\tCornn Berry\t3159\n176\tMagost Berry\t3160\n177\tRabuta Berry\t3161\n178\tNomel Berry\t3162\n179\tSpelon Berry\t3163\n180\tPamtre Berry\t3164\n181\tWatmel Berry\t3165\n182\tDurin Berry\t3166\n183\tBelue Berry\t3167\n184\tOcca Berry\t4184\n185\tPassho Berry\t4185\n186\tWacan Berry\t4186\n187\tRindo Berry\t4187\n188\tYache Berry\t4188\n189\tChople Berry\t4189\n190\tKebia Berry\t4190\n191\tShuca Berry\t4191\n192\tCoba Berry\t4192\n193\tPayapa Berry\t4193\n194\tTanga Berry\t4194\n195\tCharti Berry\t4195\n196\tKasib Berry\t4196\n197\tHaban Berry\t4197\n198\tColbur Berry\t4198\n199\tBabiri Berry\t4199\n200\tChilan Berry\t4200\n201\tLiechi Berry\t3168\n202\tGanlon Berry\t3169\n203\tSalac Berry\t3170\n204\tPetaya Berry\t3171\n205\tApicot Berry\t3172\n206\tLansat Berry\t3173\n207\tStarf Berry\t3174\n208\tEnigma Berry\t3175\n209\tMicle Berry\t4209\n210\tCustap Berry\t4210\n211\tJaboca Berry\t4211\n212\tRowap Berry\t4212\n213\tBrightPowder\t3179\n214\tWhite Herb\t3180\n215\tMacho Brace\t3181\n216\tExp. Share\t3182\n217\tQuick Claw\t3183\n218\tSoothe Bell\t3184\n219\tMental Herb\t3185\n220\tChoice Band\t3186\n221\tKing’s Rock\t3187\n222\tSilverPowder\t3188\n223\tAmulet Coin\t3189\n224\tCleanse Tag\t3190\n225\tSoul Dew\t3191\n226\tDeepSeaTooth\t3192\n227\tDeepSeaScale\t3193\n228\tSmoke Ball\t3194\n229\tEverstone\t3195\n230\tFocus Band\t3196\n231\tLucky Egg\t3197\n232\tScope Lens\t3198\n233\tMetal Coat\t3199\n234\tLeftovers\t3200\n235\tDragon Scale\t3201\n236\tLight Ball\t3202\n237\tSoft Sand\t3203\n238\tHard Stone\t3204\n239\tMiracle Seed\t3205\n240\tBlackGlasses\t3206\n241\tBlack Belt\t3207\n242\tMagnet\t3208\n243\tMystic Water\t3209\n244\tSharp Beak\t3210\n245\tPoison Barb\t3211\n246\tNeverMeltIce\t3212\n247\tSpell Tag\t3213\n248\tTwistedSpoon\t3214\n249\tCharcoal\t3215\n250\tDragon Fang\t3216\n251\tSilk Scarf\t3217\n252\tUp-Grade\t3218\n253\tShell Bell\t3219\n254\tSea Incense\t3220\n255\tLax Incense\t3221\n256\tLucky Punch\t3222\n257\tMetal Powder\t3223\n258\tThick Club\t3224\n259\tStick\t3225\n260\tRed Scarf\t3254\n261\tBlue Scarf\t3255\n262\tPink Scarf\t3256\n263\tGreen Scarf\t3257\n264\tYellow Scarf\t3258\n265\tWide Lens\t4265\n266\tMuscle Band\t4266\n267\tWise Glasses\t4267\n268\tExpert Belt\t4268\n269\tLight Clay\t4269\n270\tLife Orb\t4270\n271\tPower Herb\t4271\n272\tToxic Orb\t4272\n273\tFlame Orb\t4273\n274\tQuick Powder\t4274\n275\tFocus Sash\t4275\n276\tZoom Lens\t4276\n277\tMetronome\t4277\n278\tIron Ball\t4278\n279\tLagging Tail\t4279\n280\tDestiny Knot\t4280\n281\tBlack Sludge\t4281\n282\tIcy Rock\t4282\n283\tSmooth Rock\t4283\n284\tHeat Rock\t4284\n285\tDamp Rock\t4285\n286\tGrip Claw\t4286\n287\tChoice Scarf\t4287\n288\tSticky Barb\t4288\n289\tPower Bracer\t4289\n290\tPower Belt\t4290\n291\tPower Lens\t4291\n292\tPower Band\t4292\n293\tPower Anklet\t4293\n294\tPower Weight\t4294\n295\tShed Shell\t4295\n296\tBig Root\t4296\n297\tChoice Specs\t4297\n298\tFlame Plate\t4298\n299\tSplash Plate\t4299\n300\tZap Plate\t4300\n301\tMeadow Plate\t4301\n302\tIcicle Plate\t4302\n303\tFist Plate\t4303\n304\tToxic Plate\t4304\n305\tEarth Plate\t4305\n306\tSky Plate\t4306\n307\tMind Plate\t4307\n308\tInsect Plate\t4308\n309\tStone Plate\t4309\n310\tSpooky Plate\t4310\n311\tDraco Plate\t4311\n312\tDread Plate\t4312\n313\tIron Plate\t4313\n314\tOdd Incense\t4314\n315\tRock Incense\t4315\n316\tFull Incense\t4316\n317\tWave Incense\t4317\n318\tRose Incense\t4318\n319\tLuck Incense\t4319\n320\tPure Incense\t4320\n321\tProtector\t4321\n322\tElectirizer\t4322\n323\tMagmarizer\t4323\n324\tDubious Disc\t4324\n325\tReaper Cloth\t4325\n326\tRazor Claw\t4326\n327\tRazor Fang\t4327\n328\tTM01\t3289\n329\tTM02\t3290\n330\tTM03\t3291\n331\tTM04\t3292\n332\tTM05\t3293\n333\tTM06\t3294\n334\tTM07\t3295\n335\tTM08\t3296\n336\tTM09\t3297\n337\tTM10\t3298\n338\tTM11\t3299\n339\tTM12\t3300\n340\tTM13\t3301\n341\tTM14\t3302\n342\tTM15\t3303\n343\tTM16\t3304\n344\tTM17\t3305\n345\tTM18\t3306\n346\tTM19\t3307\n347\tTM20\t3308\n348\tTM21\t3309\n349\tTM22\t3310\n350\tTM23\t3311\n351\tTM24\t3312\n352\tTM25\t3313\n353\tTM26\t3314\n354\tTM27\t3315\n355\tTM28\t3316\n356\tTM29\t3317\n357\tTM30\t3318\n358\tTM31\t3319\n359\tTM32\t3320\n360\tTM33\t3321\n361\tTM34\t3322\n362\tTM35\t3323\n363\tTM36\t3324\n364\tTM37\t3325\n365\tTM38\t3326\n366\tTM39\t3327\n367\tTM40\t3328\n368\tTM41\t3329\n369\tTM42\t3330\n370\tTM43\t3331\n371\tTM44\t3332\n372\tTM45\t3333\n373\tTM46\t3334\n374\tTM47\t3335\n375\tTM48\t3336\n376\tTM49\t3337\n377\tTM50\t3338\n378\tTM51\t4378\n379\tTM52\t4379\n380\tTM53\t4380\n381\tTM54\t4381\n382\tTM55\t4382\n383\tTM56\t4383\n384\tTM57\t4384\n385\tTM58\t4385\n386\tTM59\t4386\n387\tTM60\t4387\n388\tTM61\t4388\n389\tTM62\t4389\n390\tTM63\t4390\n391\tTM64\t4391\n392\tTM65\t4392\n393\tTM66\t4393\n394\tTM67\t4394\n395\tTM68\t4395\n396\tTM69\t4396\n397\tTM70\t4397\n398\tTM71\t4398\n399\tTM72\t4399\n400\tTM73\t4400\n401\tTM74\t4401\n402\tTM75\t4402\n403\tTM76\t4403\n404\tTM77\t4404\n405\tTM78\t4405\n406\tTM79\t4406\n407\tTM80\t4407\n408\tTM81\t4408\n409\tTM82\t4409\n410\tTM83\t4410\n411\tTM84\t4411\n412\tTM85\t4412\n413\tTM86\t4413\n414\tTM87\t4414\n415\tTM88\t4415\n416\tTM89\t4416\n417\tTM90\t4417\n418\tTM91\t4418\n419\tTM92\t4419\n420\tHM01\t3339\n421\tHM02\t3340\n422\tHM03\t3341\n423\tHM04\t3342\n424\tHM05\t3343\n425\tHM06\t3344\n426\tHM07\t3345\n427\tHM08\t3346\n428\tExplorer Kit\t4428\n429\tLoot Sack\t4429\n430\tRule Book\t4430\n431\tPoké Radar\t4431\n432\tPoint Card\t4432\n433\tJournal\t4433\n434\tSeal Case\t4434\n435\tFashion Case\t4435\n436\tSeal Bag\t4436\n437\tPal Pad\t4437\n438\tWorks Key\t4438\n439\tOld Charm\t4439\n440\tGalactic Key\t4440\n441\tRed Chain\t4441\n442\tTown Map\t3361\n443\tVs. Seeker\t3362\n444\tCoin Case\t3260\n445\tOld Rod\t3262\n446\tGood Rod\t3263\n447\tSuper Rod\t3264\n448\tSprayduck\t4448\n449\tPoffin Case\t4449\n450\tBicycle\t3360\n451\tSuite Key\t4451\n452\tOak’s Letter\t4452\n453\tLunar Wing\t4453\n454\tMember Card\t4454\n455\tAzure Flute\t4455\n456\tS.S. Ticket\t3265\n457\tContest Pass\t3266\n458\tMagma Stone\t4458\n459\tParcel\t4459\n460\tCoupon 1\t4460\n461\tCoupon 2\t4461\n462\tCoupon 3\t4462\n463\tStorage Key\t4463\n464\tSecretPotion\t4464\n465\tVs. Recorder\t4465\n466\tGracidea\t4466\n467\tSecret Key\t4467\n468\tApricorn Box\t4468\n469\tUNOWN Report\t4469\n470\tBerry Pots\t4470\n471\tDowsing MCHN\t4471\n472\tBlue Card\t4472\n473\tSlowpokeTail\t4473\n474\tClear Bell\t4474\n475\tCard Key\t4475\n476\tBasement Key\t4476\n477\tSquirtBottle\t4477\n478\tRed Scale\t4478\n479\tLost Item\t4479\n480\tPass\t4480\n481\tMachine Part\t4481\n482\tSilver Wing\t4482\n483\tRainbow Wing\t4483\n484\tMystery Egg\t4484\n485\tRed Apricorn\t4485\n486\tYlw Apricorn\t4486\n487\tBlu Apricorn\t4487\n488\tGrn Apricorn\t4488\n489\tPnk Apricorn\t4489\n490\tWht Apricorn\t4490\n491\tBlk Apricorn\t4491\n492\tFast Ball\t4492\n493\tLevel Ball\t4493\n494\tLure Ball\t4494\n495\tHeavy Ball\t4495\n496\tLove Ball\t4496\n497\tFriend Ball\t4497\n498\tMoon Ball\t4498\n499\tSport Ball\t4499\n500\tPark Ball\t4500\n501\tPhoto Album\t4501\n502\tGB Sounds\t4502\n503\tTidal Bell\t4503\n504\tRageCandyBar\t4504\n505\tData Card 01\t4505\n506\tData Card 02\t4506\n507\tData Card 03\t4507\n508\tData Card 04\t4508\n509\tData Card 05\t4509\n510\tData Card 06\t4510\n511\tData Card 07\t4511\n512\tData Card 08\t4512\n513\tData Card 09\t4513\n514\tData Card 10\t4514\n515\tData Card 11\t4515\n516\tData Card 12\t4516\n517\tData Card 13\t4517\n518\tData Card 14\t4518\n519\tData Card 15\t4519\n520\tData Card 16\t4520\n521\tData Card 17\t4521\n522\tData Card 18\t4522\n523\tData Card 19\t4523\n524\tData Card 20\t4524\n525\tData Card 21\t4525\n526\tData Card 22\t4526\n527\tData Card 23\t4527\n528\tData Card 24\t4528\n529\tData Card 25\t4529\n530\tData Card 26\t4530\n531\tData Card 27\t4531\n532\tJade Orb\t4532\n533\tLock Capsule\t4533\n534\tRed Orb\t3276\n535\tBlue Orb\t3277\n536\tEnigma Stone\t4536"
  },
  {
    "path": "VeekunImport/items5.txt",
    "content": "1\tMaster Ball\t3001\n2\tUltra Ball\t3002\n3\tGreat Ball\t3003\n4\tPoké Ball\t3004\n5\tSafari Ball\t3005\n6\tNet Ball\t3006\n7\tDive Ball\t3007\n8\tNest Ball\t3008\n9\tRepeat Ball\t3009\n10\tTimer Ball\t3010\n11\tLuxury Ball\t3011\n12\tPremier Ball\t3012\n13\tDusk Ball\t4013\n14\tHeal Ball\t4014\n15\tQuick Ball\t4015\n16\tCherish Ball\t4016\n17\tPotion\t3013\n18\tAntidote\t3014\n19\tBurn Heal\t3015\n20\tIce Heal\t3016\n21\tAwakening\t3017\n22\tParlyz Heal\t3018\n23\tFull Restore\t3019\n24\tMax Potion\t3020\n25\tHyper Potion\t3021\n26\tSuper Potion\t3022\n27\tFull Heal\t3023\n28\tRevive\t3024\n29\tMax Revive\t3025\n30\tFresh Water\t3026\n31\tSoda Pop\t3027\n32\tLemonade\t3028\n33\tMoomoo Milk\t3029\n34\tEnergyPowder\t3030\n35\tEnergy Root\t3031\n36\tHeal Powder\t3032\n37\tRevival Herb\t3033\n38\tEther\t3034\n39\tMax Ether\t3035\n40\tElixir\t3036\n41\tMax Elixir\t3037\n42\tLava Cookie\t3038\n43\tBerry Juice\t3044\n44\tSacred Ash\t3045\n45\tHP Up\t3063\n46\tProtein\t3064\n47\tIron\t3065\n48\tCarbos\t3066\n49\tCalcium\t3067\n50\tRare Candy\t3068\n51\tPP Up\t3069\n52\tZinc\t3070\n53\tPP Max\t3071\n54\tOld Gateau\t4054\n55\tGuard Spec.\t3073\n56\tDire Hit\t3074\n57\tX Attack\t3075\n58\tX Defend\t3076\n59\tX Speed\t3077\n60\tX Accuracy\t3078\n61\tX Special\t3079\n62\tX Sp. Def\t4062\n63\tPoké Doll\t3080\n64\tFluffy Tail\t3081\n65\tBlue Flute\t3039\n66\tYellow Flute\t3040\n67\tRed Flute\t3041\n68\tBlack Flute\t3042\n69\tWhite Flute\t3043\n70\tShoal Salt\t3046\n71\tShoal Shell\t3047\n72\tRed Shard\t3048\n73\tBlue Shard\t3049\n74\tYellow Shard\t3050\n75\tGreen Shard\t3051\n76\tSuper Repel\t3083\n77\tMax Repel\t3084\n78\tEscape Rope\t3085\n79\tRepel\t3086\n80\tSun Stone\t3093\n81\tMoon Stone\t3094\n82\tFire Stone\t3095\n83\tThunderstone\t3096\n84\tWater Stone\t3097\n85\tLeaf Stone\t3098\n86\tTinyMushroom\t3103\n87\tBig Mushroom\t3104\n88\tPearl\t3106\n89\tBig Pearl\t3107\n90\tStardust\t3108\n91\tStar Piece\t3109\n92\tNugget\t3110\n93\tHeart Scale\t3111\n94\tHoney\t4094\n95\tGrowth Mulch\t4095\n96\tDamp Mulch\t4096\n97\tStable Mulch\t4097\n98\tGooey Mulch\t4098\n99\tRoot Fossil\t3286\n100\tClaw Fossil\t3287\n101\tHelix Fossil\t3358\n102\tDome Fossil\t3357\n103\tOld Amber\t3354\n104\tArmor Fossil\t4104\n105\tSkull Fossil\t4105\n106\tRare Bone\t4106\n107\tShiny Stone\t4107\n108\tDusk Stone\t4108\n109\tDawn Stone\t4109\n110\tOval Stone\t4110\n111\tOdd Keystone\t4111\n112\tGriseous Orb\t4112\n116\tDouse Drive\t5116\n117\tShock Drive\t5117\n118\tBurn Drive\t5118\n119\tChill Drive\t5119\n134\tSweet Heart\t5134\n135\tAdamant Orb\t4135\n136\tLustrous Orb\t4136\n137\tGreet Mail\t5137\n138\tFavored Mail\t5138\n139\tRSVP Mail\t5139\n140\tThanks Mail\t5140\n141\tInquiry Mail\t5141\n142\tLike Mail\t5142\n143\tReply Mail\t5143\n144\tBridgeMail S\t5144\n145\tBridgeMail D\t5145\n146\tBridgeMail T\t5146\n147\tBridgeMail V\t5147\n148\tBridgeMail M\t5148\n149\tCheri Berry\t3133\n150\tChesto Berry\t3134\n151\tPecha Berry\t3135\n152\tRawst Berry\t3136\n153\tAspear Berry\t3137\n154\tLeppa Berry\t3138\n155\tOran Berry\t3139\n156\tPersim Berry\t3140\n157\tLum Berry\t3141\n158\tSitrus Berry\t3142\n159\tFigy Berry\t3143\n160\tWiki Berry\t3144\n161\tMago Berry\t3145\n162\tAguav Berry\t3146\n163\tIapapa Berry\t3147\n164\tRazz Berry\t3148\n165\tBluk Berry\t3149\n166\tNanab Berry\t3150\n167\tWepear Berry\t3151\n168\tPinap Berry\t3152\n169\tPomeg Berry\t3153\n170\tKelpsy Berry\t3154\n171\tQualot Berry\t3155\n172\tHondew Berry\t3156\n173\tGrepa Berry\t3157\n174\tTamato Berry\t3158\n175\tCornn Berry\t3159\n176\tMagost Berry\t3160\n177\tRabuta Berry\t3161\n178\tNomel Berry\t3162\n179\tSpelon Berry\t3163\n180\tPamtre Berry\t3164\n181\tWatmel Berry\t3165\n182\tDurin Berry\t3166\n183\tBelue Berry\t3167\n184\tOcca Berry\t4184\n185\tPassho Berry\t4185\n186\tWacan Berry\t4186\n187\tRindo Berry\t4187\n188\tYache Berry\t4188\n189\tChople Berry\t4189\n190\tKebia Berry\t4190\n191\tShuca Berry\t4191\n192\tCoba Berry\t4192\n193\tPayapa Berry\t4193\n194\tTanga Berry\t4194\n195\tCharti Berry\t4195\n196\tKasib Berry\t4196\n197\tHaban Berry\t4197\n198\tColbur Berry\t4198\n199\tBabiri Berry\t4199\n200\tChilan Berry\t4200\n201\tLiechi Berry\t3168\n202\tGanlon Berry\t3169\n203\tSalac Berry\t3170\n204\tPetaya Berry\t3171\n205\tApicot Berry\t3172\n206\tLansat Berry\t3173\n207\tStarf Berry\t3174\n208\tEnigma Berry\t3175\n209\tMicle Berry\t4209\n210\tCustap Berry\t4210\n211\tJaboca Berry\t4211\n212\tRowap Berry\t4212\n213\tBrightPowder\t3179\n214\tWhite Herb\t3180\n215\tMacho Brace\t3181\n216\tExp. Share\t3182\n217\tQuick Claw\t3183\n218\tSoothe Bell\t3184\n219\tMental Herb\t3185\n220\tChoice Band\t3186\n221\tKing’s Rock\t3187\n222\tSilverPowder\t3188\n223\tAmulet Coin\t3189\n224\tCleanse Tag\t3190\n225\tSoul Dew\t3191\n226\tDeepSeaTooth\t3192\n227\tDeepSeaScale\t3193\n228\tSmoke Ball\t3194\n229\tEverstone\t3195\n230\tFocus Band\t3196\n231\tLucky Egg\t3197\n232\tScope Lens\t3198\n233\tMetal Coat\t3199\n234\tLeftovers\t3200\n235\tDragon Scale\t3201\n236\tLight Ball\t3202\n237\tSoft Sand\t3203\n238\tHard Stone\t3204\n239\tMiracle Seed\t3205\n240\tBlackGlasses\t3206\n241\tBlack Belt\t3207\n242\tMagnet\t3208\n243\tMystic Water\t3209\n244\tSharp Beak\t3210\n245\tPoison Barb\t3211\n246\tNeverMeltIce\t3212\n247\tSpell Tag\t3213\n248\tTwistedSpoon\t3214\n249\tCharcoal\t3215\n250\tDragon Fang\t3216\n251\tSilk Scarf\t3217\n252\tUp-Grade\t3218\n253\tShell Bell\t3219\n254\tSea Incense\t3220\n255\tLax Incense\t3221\n256\tLucky Punch\t3222\n257\tMetal Powder\t3223\n258\tThick Club\t3224\n259\tStick\t3225\n260\tRed Scarf\t3254\n261\tBlue Scarf\t3255\n262\tPink Scarf\t3256\n263\tGreen Scarf\t3257\n264\tYellow Scarf\t3258\n265\tWide Lens\t4265\n266\tMuscle Band\t4266\n267\tWise Glasses\t4267\n268\tExpert Belt\t4268\n269\tLight Clay\t4269\n270\tLife Orb\t4270\n271\tPower Herb\t4271\n272\tToxic Orb\t4272\n273\tFlame Orb\t4273\n274\tQuick Powder\t4274\n275\tFocus Sash\t4275\n276\tZoom Lens\t4276\n277\tMetronome\t4277\n278\tIron Ball\t4278\n279\tLagging Tail\t4279\n280\tDestiny Knot\t4280\n281\tBlack Sludge\t4281\n282\tIcy Rock\t4282\n283\tSmooth Rock\t4283\n284\tHeat Rock\t4284\n285\tDamp Rock\t4285\n286\tGrip Claw\t4286\n287\tChoice Scarf\t4287\n288\tSticky Barb\t4288\n289\tPower Bracer\t4289\n290\tPower Belt\t4290\n291\tPower Lens\t4291\n292\tPower Band\t4292\n293\tPower Anklet\t4293\n294\tPower Weight\t4294\n295\tShed Shell\t4295\n296\tBig Root\t4296\n297\tChoice Specs\t4297\n298\tFlame Plate\t4298\n299\tSplash Plate\t4299\n300\tZap Plate\t4300\n301\tMeadow Plate\t4301\n302\tIcicle Plate\t4302\n303\tFist Plate\t4303\n304\tToxic Plate\t4304\n305\tEarth Plate\t4305\n306\tSky Plate\t4306\n307\tMind Plate\t4307\n308\tInsect Plate\t4308\n309\tStone Plate\t4309\n310\tSpooky Plate\t4310\n311\tDraco Plate\t4311\n312\tDread Plate\t4312\n313\tIron Plate\t4313\n314\tOdd Incense\t4314\n315\tRock Incense\t4315\n316\tFull Incense\t4316\n317\tWave Incense\t4317\n318\tRose Incense\t4318\n319\tLuck Incense\t4319\n320\tPure Incense\t4320\n321\tProtector\t4321\n322\tElectirizer\t4322\n323\tMagmarizer\t4323\n324\tDubious Disc\t4324\n325\tReaper Cloth\t4325\n326\tRazor Claw\t4326\n327\tRazor Fang\t4327\n328\tTM01\t3289\n329\tTM02\t3290\n330\tTM03\t3291\n331\tTM04\t3292\n332\tTM05\t3293\n333\tTM06\t3294\n334\tTM07\t3295\n335\tTM08\t3296\n336\tTM09\t3297\n337\tTM10\t3298\n338\tTM11\t3299\n339\tTM12\t3300\n340\tTM13\t3301\n341\tTM14\t3302\n342\tTM15\t3303\n343\tTM16\t3304\n344\tTM17\t3305\n345\tTM18\t3306\n346\tTM19\t3307\n347\tTM20\t3308\n348\tTM21\t3309\n349\tTM22\t3310\n350\tTM23\t3311\n351\tTM24\t3312\n352\tTM25\t3313\n353\tTM26\t3314\n354\tTM27\t3315\n355\tTM28\t3316\n356\tTM29\t3317\n357\tTM30\t3318\n358\tTM31\t3319\n359\tTM32\t3320\n360\tTM33\t3321\n361\tTM34\t3322\n362\tTM35\t3323\n363\tTM36\t3324\n364\tTM37\t3325\n365\tTM38\t3326\n366\tTM39\t3327\n367\tTM40\t3328\n368\tTM41\t3329\n369\tTM42\t3330\n370\tTM43\t3331\n371\tTM44\t3332\n372\tTM45\t3333\n373\tTM46\t3334\n374\tTM47\t3335\n375\tTM48\t3336\n376\tTM49\t3337\n377\tTM50\t3338\n378\tTM51\t4378\n379\tTM52\t4379\n380\tTM53\t4380\n381\tTM54\t4381\n382\tTM55\t4382\n383\tTM56\t4383\n384\tTM57\t4384\n385\tTM58\t4385\n386\tTM59\t4386\n387\tTM60\t4387\n388\tTM61\t4388\n389\tTM62\t4389\n390\tTM63\t4390\n391\tTM64\t4391\n392\tTM65\t4392\n393\tTM66\t4393\n394\tTM67\t4394\n395\tTM68\t4395\n396\tTM69\t4396\n397\tTM70\t4397\n398\tTM71\t4398\n399\tTM72\t4399\n400\tTM73\t4400\n401\tTM74\t4401\n402\tTM75\t4402\n403\tTM76\t4403\n404\tTM77\t4404\n405\tTM78\t4405\n406\tTM79\t4406\n407\tTM80\t4407\n408\tTM81\t4408\n409\tTM82\t4409\n410\tTM83\t4410\n411\tTM84\t4411\n412\tTM85\t4412\n413\tTM86\t4413\n414\tTM87\t4414\n415\tTM88\t4415\n416\tTM89\t4416\n417\tTM90\t4417\n418\tTM91\t4418\n419\tTM92\t4419\n420\tHM01\t3339\n421\tHM02\t3340\n422\tHM03\t3341\n423\tHM04\t3342\n424\tHM05\t3343\n425\tHM06\t3344\n428\tExplorer Kit\t4428\n429\tLoot Sack\t4429\n430\tRule Book\t4430\n431\tPoké Radar\t4431\n432\tPoint Card\t4432\n433\tJournal\t4433\n434\tSeal Case\t4434\n435\tFashion Case\t4435\n436\tSeal Bag\t4436\n437\tPal Pad\t4437\n438\tWorks Key\t4438\n439\tOld Charm\t4439\n440\tGalactic Key\t4440\n441\tRed Chain\t4441\n442\tTown Map\t3361\n443\tVs. Seeker\t3362\n444\tCoin Case\t3260\n445\tOld Rod\t3262\n446\tGood Rod\t3263\n447\tSuper Rod\t3264\n448\tSprayduck\t4448\n449\tPoffin Case\t4449\n450\tBicycle\t3360\n451\tSuite Key\t4451\n452\tOak’s Letter\t4452\n453\tLunar Wing\t4453\n454\tMember Card\t4454\n455\tAzure Flute\t4455\n456\tS.S. Ticket\t3265\n457\tContest Pass\t3266\n458\tMagma Stone\t4458\n459\tParcel\t4459\n460\tCoupon 1\t4460\n461\tCoupon 2\t4461\n462\tCoupon 3\t4462\n463\tStorage Key\t4463\n464\tSecretPotion\t4464\n465\tVs. Recorder\t4465\n466\tGracidea\t4466\n467\tSecret Key\t4467\n468\tApricorn Box\t4468\n469\tUNOWN Report\t4469\n470\tBerry Pots\t4470\n471\tDowsing MCHN\t4471\n472\tBlue Card\t4472\n473\tSlowpokeTail\t4473\n474\tClear Bell\t4474\n475\tCard Key\t4475\n476\tBasement Key\t4476\n477\tSquirtBottle\t4477\n478\tRed Scale\t4478\n479\tLost Item\t4479\n480\tPass\t4480\n481\tMachine Part\t4481\n482\tSilver Wing\t4482\n483\tRainbow Wing\t4483\n484\tMystery Egg\t4484\n485\tRed Apricorn\t4485\n486\tYlw Apricorn\t4486\n487\tBlu Apricorn\t4487\n488\tGrn Apricorn\t4488\n489\tPnk Apricorn\t4489\n490\tWht Apricorn\t4490\n491\tBlk Apricorn\t4491\n492\tFast Ball\t4492\n493\tLevel Ball\t4493\n494\tLure Ball\t4494\n495\tHeavy Ball\t4495\n496\tLove Ball\t4496\n497\tFriend Ball\t4497\n498\tMoon Ball\t4498\n499\tSport Ball\t4499\n500\tPark Ball\t4500\n501\tPhoto Album\t4501\n502\tGB Sounds\t4502\n503\tTidal Bell\t4503\n504\tRageCandyBar\t4504\n505\tData Card 01\t4505\n506\tData Card 02\t4506\n507\tData Card 03\t4507\n508\tData Card 04\t4508\n509\tData Card 05\t4509\n510\tData Card 06\t4510\n511\tData Card 07\t4511\n512\tData Card 08\t4512\n513\tData Card 09\t4513\n514\tData Card 10\t4514\n515\tData Card 11\t4515\n516\tData Card 12\t4516\n517\tData Card 13\t4517\n518\tData Card 14\t4518\n519\tData Card 15\t4519\n520\tData Card 16\t4520\n521\tData Card 17\t4521\n522\tData Card 18\t4522\n523\tData Card 19\t4523\n524\tData Card 20\t4524\n525\tData Card 21\t4525\n526\tData Card 22\t4526\n527\tData Card 23\t4527\n528\tData Card 24\t4528\n529\tData Card 25\t4529\n530\tData Card 26\t4530\n531\tData Card 27\t4531\n532\tJade Orb\t4532\n533\tLock Capsule\t4533\n534\tRed Orb\t3276\n535\tBlue Orb\t3277\n536\tEnigma Stone\t4536\n537\tPrism Scale\t5537\n538\tEviolite\t5538\n539\tFloat Stone\t5539\n540\tRocky Helmet\t5540\n541\tAir Balloon\t5541\n542\tRed Card\t5542\n543\tRing Target\t5543\n544\tBinding Band\t5544\n545\tAbsorb Bulb\t5545\n546\tCell Battery\t5546\n547\tEject Button\t5547\n548\tFire Gem\t5548\n549\tWater Gem\t5549\n550\tElectric Gem\t5550\n551\tGrass Gem\t5551\n552\tIce Gem\t5552\n553\tFighting Gem\t5553\n554\tPoison Gem\t5554\n555\tGround Gem\t5555\n556\tFlying Gem\t5556\n557\tPsychic Gem\t5557\n558\tBug Gem\t5558\n559\tRock Gem\t5559\n560\tGhost Gem\t5560\n561\tDragon Gem\t5561\n562\tDark Gem\t5562\n563\tSteel Gem\t5563\n564\tNormal Gem\t5564\n565\tHealth Wing\t5565\n566\tMuscle Wing\t5566\n567\tResist Wing\t5567\n568\tGenius Wing\t5568\n569\tClever Wing\t5569\n570\tSwift Wing\t5570\n571\tPretty Wing\t5571\n572\tCover Fossil\t5572\n573\tPlume Fossil\t5573\n574\tLiberty Pass\t5574\n575\tPass Orb\t5575\n576\tDream Ball\t5576\n577\tPoké Toy\t5577\n578\tProp Case\t5578\n579\tDragon Skull\t5579\n580\tBalmMushroom\t5580\n581\tBig Nugget\t5581\n582\tPearl String\t5582\n583\tComet Shard\t5583\n584\tRelic Copper\t5584\n585\tRelic Silver\t5585\n586\tRelic Gold\t5586\n587\tRelic Vase\t5587\n588\tRelic Band\t5588\n589\tRelic Statue\t5589\n590\tRelic Crown\t5590\n591\tCasteliacone\t5591\n592\tDire Hit 2\t5592\n593\tX Speed 2\t5593\n594\tX Special 2\t5594\n595\tX Sp. Def 2\t5595\n596\tX Defend 2\t5596\n597\tX Attack 2\t5597\n598\tX Accuracy 2\t5598\n599\tX Speed 3\t5599\n600\tX Special 3\t5600\n601\tX Sp. Def 3\t5601\n602\tX Defend 3\t5602\n603\tX Attack 3\t5603\n604\tX Accuracy 3\t5604\n605\tX Speed 6\t5605\n606\tX Special 6\t5606\n607\tX Sp. Def 6\t5607\n608\tX Defend 6\t5608\n609\tX Attack 6\t5609\n610\tX Accuracy 6\t5610\n611\tAbility Urge\t5611\n612\tItem Drop\t5612\n613\tItem Urge\t5613\n614\tReset Urge\t5614\n615\tDire Hit 3\t5615\n616\tLight Stone\t5616\n617\tDark Stone\t5617\n618\tTM93\t5618\n619\tTM94\t5619\n620\tTM95\t5620\n621\tXtransceiver\t5621\n622\tGod Stone\t5622\n623\tGram 1\t5623\n624\tGram 2\t5624\n625\tGram 3\t5625\n626\tXtransceiver\t5626\n627\tMedal Box\t5627\n628\tDNA Splicers\t5628\n629\tDNA Splicers\t5629\n630\tPermit\t5630\n631\tOval Charm\t5631\n632\tShiny Charm\t5632\n633\tPlasma Card\t5633\n634\tGrubby Hanky\t5634\n635\tColress MCHN\t5635\n636\tDropped Item\t5636\n637\tDropped Item\t5637\n638\tReveal Glass\t5638"
  },
  {
    "path": "VeekunImport/items_balls.txt",
    "content": "﻿1\tMaster Ball\t3001\n2\tUltra Ball\t3002\n3\tGreat Ball\t3003\n4\tPoké Ball\t3004\n5\tSafari Ball\t3005\n6\tNet Ball\t3006\n7\tDive Ball\t3007\n8\tNest Ball\t3008\n9\tRepeat Ball\t3009\n10\tTimer Ball\t3010\n11\tLuxury Ball\t3011\n12\tPremier Ball\t3012\n13\tDusk Ball\t4013\n14\tHeal Ball\t4014\n15\tQuick Ball\t4015\n16\tCherish Ball\t4016\n17\tFast Ball\t4492\n18\tLevel Ball\t4493\n19\tLure Ball\t4494\n20\tHeavy Ball\t4495\n21\tLove Ball\t4496\n22\tFriend Ball\t4497\n23\tMoon Ball\t4498\n24\tSport Ball\t4499\n25\tDream Ball\t5576\n#26\tBeast Ball\t7851"
  },
  {
    "path": "VeekunImport/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Stub.System.Data.SQLite.Core.NetFramework\" version=\"1.0.115.5\" targetFramework=\"net40\" />\n  <package id=\"System.Data.SQLite.Core\" version=\"1.0.115.5\" targetFramework=\"net40\" />\n  <package id=\"System.Data.SQLite.Linq\" version=\"1.0.115.5\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "VeekunImport/regions.txt",
    "content": "﻿1\tEvent\n2\tKanto\n3\tJohto\n4\tHoenn\n5\tOrre\n6\tSevii Islands\n7\tSinnoh\n8\tUnova\n9\tKalos"
  },
  {
    "path": "VeekunImport/ribbon_positions3.txt",
    "content": "﻿3021\t15\t;Champion Ribbon\n3022\t16\t;Winning Ribbon\n3023\t17\t;Victory Ribbon\n3024\t18\t;Artist Ribbon\n3025\t19\t;Effort Ribbon"
  },
  {
    "path": "VeekunImport/ribbon_positions4.txt",
    "content": "﻿3001\t0\t;Hoenn Cool Ribbon\n3002\t1\t;Hoenn Cool Ribbon Super\n3003\t2\t;Hoenn Cool Ribbon Hyper\n3004\t3\t;Hoenn Cool Ribbon Master\n3005\t4\t;Hoenn Beauty Ribbon\n3006\t5\t;Hoenn Beauty Ribbon Super\n3007\t6\t;Hoenn Beauty Ribbon Hyper\n3008\t7\t;Hoenn Beauty Ribbon Master\n3009\t8\t;Hoenn Cute Ribbon\n3010\t9\t;Hoenn Cute Ribbon Super\n3011\t10\t;Hoenn Cute Ribbon Hyper\n3012\t11\t;Hoenn Cute Ribbon Master\n3013\t12\t;Hoenn Smart Ribbon\n3014\t13\t;Hoenn Smart Ribbon Super\n3015\t14\t;Hoenn Smart Ribbon Hyper\n3016\t15\t;Hoenn Smart Ribbon Master\n3017\t16\t;Hoenn Tough Ribbon\n3018\t17\t;Hoenn Tough Ribbon Super\n3019\t18\t;Hoenn Tough Ribbon Hyper\n3020\t19\t;Hoenn Tough Ribbon Master\n3021\t20\t;Champion Ribbon\n3022\t21\t;Winning Ribbon\n3023\t22\t;Victory Ribbon\n3024\t23\t;Artist Ribbon\n3025\t24\t;Effort Ribbon\n3026\t25\t;Marine Ribbon\n3027\t26\t;Land Ribbon\n3028\t27\t;Sky Ribbon\n3029\t28\t;Country Ribbon\n3030\t29\t;National Ribbon\n3031\t30\t;Earth Ribbon\n3032\t31\t;World Ribbon\n4001\t32\t;Sinnoh Champ Ribbon\n4002\t33\t;Ability Ribbon\n4003\t34\t;Great Ability Ribbon\n4004\t35\t;Double Ability Ribbon\n4005\t36\t;Multi Ability Ribbon\n4006\t37\t;Pair Ability Ribbon\n4007\t38\t;World Ability Ribbon\n4008\t39\t;Alert Ribbon\n4009\t40\t;Shock Ribbon\n4010\t41\t;Downcast Ribbon\n4011\t42\t;Careless Ribbon\n4012\t43\t;Relax Ribbon\n4013\t44\t;Snooze Ribbon\n4014\t45\t;Smile Ribbon\n4015\t46\t;Gorgeous Ribbon\n4016\t47\t;Royal Ribbon\n4017\t48\t;Gorgeous Royal Ribbon\n4018\t49\t;Footprint Ribbon\n4019\t50\t;Record Ribbon\n4020\t51\t;History Ribbon\n4021\t52\t;Legend Ribbon\n4022\t53\t;Red Ribbon\n4023\t54\t;Green Ribbon\n4024\t55\t;Blue Ribbon\n4025\t56\t;Festival Ribbon\n4026\t57\t;Carnival Ribbon\n4027\t58\t;Classic Ribbon\n4028\t59\t;Premier Ribbon\n4029\t64\t;Sinnoh Cool Ribbon\n4030\t65\t;Sinnoh Cool Ribbon Great\n4031\t66\t;Sinnoh Cool Ribbon Ultra\n4032\t67\t;Sinnoh Cool Ribbon Master\n4033\t68\t;Sinnoh Beauty Ribbon\n4034\t69\t;Sinnoh Beauty Ribbon Great\n4035\t70\t;Sinnoh Beauty Ribbon Ultra\n4036\t71\t;Sinnoh Beauty Ribbon Master\n4037\t72\t;Sinnoh Cute Ribbon\n4038\t73\t;Sinnoh Cute Ribbon Great\n4039\t74\t;Sinnoh Cute Ribbon Ultra\n4040\t75\t;Sinnoh Cute Ribbon Master\n4041\t76\t;Sinnoh Smart Ribbon\n4042\t77\t;Sinnoh Smart Ribbon Great\n4043\t78\t;Sinnoh Smart Ribbon Ultra\n4044\t79\t;Sinnoh Smart Ribbon Master\n4045\t80\t;Sinnoh Tough Ribbon\n4046\t81\t;Sinnoh Tough Ribbon Great\n4047\t82\t;Sinnoh Tough Ribbon Ultra\n4048\t83\t;Sinnoh Tough Ribbon Master\n"
  },
  {
    "path": "VeekunImport/ribbon_positions5.txt",
    "content": "﻿3001\t0\t;Hoenn Cool Ribbon\n3002\t1\t;Hoenn Cool Ribbon Super\n3003\t2\t;Hoenn Cool Ribbon Hyper\n3004\t3\t;Hoenn Cool Ribbon Master\n3005\t4\t;Hoenn Beauty Ribbon\n3006\t5\t;Hoenn Beauty Ribbon Super\n3007\t6\t;Hoenn Beauty Ribbon Hyper\n3008\t7\t;Hoenn Beauty Ribbon Master\n3009\t8\t;Hoenn Cute Ribbon\n3010\t9\t;Hoenn Cute Ribbon Super\n3011\t10\t;Hoenn Cute Ribbon Hyper\n3012\t11\t;Hoenn Cute Ribbon Master\n3013\t12\t;Hoenn Smart Ribbon\n3014\t13\t;Hoenn Smart Ribbon Super\n3015\t14\t;Hoenn Smart Ribbon Hyper\n3016\t15\t;Hoenn Smart Ribbon Master\n3017\t16\t;Hoenn Tough Ribbon\n3018\t17\t;Hoenn Tough Ribbon Super\n3019\t18\t;Hoenn Tough Ribbon Hyper\n3020\t19\t;Hoenn Tough Ribbon Master\n3021\t20\t;Champion Ribbon\n3022\t21\t;Winning Ribbon\n3023\t22\t;Victory Ribbon\n3024\t23\t;Artist Ribbon\n3025\t24\t;Effort Ribbon\n5001\t25\t;Battle Champion Ribbon\n5002\t26\t;Regional Champion Ribbon\n5003\t27\t;National Champion Ribbon\n3029\t28\t;Country Ribbon\n3030\t29\t;National Ribbon\n3031\t30\t;Earth Ribbon\n3032\t31\t;World Ribbon\n4001\t32\t;Sinnoh Champ Ribbon\n4002\t33\t;Ability Ribbon\n4003\t34\t;Great Ability Ribbon\n4004\t35\t;Double Ability Ribbon\n4005\t36\t;Multi Ability Ribbon\n4006\t37\t;Pair Ability Ribbon\n4007\t38\t;World Ability Ribbon\n4008\t39\t;Alert Ribbon\n4009\t40\t;Shock Ribbon\n4010\t41\t;Downcast Ribbon\n4011\t42\t;Careless Ribbon\n4012\t43\t;Relax Ribbon\n4013\t44\t;Snooze Ribbon\n4014\t45\t;Smile Ribbon\n4015\t46\t;Gorgeous Ribbon\n4016\t47\t;Royal Ribbon\n4017\t48\t;Gorgeous Royal Ribbon\n4018\t49\t;Footprint Ribbon\n4019\t50\t;Record Ribbon\n5004\t51\t;Event Ribbon\n4021\t52\t;Legend Ribbon\n5005\t53\t;World Champion Ribbon\n5006\t54\t;Birthday Ribbon\n5007\t55\t;Special Ribbon\n5008\t56\t;Souvenir Ribbon\n5009\t57\t;Wishing Ribbon\n4027\t58\t;Classic Ribbon\n4028\t59\t;Premier Ribbon\n4029\t64\t;Sinnoh Cool Ribbon\n4030\t65\t;Sinnoh Cool Ribbon Great\n4031\t66\t;Sinnoh Cool Ribbon Ultra\n4032\t67\t;Sinnoh Cool Ribbon Master\n4033\t68\t;Sinnoh Beauty Ribbon\n4034\t69\t;Sinnoh Beauty Ribbon Great\n4035\t70\t;Sinnoh Beauty Ribbon Ultra\n4036\t71\t;Sinnoh Beauty Ribbon Master\n4037\t72\t;Sinnoh Cute Ribbon\n4038\t73\t;Sinnoh Cute Ribbon Great\n4039\t74\t;Sinnoh Cute Ribbon Ultra\n4040\t75\t;Sinnoh Cute Ribbon Master\n4041\t76\t;Sinnoh Smart Ribbon\n4042\t77\t;Sinnoh Smart Ribbon Great\n4043\t78\t;Sinnoh Smart Ribbon Ultra\n4044\t79\t;Sinnoh Smart Ribbon Master\n4045\t80\t;Sinnoh Tough Ribbon\n4046\t81\t;Sinnoh Tough Ribbon Great\n4047\t82\t;Sinnoh Tough Ribbon Ultra\n4048\t83\t;Sinnoh Tough Ribbon Master\n"
  },
  {
    "path": "VeekunImport/ribbons.txt",
    "content": "﻿3001\tCool Ribbon\tHoenn Cool Contest Normal Rank winner!\n3002\tCool Ribbon Super\tHoenn Cool Contest Super Rank winner!\n3003\tCool Ribbon Hyper\tHoenn Cool Contest Hyper Rank winner!\n3004\tCool Ribbon Master\tHoenn Cool Contest Master Rank winner!\n3005\tBeauty Ribbon\tHoenn Beauty Contest Normal Rank winner!\n3006\tBeauty Ribbon Super\tHoenn Beauty Contest Super Rank winner!\n3007\tBeauty Ribbon Hyper\tHoenn Beauty Contest Hyper Rank winner!\n3008\tBeauty Ribbon Master\tHoenn Beauty Contest Master Rank winner!\n3009\tCute Ribbon\tHoenn Cute Contest Normal Rank winner!\n3010\tCute Ribbon Super\tHoenn Cute Contest Super Rank winner!\n3011\tCute Ribbon Hyper\tHoenn Cute Contest Hyper Rank winner!\n3012\tCute Ribbon Master\tHoenn Cute Contest Master Rank winner!\n3013\tSmart Ribbon\tHoenn Smart Contest Normal Rank winner!\n3014\tSmart Ribbon Super\tHoenn Smart Contest Super Rank winner!\n3015\tSmart Ribbon Hyper\tHoenn Smart Contest Hyper Rank winner!\n3016\tSmart Ribbon Master\tHoenn Smart Contest Master Rank winner!\n3017\tTough Ribbon\tHoenn Tough Contest Normal Rank winner!\n3018\tTough Ribbon Super\tHoenn Tough Contest Super Rank winner!\n3019\tTough Ribbon Hyper\tHoenn Tough Contest Hyper Rank winner!\n3020\tTough Ribbon Master\tHoenn Tough Contest Master Rank winner!\n3021\tChampion Ribbon\tA Ribbon awarded for clearing the Pokémon League and entering the Hall of Fame in another region.\n3022\tWinning Ribbon\tRibbon awarded for clearing Hoenn's Battle Tower's Lv. 50 challenge.\n3023\tVictory Ribbon\tRibbon awarded for clearing Hoenn's Battle Tower's Lv. 100 challenge.\n3024\tArtist Ribbon\tA Ribbon awarded for being chosen as a super sketch model in the Hoenn Region.\n3025\tEffort Ribbon\tA Ribbon awarded for being an exceptionally hard worker.\n3026\tMarine Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n3027\tLand Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n3028\tSky Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n3029\tCountry Ribbon\tA Ribbon awarded to a Pokémon League Champion.\n3030\tNational Ribbon\tA Ribbon awarded for overcoming all difficult challenges.\n3031\tEarth Ribbon\tA Ribbon awarded for winning 100 battles in a row.\n3032\tWorld Ribbon\tA Ribbon awarded to a Pokémon League Champion.\n4001\tSinnoh Champ Ribbon\tA Ribbon awarded for beating the Sinnoh Champion and entering the Sinnoh Hall of Fame.\n4002\tAbility Ribbon\tA Ribbon awarded for defeating the Tower Tycoon at the Battle Tower.\n4003\tGreat Ability Ribbon\tA Ribbon awarded for defeating the Tower Tycoon at the Battle Tower.\n4004\tDouble Ability Ribbon\tA Ribbon awarded for completing the Battle Tower Double challenge.\n4005\tMulti Ability Ribbon\tA Ribbon awarded for completing the Battle Tower Multi challenge.\n4006\tPair Ability Ribbon\tA Ribbon awarded for completing the Battle Tower Link Multi challenge.\n4007\tWorld Ability Ribbon\tA Ribbon awarded for completing the Wi-Fi Battle Tower challenge.\n4008\tAlert Ribbon\tA Ribbon for recalling an invigorating event that created life energy.\n4009\tShock Ribbon\tA Ribbon for recalling a thrilling event that made life more exciting.\n4010\tDowncast Ribbon\tA Ribbon for recalling feelings of sadness that added spice to life.\n4011\tCareless Ribbon\tA Ribbon for recalling a careless error that helped steer life decisions.\n4012\tRelax Ribbon\tA Ribbon for recalling a refreshing event that added sparkle to life.\n4013\tSnooze Ribbon\tA Ribbon for recalling a deep slumber that made life soothing.\n4014\tSmile Ribbon\tA Ribbon for recalling that smiles enrich the quality of life.\n4015\tGorgeous Ribbon\tAn extraordinarily gorgeous and extravagant Ribbon.\n4016\tRoyal Ribbon\tAn incredibly regal Ribbon with an air of nobility.\n4017\tGorgeous Royal Ribbon\tA gorgeous and regal Ribbon that is the peak of fabulous.\n4018\tFootprint Ribbon\tA Ribbon awarded to a Pokémon deemed to have a top-quality footprint.\n4019\tRecord Ribbon\tA Ribbon awarded for setting an incredible record.\n4020\tHistory Ribbon\tA Ribbon awarded for setting a historical record.\n4021\tLegend Ribbon\tA Ribbon awarded for setting a legendary record.\n4022\tRed Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n4023\tGreen Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n4024\tBlue Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n4025\tFestival Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n4026\tCarnival Ribbon\tA commemorative Ribbon obtained in a Mystery Zone.\n4027\tClassic Ribbon\tA Ribbon that proclaims love for Pokémon.\n4028\tPremier Ribbon\tA Ribbon awarded for a special holdiay.\n4029\tCool Ribbon\tSuper Contest Cool Category Normal Rank winner!\n4030\tCool Ribbon Great\tSuper Contest Cool Category Great Rank winner!\n4031\tCool Ribbon Ultra\tSuper Contest Cool Category Ultra Rank winner!\n4032\tCool Ribbon Master\tSuper Contest Cool Category Master Rank winner!\n4033\tBeauty Ribbon\tSuper Contest Beauty Category Normal Rank winner!\n4034\tBeauty Ribbon Great\tSuper Contest Beauty Category Great Rank winner!\n4035\tBeauty Ribbon Ultra\tSuper Contest Beauty Category Ultra Rank winner!\n4036\tBeauty Ribbon Master\tSuper Contest Beauty Category Master Rank winner!\n4037\tCute Ribbon\tSuper Contest Cute Category Normal Rank winner!\n4038\tCute Ribbon Great\tSuper Contest Cute Category Great Rank winner!\n4039\tCute Ribbon Ultra\tSuper Contest Cute Category Ultra Rank winner!\n4040\tCute Ribbon Master\tSuper Contest Cute Category Master Rank winner!\n4041\tSmart Ribbon\tSuper Contest Smart Category Normal Rank winner!\n4042\tSmart Ribbon Great\tSuper Contest Smart Category Great Rank winner!\n4043\tSmart Ribbon Ultra\tSuper Contest Smart Category Ultra Rank winner!\n4044\tSmart Ribbon Master\tSuper Contest Smart Category Master Rank winner!\n4045\tTough Ribbon\tSuper Contest Tough Category Normal Rank winner!\n4046\tTough Ribbon Great\tSuper Contest Tough Category Great Rank winner!\n4047\tTough Ribbon Ultra\tSuper Contest Tough Category Ultra Rank winner!\n4048\tTough Ribbon Master\tSuper Contest Tough Category Master Rank winner!\n5001\tBattle Champion Ribbon\tA Ribbon awarded to a Battle Competition Champion.\n5002\tRegional Champion Ribbon\tA Ribbon awarded to a Regional Champion in the Pokémon World Championships.\n5003\tNational Champion Ribbon\tA Ribbon awarded to a National Champion in the Pokémon World Championships.\n5004\tEvent Ribbon\tA Ribbon awarded for participating in a special Pokémon event.\n5005\tWorld Champion Ribbon\tA Ribbon awarded to a World Champion in the Pokémon World Championships.\n5006\tBirthday Ribbon\tA Ribbon that commemorates a birthday.\n5007\tSpecial Ribbon\tA special Ribbon for a special day.\n5008\tSouvenir Ribbon\tA Ribbon for cherishing a special memory.\n5009\tWishing Ribbon\tA Ribbon said to make your wish come true."
  },
  {
    "path": "bvCrawler4/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <connectionStrings>\r\n    <add name=\"pkmnFoundationsConnectionString\"\r\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\r\n         providerName=\"MySql.Data.MySqlClient\" />\r\n  </connectionStrings>\r\n  <appSettings>\r\n    <add key=\"pkmnFoundationsBoxUpload4Dir\" value=\".\\Scraped battle videos Gen4\" />\r\n  </appSettings>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\" /></startup><system.data>\r\n    <DbProviderFactories>\r\n      <remove invariant=\"MySql.Data.MySqlClient\" />\r\n      <add name=\"MySQL Data Provider\" invariant=\"MySql.Data.MySqlClient\" description=\".Net Framework Data Provider for MySQL\" type=\"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d\" />\r\n    </DbProviderFactories>\r\n  </system.data></configuration>\r\n"
  },
  {
    "path": "bvCrawler4/Program.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Net.Sockets;\r\nusing System.Threading;\r\nusing MySql.Data.MySqlClient;\r\nusing System.Configuration;\r\nusing PkmnFoundations.Data;\r\nusing PkmnFoundations.Support;\r\nusing System.Data;\r\n\r\nnamespace PkmnFoundations\r\n{\r\n    public class BvCrawler4\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            m_pad = new byte[256];\r\n\r\n            using (FileStream s = File.Open(\"Box Upload Xor Pad.bin\", FileMode.Open))\r\n            {\r\n                s.Read(m_pad, 0, m_pad.Length);\r\n                s.Close();\r\n            }\r\n\r\n            m_upload_dir = ConfigurationManager.AppSettings[\"pkmnFoundationsBoxUpload4Dir\"];\r\n\r\n            Console.WriteLine(\"Pokémon Plat/HG/SS Battle Video Crawler by mm201\");\r\n            int pid = 207823279; // Platinum Hikari\r\n            Directory.CreateDirectory(String.Format(\"{0}\", m_upload_dir));\r\n            DateTime last_top30 = DateTime.MinValue;\r\n            DateTime last_retry_all = DateTime.MinValue;\r\n\r\n            while (true)\r\n            {\r\n                ulong videoId;\r\n                try\r\n                {\r\n                    using (MySqlConnection db = CreateConnection())\r\n                    {\r\n                        db.Open();\r\n                        videoId = DequeueVideo(db);\r\n                        db.Close();\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    // haven't touched the server, sleep short\r\n                    LogError(ex);\r\n                    Thread.Sleep(1000 * 1);\r\n                    continue;\r\n                }\r\n\r\n                if (videoId == 0)\r\n                {\r\n                    try\r\n                    {\r\n                        if (last_retry_all < DateTime.Now.AddHours(-6))\r\n                        {\r\n                            last_retry_all = DateTime.Now;\r\n                            RetryAll();\r\n                            continue;\r\n                        }\r\n                        if (last_top30 < DateTime.Now.AddMinutes(-60))\r\n                        {\r\n                            last_top30 = DateTime.Now;\r\n                            QueueTop30(pid);\r\n                            continue;\r\n                        }\r\n                        else if (RunSearch(pid))\r\n                        {\r\n                            continue;\r\n                        }\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        LogError(ex);\r\n                        Thread.Sleep(1000 * 30);\r\n                        continue;\r\n                    }\r\n\r\n                    Console.WriteLine(\"Nothing to do. Idling 1 minute.\");\r\n                    Thread.Sleep(1000 * 60);\r\n                    continue;\r\n                }\r\n\r\n                String formatted = FormatVideoId(videoId);\r\n                String filename = String.Format(\"{0}\\\\{1}.bin\", m_upload_dir, formatted);\r\n\r\n                if (File.Exists(filename))\r\n                {\r\n                    Console.WriteLine(\"Skipped video {0}. Already present on disk.\", formatted);\r\n                    Thread.Sleep(1000 * 1);\r\n                    continue;\r\n                }\r\n\r\n                byte[] data;\r\n                try\r\n                {\r\n                    data = GetBattleVideo(pid, videoId);\r\n\r\n                    using (FileStream file = File.Create(filename))\r\n                    {\r\n                        file.Write(data, 0, data.Length);\r\n                        file.Close();\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    LogError(ex);\r\n                    Thread.Sleep(1000 * 30);\r\n                    continue;\r\n                }\r\n\r\n                Console.WriteLine(\"Successfully saved battle video {0}.\", formatted);\r\n                Thread.Sleep(1000 * 30);\r\n            }\r\n        }\r\n\r\n        private static byte[] m_pad;\r\n        private static String m_upload_dir;\r\n\r\n        public static String FormatVideoId(ulong videoId)\r\n        {\r\n            String number = videoId.ToString(\"D12\");\r\n            String[] split = new String[3];\r\n            split[0] = number.Substring(0, number.Length - 10);\r\n            split[1] = number.Substring(number.Length - 10, 5);\r\n            split[2] = number.Substring(number.Length - 5, 5);\r\n            return String.Join(\"-\", split);\r\n        }\r\n\r\n        public static byte[] GetBattleVideo(int pid, ulong videoId)\r\n        {\r\n            String formatted = FormatVideoId(videoId);\r\n            Console.WriteLine(\"Attempting to retrieve battle video {0} from server.\", formatted);\r\n\r\n            byte[] data = new byte[0x14c];\r\n            MemoryStream request = new MemoryStream(data);\r\n            request.Write(new byte[4], 0, 4); // length goes here, see end\r\n            request.Write(new byte[] { 0xda, 0xae, 0x00, 0x00 }, 0, 4); // request type, sanity 0000\r\n            request.Write(BitConverter.GetBytes(pid), 0, 4); // pid, hopefully this doesn't ban me\r\n            request.Write(new byte[] { 0x07, 0x02 }, 0, 2);\r\n            // there is some random bytes contained in this sometimes. Could be trainer profile\r\n            // related, I don't know...\r\n            request.Write(new byte[0x132], 0, 0x132);\r\n\r\n            request.Write(BitConverter.GetBytes(videoId), 0, 8);\r\n            request.Write(new byte[] { 0x40, 0x01, 0x00, 0x00 }, 0, 4);\r\n            request.Flush();\r\n            Encrypt(data, 0xba);\r\n            PutLength(data);\r\n\r\n            byte[] response = Conversation(data);\r\n\r\n            if (response.Length < 9) throw new InvalidDataException(\"Battle video was not retrieved.\");\r\n\r\n            Console.WriteLine(\"Successfully retrieved {0} byte response for battle video {1}.\", response.Length, formatted);\r\n            return response;\r\n        }\r\n\r\n        public static bool RunSearch(int pid)\r\n        {\r\n            Random rand = new Random();\r\n\r\n            SearchMetagames[] metagames = (SearchMetagames[])Enum.GetValues(typeof(SearchMetagames));\r\n            int metaCount = metagames.Length - 1; // exclude Top30 which is at the end\r\n            int metaIndex = rand.Next(0, metaCount);\r\n            SearchMetagames metagame = metagames[metaIndex];\r\n\r\n            ushort species = (ushort)rand.Next(0, 493);\r\n            byte country = 0xff;\r\n            byte region = 0xff;\r\n\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                if ((long)db.ExecuteScalar(\r\n                        \"SELECT Count(*) FROM BattleVideoSearchHistory WHERE Metagame = @metagame \" +\r\n                        \"AND Species = @species AND Country = @country AND Region = @region\",\r\n                        new MySqlParameter(\"@metagame\", (int)metagame),\r\n                        new MySqlParameter(\"@species\", (int)species),\r\n                        new MySqlParameter(\"@country\", (int)country),\r\n                        new MySqlParameter(\"@region\", (int)region))\r\n                    == 0)\r\n                {\r\n                    // exact match\r\n                    QueueSearch(pid, species, metagame, country, region);\r\n                    return true;\r\n                }\r\n\r\n                DataTable dt;\r\n                dt = db.ExecuteDataTable(\"SELECT DISTINCT Metagame, Species, Country, Region \" +\r\n                    \"FROM BattleVideoSearchHistory WHERE Metagame = @metagame ORDER BY Species\",\r\n                    new MySqlParameter(\"@metagame\", (int)metagame));\r\n                if (dt.Rows.Count < 493)\r\n                {\r\n                    int prevSpecies = 1;\r\n                    foreach (DataRow row in dt.Rows)\r\n                    {\r\n                        if ((int)row[\"Species\"] != prevSpecies)\r\n                        {\r\n                            QueueSearch(pid, (ushort)(prevSpecies), metagame, country, region);\r\n                            return true;\r\n                        }\r\n                        prevSpecies++;\r\n                    }\r\n                }\r\n\r\n                dt = db.ExecuteDataTable(\"SELECT DISTINCT Metagame, Species, Country, Region \" +\r\n                    \"FROM BattleVideoSearchHistory WHERE Species = @species ORDER BY Metagame\",\r\n                    new MySqlParameter(\"@species\", (int)species));\r\n                if (dt.Rows.Count < metaCount)\r\n                {\r\n                    int prevMeta = 0;\r\n                    foreach (DataRow row in dt.Rows)\r\n                    {\r\n                        if ((int)row[\"Metagame\"] != (int)metagames[prevMeta])\r\n                        {\r\n                            QueueSearch(pid, species, metagames[prevMeta], country, region);\r\n                            return true;\r\n                        }\r\n                        prevMeta++;\r\n                    }\r\n                }\r\n\r\n                dt = db.ExecuteDataTable(\"SELECT DISTINCT Metagame, Species, Country, Region \" +\r\n                    \"FROM BattleVideoSearchHistory ORDER BY Metagame, Species\");\r\n                if (dt.Rows.Count < 493 * metaCount)\r\n                {\r\n                    int prevSpecies = 1;\r\n                    int prevMeta = 0;\r\n                    foreach (DataRow row in dt.Rows)\r\n                    {\r\n                        if ((int)row[\"Species\"] != prevSpecies || (int)row[\"Metagame\"] != (int)metagames[prevMeta])\r\n                        {\r\n                            QueueSearch(pid, (ushort)(prevSpecies), metagames[prevMeta], country, region);\r\n                            return true;\r\n                        }\r\n                        prevSpecies++;\r\n                        if (prevSpecies > 493)\r\n                        {\r\n                            prevSpecies = 1;\r\n                            prevMeta++;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        public static void QueueTop30(int pid)\r\n        {\r\n            QueueSearch(pid, 0xffff, SearchMetagames.Latest30, 0xff, 0xff);\r\n        }\r\n\r\n        public static void QueueSearch(int pid, ushort species, SearchMetagames meta, byte country, byte region)\r\n        {\r\n            bool hasSearch = species == 0xffff && meta == SearchMetagames.Latest30 && country == 0xff\r\n                && region == 0xff;\r\n            if (hasSearch)\r\n                Console.WriteLine(\"Searching for latest 30 videos.\");\r\n            else\r\n            {\r\n                Console.Write(\"Searching for \");\r\n                if (species != 0xffff)\r\n                    Console.Write(\"species {0}, \", species);\r\n                if (meta != SearchMetagames.Latest30)\r\n                    Console.Write(\"{0}, \", meta);\r\n                if (country != 0xff)\r\n                    Console.Write(\"country {0}, \", region);\r\n                if (region != 0xff)\r\n                    Console.Write(\"region {0}\", region);\r\n            }\r\n\r\n            byte[] data = new byte[0x15c];\r\n            MemoryStream request = new MemoryStream(data);\r\n            request.Write(new byte[4], 0, 4); // length goes here, see end\r\n            request.Write(new byte[] { 0xd9, 0xc4, 0x00, 0x00 }, 0, 4); // request type, sanity 0000\r\n            request.Write(BitConverter.GetBytes(pid), 0, 4); // pid, hopefully this doesn't ban me\r\n            request.Write(new byte[] { 0x0c, 0x02 }, 0, 2);\r\n            // there is some random bytes contained in this sometimes. Could be trainer profile\r\n            // related, I don't know...\r\n            request.Write(new byte[0x132], 0, 0x132);\r\n            request.Write(new byte[] {\r\n                0x00, 0x00, 0x00, 0x00\r\n            }, 0, 4);\r\n\r\n            request.Write(BitConverter.GetBytes(species), 0, 2);\r\n            request.WriteByte((byte)meta);\r\n            request.WriteByte(country);\r\n            request.WriteByte(region);\r\n\r\n            request.Write(new byte[] {\r\n                      0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,\r\n                0x00, 0x00, 0x00, 0x00, 0xdc, 0xf6, 0x1b, 0x02,\r\n                0x0c, 0x03, 0x00, 0x00\r\n            }, 0, 19);\r\n            request.Flush();\r\n            Encrypt(data, 0xc9);\r\n            PutLength(data);\r\n\r\n            byte[] response = Conversation(data);\r\n\r\n            if (!hasSearch)\r\n            {\r\n                using (MySqlConnection db = CreateConnection())\r\n                {\r\n                    db.Open();\r\n                    db.ExecuteNonQuery(\"INSERT INTO BattleVideoSearchHistory (Metagame, Species, \" +\r\n                        \"Country, Region) VALUES (@metagame, @species, @country, @region)\",\r\n                        new MySqlParameter(\"@metagame\", (int)meta),\r\n                        new MySqlParameter(\"@species\", (int)species),\r\n                        new MySqlParameter(\"@country\", (int)country),\r\n                        new MySqlParameter(\"@region\", (int)region));\r\n                    db.Close();\r\n                }\r\n            }\r\n\r\n            QueueSearchResults(response);\r\n        }\r\n\r\n        public static void QueueSearchResults(byte[] data)\r\n        {\r\n            if (data.Length % 240 != 12) throw new InvalidDataException(\"Search results blob should be 12 bytes + 240 per result.\");\r\n            Decrypt(data);\r\n            AssertHelper.Assert(data[6] == 0x00);\r\n            AssertHelper.Assert(data[7] == 0x00); // saaaaanity\r\n\r\n            int count = data.Length / 240;\r\n            Console.WriteLine(\"{0} results found.\", count);\r\n\r\n            if (count == 0)\r\n            {\r\n                // Nothing found. Sleep as to not spam the server with lots of empty searches\r\n                Thread.Sleep(1000 * 15);\r\n                return;\r\n            }\r\n\r\n            // 12 bytes of header plus 240 bytes per search result.\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                for (int x = 0; x < count; x++)\r\n                {\r\n                    ulong videoId = BitConverter.ToUInt64(data, 16 + x * 240);\r\n                    QueueVideoId(db, videoId);\r\n                }\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public static void QueueVideoId(MySqlConnection db, ulong id)\r\n        {\r\n            String formatted = FormatVideoId(id);\r\n\r\n            using (MySqlTransaction tran = db.BeginTransaction())\r\n            {\r\n                long count = (long)tran.ExecuteScalar(\"SELECT Count(*) FROM BattleVideoCrawlQueue WHERE SerialNumber = @serial_number\", new MySqlParameter(\"@serial_number\", id));\r\n                if (count > 0)\r\n                {\r\n                    tran.Rollback();\r\n                    Console.WriteLine(\"Skipped video {0}. Already present in database.\", formatted);\r\n                    return;\r\n                }\r\n                tran.ExecuteNonQuery(\"INSERT INTO BattleVideoCrawlQueue (SerialNumber, `Timestamp`) VALUES (@serial_number, NOW())\", new MySqlParameter(\"@serial_number\", id));\r\n                tran.Commit();\r\n                Console.WriteLine(\"Queued video {0}.\", formatted);\r\n            }\r\n        }\r\n\r\n        public static ulong DequeueVideo(MySqlConnection db)\r\n        {\r\n            using (MySqlTransaction tran = db.BeginTransaction())\r\n            {\r\n                object o = tran.ExecuteScalar(\"SELECT SerialNumber FROM BattleVideoCrawlQueue WHERE Complete = 0 ORDER BY `Timestamp` LIMIT 1\");\r\n                if (o == null || o == DBNull.Value)\r\n                {\r\n                    tran.Rollback();\r\n                    return 0;\r\n                }\r\n                ulong id = (ulong)o;\r\n                tran.ExecuteNonQuery(\"UPDATE BattleVideoCrawlQueue SET Complete = 1 WHERE SerialNumber = @serial_number\", new MySqlParameter(\"@serial_number\", id));\r\n                tran.Commit();\r\n                return id;\r\n            }\r\n        }\r\n\r\n        public static void PutLength(byte[] data)\r\n        {\r\n            // places the actual length in the first 4 bytes.\r\n            byte[] length = BitConverter.GetBytes(data.Length);\r\n            Array.Copy(length, data, 4);\r\n        }\r\n\r\n        public static byte[] Conversation(byte[] request)\r\n        {\r\n            MemoryStream response = new MemoryStream();\r\n\r\n            using (TcpClient client = new TcpClient(\"pkgdsprod.nintendo.co.jp\", 12400))\r\n            {\r\n                NetworkStream s = client.GetStream();\r\n                s.Write(request, 0, request.Length);\r\n                s.CopyTo(response);\r\n                s.Close();\r\n            }\r\n            response.Flush();\r\n            byte[] dataResponse = response.ToArray();\r\n\r\n            int length = BitConverter.ToInt32(dataResponse, 0);\r\n            AssertHelper.Equals(length, dataResponse.Length);\r\n\r\n            return dataResponse;\r\n        }\r\n\r\n        public static void Encrypt(byte[] data, int padOffset)\r\n        {\r\n            // encrypt and decrypt are the same operation...\r\n            for (int x = 6; x < data.Length; x++)\r\n            {\r\n                data[x] ^= m_pad[(x + padOffset) % 256];\r\n            }\r\n        }\r\n\r\n        public static void Decrypt(byte[] data)\r\n        {\r\n            int padOffset = (Array.IndexOf(m_pad, data[6]) + 250) % 256;\r\n            Encrypt(data, padOffset);\r\n        }\r\n\r\n        public static void RetryAll()\r\n        {\r\n            String path = String.Format(\"{0}\", m_upload_dir);\r\n\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                DataTable SerialNumbers = db.ExecuteDataTable(\"SELECT SerialNumber FROM BattleVideoCrawlQueue WHERE Complete = 1\");\r\n                SerialNumbers.PrimaryKey = new DataColumn[] { SerialNumbers.Columns[\"SerialNumber\"] };\r\n                IEnumerable<String> filenames = Directory.EnumerateFiles(path);\r\n\r\n                foreach (String s in filenames)\r\n                {\r\n                    int slash = s.LastIndexOf(Path.DirectorySeparatorChar) + 1;\r\n                    int dot = s.LastIndexOf(\".\");\r\n                    if (dot < 0) dot = s.Length;\r\n                    if (dot < slash) dot = s.Length;\r\n\r\n                    ulong SerialNumber;\r\n                    UInt64.TryParse(s.Substring(slash, dot - slash).Replace(\"-\", \"\"),\r\n                        out SerialNumber);\r\n\r\n                    if (SerialNumber == 0) continue;\r\n                    DataRow row = SerialNumbers.Rows.Find(SerialNumber);\r\n                    if (row == null) continue; // video in the folder but not database. todo: insert.\r\n\r\n                    SerialNumbers.Rows.Remove(row);\r\n                }\r\n\r\n                StringBuilder toRecheck = new StringBuilder();\r\n                bool hasRows = false;\r\n\r\n                foreach (DataRow row in SerialNumbers.Rows)\r\n                {\r\n                    ulong SerialNumber = (ulong)row[\"SerialNumber\"];\r\n                    if (hasRows) toRecheck.Append(',');\r\n                    toRecheck.Append(SerialNumber.ToString());\r\n                    hasRows = true;\r\n\r\n                    Console.WriteLine(\"Battle video {0} in database but not in directory. Requeueing.\", FormatVideoId(SerialNumber));\r\n                }\r\n                if (hasRows)\r\n                {\r\n                    db.ExecuteNonQuery(\"UPDATE BattleVideoCrawlQueue SET Complete = 0 \" +\r\n                        \"WHERE SerialNumber IN (\" + toRecheck.ToString() + \")\");\r\n                }\r\n\r\n                db.Clone();\r\n            }\r\n        }\r\n\r\n        public static MySqlConnection CreateConnection()\r\n        {\r\n            return new MySqlConnection(ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"].ConnectionString);\r\n        }\r\n\r\n        public static void LogError(Exception ex)\r\n        {\r\n            Console.WriteLine(ex.Message);\r\n            Console.WriteLine(ex.StackTrace);\r\n        }\r\n\r\n        public enum SearchMetagames : byte\r\n        {\r\n            Latest30 = 0xff,\r\n\r\n            ColosseumSingleNoRestrictions = 0xfa,\r\n            ColosseumSingleCupMatch = 0xfb,\r\n            ColosseumDoubleNoRestrictions = 0xfc,\r\n            ColosseumDoubleCupMatch = 0xfd,\r\n            ColosseumMulti = 0x0e,\r\n\r\n            BattleTowerSingle = 0x0f,\r\n            BattleTowerDouble = 0x10,\r\n            BattleTowerMulti = 0x11,\r\n\r\n            BattleFactoryLv50Single = 0x12,\r\n            BattleFactoryLv50Double = 0x13,\r\n            BattleFactoryLv50Multi = 0x14,\r\n\r\n            BattleFactoryOpenSingle = 0x15,\r\n            BattleFactoryOpenDouble = 0x16,\r\n            BattleFactoryOpenMulti = 0x17,\r\n\r\n            BattleHallSingle = 0x18,\r\n            BattleHallDouble = 0x19,\r\n            BattleHallMulti = 0x1a,\r\n\r\n            BattleCastleSingle = 0x1b,\r\n            BattleCastleDouble = 0x1c,\r\n            BattleCastleMulti = 0x1d,\r\n\r\n            BattleArcadeSingle = 0x1e,\r\n            BattleArcadeDouble = 0x1f,\r\n            BattleArcadeMulti = 0x20,\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "bvCrawler4/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"bvCrawler4\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"bvCrawler4\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"01abd719-4ed0-4a30-9f67-663f7cfe03e2\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "bvCrawler4/bvCrawler4.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>bvCrawler4</RootNamespace>\r\n    <AssemblyName>bvCrawler4</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile>\r\n    </TargetFrameworkProfile>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\MySql.Data.6.9.8\\lib\\net40\\MySql.Data.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\">\r\n      <SubType>Designer</SubType>\r\n    </None>\r\n    <None Include=\"Box Upload Xor Pad.bin\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\r\n      <Project>{408EFC7E-C6B0-4160-8628-2679E34385CE}</Project>\r\n      <Name>Library</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "bvCrawler4/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"MySql.Data\" version=\"6.9.8\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "bvCrawler5/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <connectionStrings>\r\n    <add name=\"pkmnFoundationsConnectionString\"\r\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\r\n         providerName=\"MySql.Data.MySqlClient\" />\r\n  </connectionStrings>\r\n  <appSettings>\r\n    <add key=\"pkmnFoundationsBoxUpload5Dir\" value=\".\\Scraped battle videos Gen5\" />\r\n  </appSettings>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\" /></startup><system.data>\r\n    <DbProviderFactories>\r\n      <remove invariant=\"MySql.Data.MySqlClient\" />\r\n      <add name=\"MySQL Data Provider\" invariant=\"MySql.Data.MySqlClient\" description=\".Net Framework Data Provider for MySQL\" type=\"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d\" />\r\n    </DbProviderFactories>\r\n  </system.data></configuration>\r\n"
  },
  {
    "path": "bvCrawler5/Program.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Net.Sockets;\r\nusing System.Threading;\r\nusing MySql.Data.MySqlClient;\r\nusing System.Configuration;\r\nusing PkmnFoundations.Data;\r\nusing PkmnFoundations.Support;\r\nusing System.Data;\r\nusing System.Net.Security;\r\nusing System.Security.Cryptography.X509Certificates;\r\n\r\nnamespace PkmnFoundations\r\n{\r\n    public class BvCrawler5\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            m_upload_dir = ConfigurationManager.AppSettings[\"pkmnFoundationsBoxUpload5Dir\"];\r\n\r\n            Console.WriteLine(\"Pokémon BW/BW2 Battle Video Crawler by mm201\");\r\n            int pid = 330241374; // White 1 Jenny (?)\r\n            Directory.CreateDirectory(String.Format(\"{0}\", m_upload_dir));\r\n            DateTime last_top30 = DateTime.MinValue;\r\n            DateTime last_top_link = DateTime.MinValue;\r\n            DateTime last_top_subway = DateTime.MinValue;\r\n            DateTime last_retry_all = DateTime.MinValue;\r\n\r\n            m_session_key = new byte[]{\r\n                0x66, 0x87, 0xF1, 0xB5, 0x96, 0x47, 0x4D, 0xFB, \r\n                0x0E, 0x0B, 0x19, 0xBD, 0xBD, 0x69, 0x5E, 0x71,\r\n                0x03, 0x39, 0xED, 0xB2, 0x38, 0xA7, 0xD5, 0x5A,\r\n                0x19, 0x80, 0x09, 0xD4, 0xAA, 0x7F, 0xAE, 0xD3,\r\n                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r\n            };\r\n\r\n            m_session_time = DateTime.MinValue;\r\n\r\n            while (true)\r\n            {\r\n                ulong videoId;\r\n                try\r\n                {\r\n                    using (MySqlConnection db = CreateConnection())\r\n                    {\r\n                        db.Open();\r\n                        videoId = DequeueVideo(db);\r\n                        db.Close();\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    // haven't touched the server, sleep short\r\n                    LogError(ex);\r\n                    Thread.Sleep(1000 * 1);\r\n                    continue;\r\n                }\r\n\r\n                if (videoId == 0)\r\n                {\r\n                    try\r\n                    {\r\n                        if (last_retry_all < DateTime.Now.AddHours(-6))\r\n                        {\r\n                            last_retry_all = DateTime.Now;\r\n                            RetryAll();\r\n                            continue;\r\n                        }\r\n                        if (last_top30 < DateTime.Now.AddMinutes(-60))\r\n                        {\r\n                            last_top30 = DateTime.Now;\r\n                            QueueSpecial(pid, SearchSpecial.Latest30);\r\n                            continue;\r\n                        }\r\n                        if (last_top_link < DateTime.Now.AddMinutes(-120))\r\n                        {\r\n                            last_top_link = DateTime.Now;\r\n                            QueueSpecial(pid, SearchSpecial.TopLinkBattles);\r\n                            continue;\r\n                        }\r\n                        if (last_top_subway < DateTime.Now.AddMinutes(-120))\r\n                        {\r\n                            last_top_subway = DateTime.Now;\r\n                            QueueSpecial(pid, SearchSpecial.TopSubwayBattles);\r\n                            continue;\r\n                        }\r\n                        else if (RunSearch(pid))\r\n                        {\r\n                            continue;\r\n                        }\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        LogError(ex);\r\n                        Thread.Sleep(1000 * 30);\r\n                        continue;\r\n                    }\r\n\r\n                    Console.WriteLine(\"Nothing to do. Idling 1 minute.\");\r\n                    Thread.Sleep(1000 * 60);\r\n                    continue;\r\n                }\r\n\r\n                String formatted = FormatVideoId(videoId);\r\n                String filename = String.Format(\"{0}\\\\{1}.bin\", m_upload_dir, formatted);\r\n\r\n                if (File.Exists(filename))\r\n                {\r\n                    Console.WriteLine(\"Skipped video {0}. Already present on disk.\", formatted);\r\n                    Thread.Sleep(1000 * 1);\r\n                    continue;\r\n                }\r\n\r\n                byte[] data;\r\n                try\r\n                {\r\n                    data = GetBattleVideo(pid, videoId);\r\n\r\n                    using (FileStream file = File.Create(filename))\r\n                    {\r\n                        file.Write(data, 0, data.Length);\r\n                        file.Close();\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    LogError(ex);\r\n                    Thread.Sleep(1000 * 30);\r\n                    continue;\r\n                }\r\n\r\n                Console.WriteLine(\"Successfully saved battle video {0}.\", formatted);\r\n                Thread.Sleep(1000 * 30);\r\n            }\r\n        }\r\n\r\n        private static String m_upload_dir;\r\n        private static byte[] m_session_key;\r\n        private static String m_session_str;\r\n        private static DateTime m_session_time;\r\n\r\n        public static String FormatVideoId(ulong videoId)\r\n        {\r\n            String number = videoId.ToString(\"D12\");\r\n            String[] split = new String[3];\r\n            split[0] = number.Substring(0, number.Length - 10);\r\n            split[1] = number.Substring(number.Length - 10, 5);\r\n            split[2] = number.Substring(number.Length - 5, 5);\r\n            return String.Join(\"-\", split);\r\n        }\r\n\r\n        public static void WriteBase64shit(Stream s)\r\n        {\r\n            // First 32 bytes shared by all:\r\n            // 6687F1B596474DFB0E0B19BDBD695E710339EDB238A7D55A198009D4AA7FAED3\r\n            //\r\n            // The last 32 bytes seem to be random but verifiable:\r\n            // White 1: A194196DAC7CAA4B75A9038E0FF2C71E64E61C40CFA0340178FBB9B6B72C4A63\r\n            // White 1: F8A9E7EA602F169A146429A49AB7BF2D26BBB178AA2BCF1DA259310A263D41ED\r\n            // White 1: BEAB158B25170200BEEBD9C456CD5BE00A19A3C4F69F4749DED6427AD173834E\r\n            // Black 2: C307898C422687861BCA69B25C9FC007B6516A098A05E027BB49764EF2E8B5B1\r\n            // Black 2: BFAA5408C6474EDDE340CF57D3405379E61A78B331191637AA6CE2818ECCE42B\r\n            //\r\n            // I'm guessing it's Hash(Secret + Random)\r\n            // The bytes don't vary with a session but are changed when you reset your DS.\r\n\r\n            if (m_session_str == null || m_session_time.AddMinutes(60) < DateTime.Now)\r\n            {\r\n                m_session_time = DateTime.Now;\r\n                Random rnd = new Random();\r\n                byte[] data = new byte[32];\r\n\r\n                rnd.NextBytes(data);\r\n\r\n                // hack in \r\n                data = new byte[]{\r\n                    0xBE, 0xAB, 0x15, 0x8B, 0x25, 0x17, 0x02, 0x00,\r\n                    0xBE, 0xEB, 0xD9, 0xC4, 0x56, 0xCD, 0x5B, 0xE0,\r\n                    0x0A, 0x19, 0xA3, 0xC4, 0xF6, 0x9F, 0x47, 0x49,\r\n                    0xDE, 0xD6, 0x42, 0x7A, 0xD1, 0x73, 0x83, 0x4E\r\n                };\r\n\r\n                Array.Copy(data, 0, m_session_key, 32, 32);\r\n                m_session_str = Convert.ToBase64String(m_session_key);\r\n            }\r\n\r\n            StreamWriter w = new StreamWriter(s);\r\n            w.Write(m_session_str);\r\n            w.Flush();\r\n        }\r\n\r\n        public static byte[] GetBattleVideo(int pid, ulong videoId)\r\n        {\r\n            String formatted = FormatVideoId(videoId);\r\n            Console.WriteLine(\"Attempting to retrieve battle video {0} from server.\", formatted);\r\n\r\n            byte[] data = new byte[0x14c];\r\n            MemoryStream request = new MemoryStream(data);\r\n            request.Write(new byte[4], 0, 4); // length goes here, see end\r\n            request.Write(new byte[] { 0xf2, 0x55, 0x00, 0x00 }, 0, 4); // request type, sanity 0000\r\n            request.Write(BitConverter.GetBytes(pid), 0, 4); // pid, hopefully this doesn't ban me\r\n            request.Write(new byte[] { 0x17, 0x02 }, 0, 2);\r\n\r\n            WriteBase64shit(request);\r\n\r\n            request.Write(new byte[0xda], 0, 0xda);\r\n\r\n            request.Write(BitConverter.GetBytes(videoId), 0, 8);\r\n            request.Write(new byte[] { 0x64, 0x00, 0x00, 0x00 }, 0, 4);\r\n            request.Flush();\r\n            PutLength(data);\r\n\r\n            byte[] response = Conversation(data);\r\n\r\n            if (response.Length < 9) throw new InvalidDataException(\"Battle video was not retrieved.\");\r\n\r\n            Console.WriteLine(\"Successfully retrieved {0} byte response for battle video {1}.\", response.Length, formatted);\r\n            return response;\r\n        }\r\n\r\n        public static bool RunSearch(int pid)\r\n        {\r\n            Random rand = new Random();\r\n\r\n            SearchMetagames[] metagames = (SearchMetagames[])Enum.GetValues(typeof(SearchMetagames));\r\n            int metaCount = metagames.Length - 1; // remove None from the list\r\n            int metaIndex = rand.Next(1, metaCount + 1);\r\n            SearchMetagames metagame = metagames[metaIndex];\r\n\r\n            ushort species = (ushort)rand.Next(0, 649);\r\n            byte country = 0xff;\r\n            byte region = 0xff;\r\n\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                if ((long)db.ExecuteScalar(\r\n                        \"SELECT Count(*) FROM BattleVideoSearchHistory5 WHERE Metagame = @metagame \" +\r\n                        \"AND Species = @species AND Country = @country AND Region = @region AND Special = 0\",\r\n                        new MySqlParameter(\"@metagame\", (int)metagame),\r\n                        new MySqlParameter(\"@species\", (int)species),\r\n                        new MySqlParameter(\"@country\", (int)country),\r\n                        new MySqlParameter(\"@region\", (int)region))\r\n                    == 0)\r\n                {\r\n                    // exact match\r\n                    QueueSearch(pid, SearchSpecial.None, species, metagame, country, region);\r\n                    return true;\r\n                }\r\n\r\n                DataTable dt;\r\n                dt = db.ExecuteDataTable(\"SELECT DISTINCT Metagame, Species, Country, Region \" +\r\n                    \"FROM BattleVideoSearchHistory5 WHERE Metagame = @metagame AND Special = 0 ORDER BY Species\",\r\n                    new MySqlParameter(\"@metagame\", (int)metagame));\r\n                if (dt.Rows.Count < 649)\r\n                {\r\n                    int prevSpecies = 1;\r\n                    foreach (DataRow row in dt.Rows)\r\n                    {\r\n                        if ((int)row[\"Species\"] != prevSpecies)\r\n                        {\r\n                            QueueSearch(pid, SearchSpecial.None, (ushort)(prevSpecies), metagame, country, region);\r\n                            return true;\r\n                        }\r\n                        prevSpecies++;\r\n                    }\r\n                }\r\n\r\n                dt = db.ExecuteDataTable(\"SELECT DISTINCT Metagame, Species, Country, Region \" +\r\n                    \"FROM BattleVideoSearchHistory5 WHERE Species = @species AND Special = 0 ORDER BY Metagame\",\r\n                    new MySqlParameter(\"@species\", (int)species));\r\n                if (dt.Rows.Count < metaCount)\r\n                {\r\n                    int prevMeta = 1;\r\n                    foreach (DataRow row in dt.Rows)\r\n                    {\r\n                        if ((int)row[\"Metagame\"] != (int)metagames[prevMeta])\r\n                        {\r\n                            QueueSearch(pid, SearchSpecial.None, species, metagames[prevMeta], country, region);\r\n                            return true;\r\n                        }\r\n                        prevMeta++;\r\n                    }\r\n                }\r\n\r\n                dt = db.ExecuteDataTable(\"SELECT DISTINCT Metagame, Species, Country, Region \" +\r\n                    \"FROM BattleVideoSearchHistory5 WHERE Special = 0 ORDER BY Metagame, Species\");\r\n                if (dt.Rows.Count < 649 * metaCount)\r\n                {\r\n                    int prevSpecies = 1;\r\n                    int prevMeta = 1;\r\n                    foreach (DataRow row in dt.Rows)\r\n                    {\r\n                        if ((int)row[\"Species\"] != prevSpecies || (int)row[\"Metagame\"] != (int)metagames[prevMeta])\r\n                        {\r\n                            QueueSearch(pid, SearchSpecial.None, (ushort)(prevSpecies), metagames[prevMeta], country, region);\r\n                            return true;\r\n                        }\r\n                        prevSpecies++;\r\n                        if (prevSpecies > 649)\r\n                        {\r\n                            prevSpecies = 1;\r\n                            prevMeta++;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        public static void QueueSpecial(int pid, SearchSpecial special)\r\n        {\r\n            QueueSearch(pid, special, 0x0000, SearchMetagames.None, 0x00, 0x00);\r\n        }\r\n\r\n        public static void QueueSearch(int pid, SearchSpecial special, ushort species, SearchMetagames meta, byte country, byte region)\r\n        {\r\n            switch (special)\r\n            {\r\n                case SearchSpecial.Latest30:\r\n                    Console.WriteLine(\"Searching for latest 30 videos.\");\r\n                    break;\r\n                case SearchSpecial.TopLinkBattles:\r\n                    Console.WriteLine(\"Searching for top link battles.\");\r\n                    break;\r\n                case SearchSpecial.TopSubwayBattles:\r\n                    Console.WriteLine(\"Searching for top Subway battles.\");\r\n                    break;\r\n                default:\r\n                    {\r\n                        Console.Write(\"Searching for \");\r\n                        if (species != 0xffff)\r\n                            Console.Write(\"species {0}, \", species);\r\n                        if (meta != SearchMetagames.None)\r\n                            Console.Write(\"{0}, \", meta);\r\n                        if (country != 0xff)\r\n                            Console.Write(\"country {0}, \", region);\r\n                        if (region != 0xff)\r\n                            Console.Write(\"region {0}\", region);\r\n                    } break;\r\n            }\r\n\r\n            byte[] data = new byte[0x15c];\r\n            MemoryStream request = new MemoryStream(data);\r\n            request.Write(new byte[4], 0, 4); // length goes here, see end\r\n            request.Write(new byte[] { 0xf1, 0x55, 0x00, 0x00 }, 0, 4); // request type, sanity 0000\r\n            request.Write(BitConverter.GetBytes(pid), 0, 4); // pid, hopefully this doesn't ban me\r\n            request.Write(new byte[] { 0x14, 0x02 }, 0, 2);\r\n\r\n            WriteBase64shit(request);\r\n\r\n            request.Write(new byte[0xda], 0, 0xda);\r\n\r\n            request.Write(BitConverter.GetBytes((uint)special), 0, 4);\r\n            request.Write(BitConverter.GetBytes(species), 0, 2);\r\n            request.Write(BitConverter.GetBytes((uint)meta), 0, 4);\r\n            request.WriteByte(country);\r\n            request.WriteByte(region);\r\n\r\n            request.Write(new byte[] {\r\n                                        0x64, 0x00, 0x00, 0x00,\r\n                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n                0x00, 0x00, 0x00, 0x00\r\n            }, 0, 16);\r\n            request.Flush();\r\n            PutLength(data);\r\n\r\n            byte[] response = Conversation(data);\r\n\r\n            if (special != SearchSpecial.Latest30)\r\n            {\r\n                using (MySqlConnection db = CreateConnection())\r\n                {\r\n                    db.Open();\r\n                    db.ExecuteNonQuery(\"INSERT INTO BattleVideoSearchHistory5 (Metagame, Species, \" +\r\n                        \"Country, Region, Special) VALUES (@metagame, @species, @country, @region, @special)\",\r\n                        new MySqlParameter(\"@metagame\", (int)meta),\r\n                        new MySqlParameter(\"@species\", (int)species),\r\n                        new MySqlParameter(\"@country\", (int)country),\r\n                        new MySqlParameter(\"@region\", (int)region),\r\n                        new MySqlParameter(\"@special\", (int)special));\r\n                    db.Close();\r\n                }\r\n            }\r\n\r\n            QueueSearchResults(response);\r\n        }\r\n\r\n        public static void QueueSearchResults(byte[] data)\r\n        {\r\n            if (data.Length % 208 != 12) throw new InvalidDataException(\"Search results blob should be 12 bytes + 208 per result.\");\r\n\r\n            int count = data.Length / 208;\r\n            Console.WriteLine(\"{0} results found.\", count);\r\n\r\n            if (count == 0)\r\n            {\r\n                // Nothing found. Sleep as to not spam the server with lots of empty searches\r\n                Thread.Sleep(1000 * 15);\r\n                return;\r\n            }\r\n\r\n            // 12 bytes of header plus 208 bytes per search result.\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                for (int x = 0; x < count; x++)\r\n                {\r\n                    ulong videoId = BitConverter.ToUInt64(data, 16 + x * 208);\r\n                    QueueVideoId(db, videoId);\r\n                }\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public static void QueueVideoId(MySqlConnection db, ulong id)\r\n        {\r\n            String formatted = FormatVideoId(id);\r\n\r\n            using (MySqlTransaction tran = db.BeginTransaction())\r\n            {\r\n                long count = (long)tran.ExecuteScalar(\"SELECT Count(*) FROM BattleVideoCrawlQueue5 WHERE SerialNumber = @serial_number\", new MySqlParameter(\"@serial_number\", id));\r\n                if (count > 0)\r\n                {\r\n                    tran.Rollback();\r\n                    Console.WriteLine(\"Skipped video {0}. Already present in database.\", formatted);\r\n                    return;\r\n                }\r\n                tran.ExecuteNonQuery(\"INSERT INTO BattleVideoCrawlQueue5 (SerialNumber, `Timestamp`) VALUES (@serial_number, NOW())\", new MySqlParameter(\"@serial_number\", id));\r\n                tran.Commit();\r\n                Console.WriteLine(\"Queued video {0}.\", formatted);\r\n            }\r\n        }\r\n\r\n        public static ulong DequeueVideo(MySqlConnection db)\r\n        {\r\n            using (MySqlTransaction tran = db.BeginTransaction())\r\n            {\r\n                object o = tran.ExecuteScalar(\"SELECT SerialNumber FROM BattleVideoCrawlQueue5 WHERE Complete = 0 ORDER BY `Timestamp` LIMIT 1\");\r\n                if (o == null || o == DBNull.Value)\r\n                {\r\n                    tran.Rollback();\r\n                    return 0;\r\n                }\r\n                ulong id = (ulong)o;\r\n                tran.ExecuteNonQuery(\"UPDATE BattleVideoCrawlQueue5 SET Complete = 1 WHERE SerialNumber = @serial_number\", new MySqlParameter(\"@serial_number\", id));\r\n                tran.Commit();\r\n                return id;\r\n            }\r\n        }\r\n\r\n        public static void PutLength(byte[] data)\r\n        {\r\n            // places the actual length in the first 4 bytes.\r\n            byte[] length = BitConverter.GetBytes(data.Length);\r\n            Array.Copy(length, data, 4);\r\n        }\r\n\r\n        public static byte[] Conversation(byte[] request)\r\n        {\r\n            MemoryStream response = new MemoryStream();\r\n\r\n            using (TcpClient client = new TcpClient(\"pkgdsprod.nintendo.co.jp\", 12401))\r\n            {\r\n                SslStream sslClient = new SslStream(client.GetStream(), false, delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; });\r\n                sslClient.AuthenticateAsClient(\"pkgdsprod.nintendo.co.jp\");\r\n\r\n                sslClient.Write(request, 0, request.Length);\r\n                sslClient.CopyTo(response);\r\n                sslClient.Close();\r\n            }\r\n            response.Flush();\r\n            byte[] dataResponse = response.ToArray();\r\n\r\n            int length = BitConverter.ToInt32(dataResponse, 0);\r\n            AssertHelper.Equals(length, dataResponse.Length);\r\n\r\n            return dataResponse;\r\n        }\r\n\r\n        public static void RetryAll()\r\n        {\r\n            String path = String.Format(\"{0}\", m_upload_dir);\r\n\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                DataTable SerialNumbers = db.ExecuteDataTable(\"SELECT SerialNumber FROM BattleVideoCrawlQueue5 WHERE Complete = 1\");\r\n                SerialNumbers.PrimaryKey = new DataColumn[] { SerialNumbers.Columns[\"SerialNumber\"] };\r\n                IEnumerable<String> filenames = Directory.EnumerateFiles(path);\r\n\r\n                foreach (String s in filenames)\r\n                {\r\n                    int slash = s.LastIndexOf(Path.DirectorySeparatorChar) + 1;\r\n                    int dot = s.LastIndexOf(\".\");\r\n                    if (dot < 0) dot = s.Length;\r\n                    if (dot < slash) dot = s.Length;\r\n\r\n                    ulong SerialNumber;\r\n                    UInt64.TryParse(s.Substring(slash, dot - slash).Replace(\"-\", \"\"), \r\n                        out SerialNumber);\r\n\r\n                    if (SerialNumber == 0) continue;\r\n                    DataRow row = SerialNumbers.Rows.Find(SerialNumber);\r\n                    if (row == null) continue; // video in the folder but not database. todo: insert.\r\n\r\n                    SerialNumbers.Rows.Remove(row);\r\n                }\r\n\r\n                StringBuilder toRecheck = new StringBuilder();\r\n                bool hasRows = false;\r\n\r\n                foreach (DataRow row in SerialNumbers.Rows)\r\n                {\r\n                    ulong SerialNumber = (ulong)row[\"SerialNumber\"];\r\n                    if (hasRows) toRecheck.Append(',');\r\n                    toRecheck.Append(SerialNumber.ToString());\r\n                    hasRows = true;\r\n\r\n                    Console.WriteLine(\"Battle video {0} in database but not in directory. Requeueing.\", FormatVideoId(SerialNumber));\r\n                }\r\n                if (hasRows)\r\n                {\r\n                    db.ExecuteNonQuery(\"UPDATE BattleVideoCrawlQueue5 SET Complete = 0 \" +\r\n                        \"WHERE SerialNumber IN (\" + toRecheck.ToString() + \")\");\r\n                }\r\n\r\n                db.Clone();\r\n            }\r\n        }\r\n\r\n        public static MySqlConnection CreateConnection()\r\n        {\r\n            return new MySqlConnection(ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"].ConnectionString);\r\n        }\r\n\r\n        public static void LogError(Exception ex)\r\n        {\r\n            Console.WriteLine(ex.Message);\r\n            Console.WriteLine(ex.StackTrace);\r\n        }\r\n\r\n        public enum SearchSpecial : uint\r\n        {\r\n            None = 0x00000000,\r\n\r\n            // if special, all other fields are 0\r\n            Latest30 = 0x00000001,            // 01 00 00 00 00 00 00 00 00 00 00 00\r\n            TopLinkBattles = 0x00000003,      // 03 00 00 00 00 00 00 00 00 00 00 00\r\n            TopSubwayBattles = 0x00000002,    // 02 00 00 00 00 00 00 00 00 00 00 00\r\n        }\r\n\r\n        public enum SearchMetagames : uint\r\n        {\r\n            None = 0x00000000,\r\n\r\n            // Spcial (4), Species (2), Meta (4), Country (1), Region (1)\r\n            ColosseumSingleNoLauncher = 0x00bf0018,     // 00 00 00 00 ff ff 18 00 bf 00 ff ff\r\n            ColosseumSingleLauncher = 0x00bf0098,       // 00 00 00 00 ff ff 98 00 bf 00 ff ff\r\n            ColosseumDoubleNoLauncher = 0x00bf0019,     // 00 00 00 00 ff ff 19 00 bf 00 ff ff\r\n            ColosseumDoubleLauncher = 0x00bf0099,       // 00 00 00 00 ff ff 99 00 bf 00 ff ff\r\n            ColosseumTripleNoLauncher = 0x00bf001a,     // 00 00 00 00 ff ff 1a 00 bf 00 ff ff\r\n            ColosseumTripleLauncher = 0x00bf009a,       // 00 00 00 00 ff ff 9a 00 bf 00 ff ff\r\n            ColosseumRotationNoLauncher = 0x00bf001b,   // 00 00 00 00 ff ff 1b 00 bf 00 ff ff\r\n            ColosseumRotationLauncher = 0x00bf009b,     // 00 00 00 00 ff ff 9b 00 bf 00 ff ff\r\n            ColosseumMultiNoLauncher = 0x00bf001c,      // 00 00 00 00 ff ff 1c 00 bf 00 ff ff\r\n            ColosseumMultiLauncher = 0x00bf009c,        // 00 00 00 00 ff ff 9c 00 bf 00 ff ff\r\n\r\n            BattleSubwaySingle = 0x003f0000,            // 00 00 00 00 ff ff 00 00 3f 00 ff ff\r\n            BattleSubwayDouble = 0x003f0001,            // 00 00 00 00 ff ff 01 00 3f 00 ff ff\r\n            BattleSubwayMulti = 0x003f0004,             // 00 00 00 00 ff ff 04 00 3f 00 ff ff\r\n\r\n            RandomMatchupSingle = 0x003f0028,           // 00 00 00 00 ff ff 28 00 3f 00 ff ff\r\n            RandomMatchupDouble = 0x003f0029,           // 00 00 00 00 ff ff 29 00 3f 00 ff ff\r\n            RandomMatchupTriple = 0x003f002a,           // 00 00 00 00 ff ff 2a 00 3f 00 ff ff\r\n            RandomMatchupRotation = 0x003f002b,         // 00 00 00 00 ff ff 2b 00 3f 00 ff ff\r\n            RandomMatchupLauncher = 0x00bf00aa,         // 00 00 00 00 ff ff aa 00 bf 00 ff ff\r\n\r\n            BattleCompetition = 0x00380038,             // 00 00 00 00 ff ff 38 00 38 00 ff ff\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "bvCrawler5/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"bvCrawler5\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"bvCrawler5\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"8e1b6ee9-f993-4675-af27-963fe91e7fbe\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "bvCrawler5/bvCrawler5.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{BEA49E66-2204-4C10-8ED6-17F58018C2BD}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>bvCrawler5</RootNamespace>\r\n    <AssemblyName>bvCrawler5</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile>\r\n    </TargetFrameworkProfile>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\MySql.Data.6.9.8\\lib\\net40\\MySql.Data.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\r\n      <Project>{408EFC7E-C6B0-4160-8628-2679E34385CE}</Project>\r\n      <Name>Library</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\">\r\n      <SubType>Designer</SubType>\r\n    </None>\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "bvCrawler5/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"MySql.Data\" version=\"6.9.8\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "bvRestorer4/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=gts;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n<startup><supportedRuntime version=\"v2.0.50727\"/></startup></configuration>\n"
  },
  {
    "path": "bvRestorer4/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Wfc;\n\nnamespace bvRestorer4\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            if (args.Length == 0)\n            {\n                Console.WriteLine(\"Usage: bvRestorer4 <path>\");\n                Console.WriteLine(\"Attempts to insert all the files in path\\ninto the database in app configuration.\");\n                return;\n            }\n\n            m_pad = new byte[256];\n            FileStream s = File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + \"pad.bin\");\n            s.Read(m_pad, 0, m_pad.Length);\n            s.Close();\n\n            String[] filenames = Directory.GetFiles(args[0]);\n            int successCount = 0;\n\n            foreach (String filename in filenames)\n            {\n                FileStream fs = File.OpenRead(filename);\n                if (fs.Length != 0x1d60)\n                {\n                    Console.WriteLine(\"{0}: file size is wrong, skipped.\", filename);\n                    continue;\n                }\n\n                byte[] data = new byte[0x1d60];\n                fs.ReadBlock(data, 0, 0x1d60);\n                fs.Close();\n\n                int length = BitConverter.ToInt32(data, 0);\n                if (length != 0x1d60)\n                {\n                    Console.WriteLine(\"{0}: size field is wrong, skipped.\", filename);\n                    continue;\n                }\n\n                if (data[4] != 0xda)\n                {\n                    Console.WriteLine(\"{0}: request type is wrong, skipped.\", filename);\n                    continue;\n                }\n\n                CryptMessage(data);\n\n                if (data[5] != 0x59 || data[6] != 0x00 || data[7] != 0x00)\n                {\n                    Console.WriteLine(\"{0}: sanity bytes are wrong, skipped.\", filename);\n                    continue;\n                }\n\n                int pid = BitConverter.ToInt32(data, 0x08);\n                ulong serial = BitConverter.ToUInt64(data, 0x0c);\n                byte[] mainData = new byte[0x1d4c];\n                Array.Copy(data, 0x14, mainData, 0, 0x1d4c);\n\n                BattleVideoRecord4 record = new BattleVideoRecord4(pid, serial, mainData);\n\n                Database.Instance.BattleVideoUpload4(record);\n\n                Console.WriteLine(\"Video {0} added successfully.\", BattleVideoHeader4.FormatSerial(serial));\n                successCount++;\n            }\n            Console.WriteLine(\"{0} battle videos successfully added.\", successCount);\n            Console.ReadKey();\n        }\n\n        private static byte[] m_pad;\n\n        private static void CryptMessage(byte[] message)\n        {\n            if (message.Length < 5) return;\n            byte padOffset = (byte)(message[0] + message[4]);\n\n            // encrypt and decrypt are the same operation...\n            for (int x = 5; x < message.Length; x++)\n                message[x] ^= m_pad[(x + padOffset) & 0xff];\n        }\n    }\n}\n"
  },
  {
    "path": "bvRestorer4/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"bvRestorer4\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"bvRestorer4\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"68dcec49-1275-442c-adfd-3bd45e17f50b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "bvRestorer4/bvRestorer4.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>bvRestorer4</RootNamespace>\n    <AssemblyName>bvRestorer4</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>\n    </TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"pad.bin\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408EFC7E-C6B0-4160-8628-2679E34385CE}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "bvRestorer5/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        \n    <supportedRuntime version=\"v2.0.50727\"/></startup>\n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=gts;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n</configuration>\n"
  },
  {
    "path": "bvRestorer5/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Wfc;\n\nnamespace bvRestorer5\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            if (args.Length == 0)\n            {\n                Console.WriteLine(\"Usage: bvRestorer5 <path>\");\n                Console.WriteLine(\"Attempts to insert all the files in path\\ninto the database in app configuration.\");\n                return;\n            }\n\n            String[] filenames = Directory.GetFiles(args[0]);\n            int successCount = 0;\n\n            foreach (String filename in filenames)\n            {\n                FileStream fs = File.OpenRead(filename);\n                if (fs.Length != 0x18b8)\n                {\n                    Console.WriteLine(\"{0}: file size is wrong, skipped.\", filename);\n                    continue;\n                }\n\n                byte[] data = new byte[0x18b8];\n                fs.ReadBlock(data, 0, 0x18b8);\n                fs.Close();\n\n                int length = BitConverter.ToInt32(data, 0);\n                if (length != 0x18b8)\n                {\n                    Console.WriteLine(\"{0}: size field is wrong, skipped.\", filename);\n                    continue;\n                }\n\n                if (data[4] != 0xf2)\n                {\n                    Console.WriteLine(\"{0}: request type is wrong, skipped.\", filename);\n                    continue;\n                }\n\n                if (data[5] != 0x55 || data[6] != 0x00 || data[7] != 0x00)\n                {\n                    Console.WriteLine(\"{0}: sanity bytes are wrong, skipped.\", filename);\n                    continue;\n                }\n\n                int pid = BitConverter.ToInt32(data, 0x08);\n                ulong serial = BitConverter.ToUInt64(data, 0x0c);\n                byte[] mainData = new byte[0x18a4];\n                Array.Copy(data, 0x14, mainData, 0, 0x18a4);\n\n                BattleVideoRecord5 record = new BattleVideoRecord5(pid, serial, mainData);\n\n                Database.Instance.BattleVideoUpload5(record);\n\n                Console.WriteLine(\"Video {0} added successfully.\", BattleVideoHeader4.FormatSerial(serial));\n                successCount++;\n            }\n            Console.WriteLine(\"{0} battle videos successfully added.\", successCount);\n            Console.ReadKey();\n        }\n    }\n}\n"
  },
  {
    "path": "bvRestorer5/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"bvRestorer5\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"bvRestorer5\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"f2709d12-5840-4398-8f25-30c8c8e1bd99\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "bvRestorer5/bvRestorer5.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>bvRestorer5</RootNamespace>\n    <AssemblyName>bvRestorer5</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408efc7e-c6b0-4160-8628-2679e34385ce}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "gts/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"PkmnFoundations.GTS.Global\" Language=\"C#\" %>\r\n"
  },
  {
    "path": "gts/Global.asax.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.Security;\r\nusing System.Web.SessionState;\r\nusing GamestatsBase;\r\nusing PkmnFoundations.Data;\r\n\r\nnamespace PkmnFoundations.GTS\r\n{\r\n    public class Global : System.Web.HttpApplication\r\n    {\r\n        void Application_Start(object sender, EventArgs e)\r\n        {\r\n            // Code that runs on application startup\r\n            AppStateHelper.Pokedex(Application);\r\n        }\r\n\r\n        void Application_End(object sender, EventArgs e)\r\n        {\r\n            //  Code that runs on application shutdown\r\n\r\n        }\r\n\r\n        void Application_Error(object sender, EventArgs e)\r\n        {\r\n            // Code that runs when an unhandled error occurs\r\n\r\n        }\r\n\r\n        void Session_Start(object sender, EventArgs e)\r\n        {\r\n            // Code that runs when a new session is started\r\n\r\n        }\r\n\r\n        void Session_End(object sender, EventArgs e)\r\n        {\r\n            // Code that runs when a session ends. \r\n            // Note: The Session_End event is raised only when the sessionstate mode\r\n            // is set to InProc in the Web.config file. If session mode is set to StateServer \r\n            // or SQLServer, the event is not raised.\r\n\r\n        }\r\n\r\n        void Application_BeginRequest(object sender, EventArgs e)\r\n        {\r\n            String pathInfo, query;\r\n            String targetUrl = RewriteUrl(Request.Url.PathAndQuery, out pathInfo, out query);\r\n\r\n            if (targetUrl != null)\r\n            {\r\n                Context.RewritePath(targetUrl, pathInfo, query, false);\r\n            }\r\n        }\r\n\r\n        void Application_EndRequest(object sender, EventArgs e)\r\n        {\r\n            GamestatsSessionManager.FromContext(Context).PruneSessions();\r\n        }\r\n\r\n        public static String RewriteUrl(String url, out String pathInfo, out String query)\r\n        {\r\n            int q = url.IndexOf('?');\r\n            String path;\r\n            pathInfo = \"\";\r\n\r\n            if (q < 0)\r\n            {\r\n                path = url;\r\n                query = \"\";\r\n            }\r\n            else\r\n            {\r\n                path = url.Substring(0, q);\r\n                query = url.Substring(q + 1);\r\n            }\r\n\r\n            // todo: optimize and extend url pattern matching\r\n            // fixme: this doesn't work if the application isn't mounted at root\r\n            String[] split = path.Split('/');\r\n            if (split[0].Length > 0) return null;\r\n\r\n            if (split.Length > 2 && split[1] == \"pokemondpds\" && split[2] == \"web\")\r\n            {\r\n                pathInfo = \"/\" + String.Join(\"/\", split, 3, split.Length - 3);\r\n                return VirtualPathUtility.ToAbsolute(\"~/pokemondpds_web.ashx\");\r\n            }\r\n            else if (split.Length > 1 && split[1] == \"pokemondpds\")\r\n            {\r\n                pathInfo = \"/\" + String.Join(\"/\", split, 2, split.Length - 2);\r\n                return VirtualPathUtility.ToAbsolute(\"~/pokemondpds.ashx\");\r\n            }\r\n            else if (split.Length > 2 && split[1] == \"syachi2ds\" && split[2] == \"web\")\r\n            {\r\n                pathInfo = \"/\" + String.Join(\"/\", split, 3, split.Length - 3);\r\n                return VirtualPathUtility.ToAbsolute(\"~/syachi2ds.ashx\");\r\n            }\r\n            else if (split.Length > 1 && split[1] == \"pokemon\" && split[2] == \"validate\")\r\n            {\r\n                pathInfo = \"/pokemon/validate\";\r\n                return VirtualPathUtility.ToAbsolute(\"~/pkvldtprod.ashx\");\r\n            }\r\n            else if (split.Length > 1 && split[1] == \"dsio\" && split[2] == \"gw\")\r\n            {\r\n                pathInfo = \"/dsio/gw\";\r\n                return VirtualPathUtility.ToAbsolute(\"~/pgl.ashx\");\r\n            }\r\n            else return null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "gts/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"gts\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"gts\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"0c0aba84-599e-47fb-a8ac-15e08edd136a\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "gts/Properties/PublishProfiles/Local IIS.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <DeleteExistingFiles>True</DeleteExistingFiles>\n    <ExcludeApp_Data>False</ExcludeApp_Data>\n    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>\n    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>\n    <LastUsedPlatform>Any CPU</LastUsedPlatform>\n    <PublishProvider>FileSystem</PublishProvider>\n    <PublishUrl>C:\\inetpub\\gts</PublishUrl>\n    <WebPublishMethod>FileSystem</WebPublishMethod>\n    <SiteUrlToLaunchAfterPublish />\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "gts/Properties/PublishProfiles/Public.pubxml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file is used by the publish/package process of your Web project. You can customize the behavior of this process\nby editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <WebPublishMethod>MSDeploy</WebPublishMethod>\n    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>\n    <LastUsedPlatform>Any CPU</LastUsedPlatform>\n    <SiteUrlToLaunchAfterPublish></SiteUrlToLaunchAfterPublish>\n    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>\n    <ExcludeApp_Data>False</ExcludeApp_Data>\n    <MSDeployServiceURL></MSDeployServiceURL>\n    <DeployIisAppPath></DeployIisAppPath>\n    <RemoteSitePhysicalPath />\n    <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>\n    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>\n    <EnableMSDeployBackup>True</EnableMSDeployBackup>\n    <UserName></UserName>\n    <_SavePWD>False</_SavePWD>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "gts/Web.Public.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\n  <connectionStrings xdt:Transform=\"Replace\">\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n  \n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n  </system.web>\n  \n</configuration>\n"
  },
  {
    "path": "gts/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!--\r\n  For more information on how to configure your ASP.NET application, please visit\r\n  http://go.microsoft.com/fwlink/?LinkId=169433\r\n  -->\r\n\r\n<configuration>\r\n  <connectionStrings>\r\n    <add name=\"pkmnFoundationsConnectionString\"\r\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\r\n         providerName=\"MySql.Data.MySqlClient\" />\r\n  </connectionStrings>\r\n\r\n  <appSettings>\r\n    <add key=\"AllowedProxies\" value=\"::1,127.0.0.1,178.62.43.212,195.201.236.139,172.104.88.237\" />\r\n  </appSettings>\r\n\r\n  <system.web>\r\n    <compilation debug=\"true\" targetFramework=\"4.0\" />\r\n<!--\r\n    <authentication mode=\"Forms\">\r\n      <forms loginUrl=\"~/Account/Login.aspx\" timeout=\"2880\" />\r\n    </authentication>\r\n    -->\r\n\r\n    <membership>\r\n      <providers>\r\n        <clear/>\r\n      </providers>\r\n    </membership>\r\n\r\n    <profile>\r\n      <providers>\r\n        <clear/>\r\n      </providers>\r\n    </profile>\r\n\r\n    <roleManager enabled=\"false\">\r\n      <providers>\r\n        <clear/>\r\n      </providers>\r\n    </roleManager>\r\n\r\n    <customErrors mode=\"Off\" />\r\n\r\n  </system.web>\r\n\r\n  <system.webServer>\r\n    <modules runAllManagedModulesForAllRequests=\"true\"/>\r\n    <httpErrors existingResponse=\"PassThrough\"></httpErrors>\r\n  </system.webServer>\r\n</configuration>\r\n"
  },
  {
    "path": "gts/admin/Sessions.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Sessions.aspx.cs\" Inherits=\"PkmnFoundations.GTS.admin.Sessions\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<asp:Literal ID=\"litDebug\" runat=\"server\" />\n</asp:Content>\n"
  },
  {
    "path": "gts/admin/Sessions.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing GamestatsBase;\n\nnamespace PkmnFoundations.GTS.admin\n{\n    public partial class Sessions : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            StringBuilder builder = new StringBuilder();\n\n            GamestatsSessionManager gsm = GamestatsSessionManager.FromContext(Context);\n            builder.Append(\"Active sessions (\");\n            builder.Append(gsm.Sessions.Count);\n            builder.Append(\"):<br />\");\n            foreach (KeyValuePair<String, GamestatsSession> session in gsm.Sessions)\n            {\n                builder.Append(\"Game ID: \");\n                builder.Append(session.Value.GameId);\n                builder.Append(\"<br />PID: \");\n                builder.Append(session.Value.PID);\n                builder.Append(\"<br />Token: \");\n                builder.Append(session.Value.Token);\n                builder.Append(\"<br />Hash: \");\n                builder.Append(session.Value.Hash);\n                builder.Append(\"<br />URL: \");\n                builder.Append(session.Value.URL);\n                builder.Append(\"<br />Expires: \");\n                builder.Append(session.Value.ExpiryDate);\n                builder.Append(\"<br /><br />\");\n            }\n\n            litDebug.Text = builder.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "gts/admin/Sessions.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.admin {\n    \n    \n    public partial class Sessions {\n        \n        /// <summary>\n        /// litDebug control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litDebug;\n    }\n}\n"
  },
  {
    "path": "gts/admin/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n    <authorization xdt:Transform=\"Replace\">\n      <allow users=\"*\"/>\n    </authorization>\n\n  </system.web>\n</configuration>"
  },
  {
    "path": "gts/admin/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n    <authorization xdt:Transform=\"Replace\">\n      <deny users=\"*\"/>\n    </authorization>\n    \n  </system.web>\n</configuration>"
  },
  {
    "path": "gts/admin/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n<configuration>\n  <system.web>\n    <authorization>\n\n    </authorization>\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "gts/gts.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>\r\n    </ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}</ProjectGuid>\r\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PkmnFoundations.GTS</RootNamespace>\r\n    <AssemblyName>PkmnFoundations.GTS</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <UseIISExpress>true</UseIISExpress>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <OldToolsVersion>4.0</OldToolsVersion>\r\n    <IISExpressSSLPort />\r\n    <IISExpressAnonymousAuthentication />\r\n    <IISExpressWindowsAuthentication />\r\n    <IISExpressUseClassicPipelineMode />\r\n    <Use64BitIISExpress />\r\n    <UseGlobalApplicationHostFile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <PublishDatabaseSettings>\r\n      <Objects>\r\n        <ObjectGroup Name=\"pkmnFoundationsConnectionString-Deployment\" Order=\"1\">\r\n          <Destination Path=\"Server=localhost%3bDatabase=gts%3bUser ID=gts%3bPassword=gts%3bPooling=true%3b\" />\r\n          <Object Type=\"DbFullSql\" Enabled=\"False\">\r\n            <PreSource Path=\"Server=10.211.55.2%3bDatabase=gts%3bUser ID=gts%3bPassword=gts%3bPooling=true%3b\" ScriptSchema=\"True\" ScriptData=\"False\" CopyAllFullTextCatalogs=\"False\" DriDefaults=\"True\" />\r\n            <Source Path=\"obj\\Release\\AutoScripts\\pkmnFoundationsConnectionString-Deployment_SchemaOnly.sql\" Transacted=\"True\" />\r\n          </Object>\r\n        </ObjectGroup>\r\n      </Objects>\r\n    </PublishDatabaseSettings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Web.Extensions\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Web.Services\" />\r\n    <Reference Include=\"System.EnterpriseServices\" />\r\n    <Reference Include=\"System.Web.DynamicData\" />\r\n    <Reference Include=\"System.Web.Entity\" />\r\n    <Reference Include=\"System.Web.ApplicationServices\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"admin\\Sessions.aspx\" />\r\n    <Content Include=\"Global.asax\" />\r\n    <Content Include=\"admin\\Web.config\" />\r\n    <None Include=\"admin\\Web.Debug.config\">\r\n      <DependentUpon>Web.config</DependentUpon>\r\n    </None>\r\n    <None Include=\"admin\\Web.Release.config\">\r\n      <DependentUpon>Web.config</DependentUpon>\r\n    </None>\r\n    <Content Include=\"pkvldtprod.ashx\" />\r\n    <Content Include=\"pokemondpds_web.ashx\" />\r\n    <Content Include=\"masters\\MasterPage.master\" />\r\n    <Content Include=\"pgl.ashx\" />\r\n    <None Include=\"Properties\\PublishProfiles\\Local IIS.pubxml\" />\r\n    <None Include=\"Properties\\PublishProfiles\\Public.pubxml\" />\r\n    <Content Include=\"Web.config\">\r\n      <SubType>Designer</SubType>\r\n    </Content>\r\n    <None Include=\"Web.Public.config\">\r\n      <DependentUpon>Web.config</DependentUpon>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"admin\\Sessions.aspx.cs\">\r\n      <DependentUpon>Sessions.aspx</DependentUpon>\r\n      <SubType>ASPXCodeBehind</SubType>\r\n    </Compile>\r\n    <Compile Include=\"admin\\Sessions.aspx.designer.cs\">\r\n      <DependentUpon>Sessions.aspx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"masters\\MasterPage.master.cs\">\r\n      <DependentUpon>MasterPage.master</DependentUpon>\r\n      <SubType>ASPXCodeBehind</SubType>\r\n    </Compile>\r\n    <Compile Include=\"masters\\MasterPage.master.designer.cs\">\r\n      <DependentUpon>MasterPage.master</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"pgl.ashx.cs\">\r\n      <DependentUpon>pgl.ashx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"pkvldtprod.ashx.cs\">\r\n      <DependentUpon>pkvldtprod.ashx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"pokemondpds_web.ashx.cs\">\r\n      <DependentUpon>pokemondpds_web.ashx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"src\\AppStateHelper.cs\" />\r\n    <Compile Include=\"src\\BanHelper.cs\" />\r\n    <Compile Include=\"src\\FakeOpponentGenerator.cs\" />\r\n    <Compile Include=\"src\\IpAddressHelper.cs\" />\r\n    <Compile Include=\"syachi2ds.ashx.cs\">\r\n      <DependentUpon>syachi2ds.ashx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"pokemondpds.ashx.cs\">\r\n      <DependentUpon>pokemondpds.ashx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Global.asax.cs\">\r\n      <DependentUpon>Global.asax</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup />\r\n  <ItemGroup>\r\n    <Content Include=\"pokemondpds.ashx\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\GamestatsBase\\GamestatsBase\\GamestatsBase.csproj\">\r\n      <Project>{2d667f5b-f10d-44e2-93f6-dd555d9ee7df}</Project>\r\n      <Name>GamestatsBase</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\r\n      <Project>{408EFC7E-C6B0-4160-8628-2679E34385CE}</Project>\r\n      <Name>Library</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"syachi2ds.ashx\" />\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\r\n  <ProjectExtensions>\r\n    <VisualStudio>\r\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\r\n        <WebProjectProperties>\r\n          <UseIIS>False</UseIIS>\r\n          <AutoAssignPort>True</AutoAssignPort>\r\n          <DevelopmentServerPort>50067</DevelopmentServerPort>\r\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\r\n          <IISUrl>\r\n          </IISUrl>\r\n          <NTLMAuthentication>False</NTLMAuthentication>\r\n          <UseCustomServer>False</UseCustomServer>\r\n          <CustomServerUrl>\r\n          </CustomServerUrl>\r\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\r\n        </WebProjectProperties>\r\n      </FlavorProperties>\r\n    </VisualStudio>\r\n  </ProjectExtensions>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "gts/masters/MasterPage.master",
    "content": "﻿<%@ Master Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"MasterPage.master.cs\" Inherits=\"PkmnFoundations.GTS.masters.MasterPage\" %>\n\n<!DOCTYPE html>\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n    <title></title>\n    <asp:ContentPlaceHolder ID=\"cpHead\" runat=\"server\" />\n</head>\n<body>\n    <asp:ContentPlaceHolder ID=\"cpMain\" runat=\"server\" />\n</body>\n</html>\n"
  },
  {
    "path": "gts/masters/MasterPage.master.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace PkmnFoundations.GTS.masters\n{\n    public partial class MasterPage : System.Web.UI.MasterPage\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "gts/masters/MasterPage.master.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.masters {\n    \n    \n    public partial class MasterPage {\n        \n        /// <summary>\n        /// cpHead control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpHead;\n        \n        /// <summary>\n        /// cpMain control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpMain;\n    }\n}\n"
  },
  {
    "path": "gts/pgl.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"pgl.ashx.cs\" Class=\"PkmnFoundations.GTS.pgl\" %>\n"
  },
  {
    "path": "gts/pgl.ashx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.GTS\n{\n    /// <summary>\n    /// Summary description for pgl\n    /// </summary>\n    public class pgl : IHttpHandler\n    {\n\n        public void ProcessRequest(HttpContext context)\n        {\n            context.Response.ContentType = \"text/plain\";\n            context.Response.StatusCode = 502;// 200;\n            return;\n\n            // error messages by status code:\n            // 403, 404, 500: Comm error (13209)\n            // 502: The server is undergoing maintenance (13212)\n            // 503: The server is experiencing high traffic volumes (13211)\n\n            var qs = context.Request.QueryString;\n\n            if (context.Request.HttpMethod == \"GET\")\n            {\n                switch (qs[\"p\"])\n                {\n                    case \"account.playstatus\":\n\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        for (int i = 0; i < 0x7c; i++)\n                        {\n                            context.Response.OutputStream.WriteByte(0x00);\n                        }\n\n                        //# The command codes only work if is sleeping.\n\t\t\t\t\t    // Command codes:\n\t\t\t\t\t    // \\x00 - Wake up normally\n\t\t\t\t\t    // \\x01 - \"This Pokemon is not dreaming yet.\"\n\t\t\t\t\t    // \\x02 - \"This Pokemon is dreaming.\"\n\t\t\t\t\t    // \\x03 - Wake up + download new changes from server\n\t\t\t\t\t    // \\x04 - Wake up normally?\n\t\t\t\t\t    // \\x05 - Put Pokemon to sleep if none is sleeping\n\t\t\t\t\t    // \\x08 - Leads to account.create.upload\n\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        for (int i = 0; i < 0x40; i++)\n                        {\n                            context.Response.OutputStream.WriteByte(0x00);\n                        }\n\n                        break;\n\n\n                    case \"sleepily.bitlist\":\n\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        for (int i = 0; i < 0x7c; i++)\n                        {\n                            context.Response.OutputStream.WriteByte(0x00);\n                        }\n                        for (int i = 0; i < 0x80; i++)\n                        {\n                            context.Response.OutputStream.WriteByte(0xff);\n                        }\n\n                        break;\n\n                    case \"savedata.getbw\":\n                        context.Response.StatusCode = 502;\n                        //context.Response.OutputStream.WriteBytes(new byte[] { 0x05, 0x00, 0x00, 0x00 });\n                        break;\n\n\n                    case \"savedata.download\":\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        break;\n\n                    case \"worldbattle.download\":\n                        context.Response.StatusCode = 502;\n                        break;\n\n                    default:\n                        context.Response.StatusCode = 502;\n                        break;\n                }\n            }\n            else if (context.Request.HttpMethod == \"POST\")\n            {\n                switch (qs[\"p\"])\n                {\n                    case \"account.createdata\":\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        break;\n\n                    case \"account.create.upload\":\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        break;\n\n                    case \"savedata.upload\":\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        break;\n\n                    case \"worldbattle.upload\":\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        break;\n\n                    case \"savedata.download.finish\":\n                        context.Response.OutputStream.WriteBytes(new byte[] { 0x00, 0x00, 0x00, 0x00 });\n                        break;\n\n                    default:\n                        context.Response.StatusCode = 502;\n                        break;\n                }\n            }\n        }\n\n        public bool IsReusable\n        {\n            get\n            {\n                return true;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "gts/pkvldtprod.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"pkvldtprod.ashx.cs\" Class=\"PkmnFoundations.GTS.pkvldtprod\" %>\n"
  },
  {
    "path": "gts/pkvldtprod.ashx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.IO;\nusing PkmnFoundations.Support;\nusing System.Text;\n\nnamespace PkmnFoundations.GTS\n{\n    /// <summary>\n    /// Summary description for pkvldtprod\n    /// </summary>\n    public class pkvldtprod : IHttpHandler\n    {\n        public void ProcessRequest(HttpContext context)\n        {\n            byte[] requestData = new byte[(int)context.Request.InputStream.Length];\n            context.Request.InputStream.ReadBlock(requestData, 0, (int)context.Request.InputStream.Length);\n\n            // this is a mysterious token of unknown purpose. It seems to vary\n            // with the type of request being done.\n            // On GTS requests, it's 83 characters long and begins with NDS.\n            // In Random Matchup, it looks more like a base64 string, is 88\n            // chars long and encodes 64 bytes of random looking data.\n            // It is null terminated (variable length), followed immediately \n            // by the rest of the message.\n            int tokenLength = Array.IndexOf<byte>(requestData, 0x00);\n            String token = StringHelper.BytesToString(requestData, 0, tokenLength, Encoding.UTF8);\n            int offset = tokenLength + 1;\n            \n            RequestType type = (RequestType)BitConverter.ToInt16(requestData, offset);\n            offset += 2;\n\n            PokemonValidationResult[] results;\n\n            switch (type)\n            {\n                case RequestType.RandomMatchup:\n                case RequestType.GTS:\n                    {\n                        int pkmCount = (requestData.Length - offset) / 220;\n                        results = new PokemonValidationResult[pkmCount];\n\n                        for (int x = 0; x < results.Length; x++)\n                        {\n                            byte[] data = new byte[220];\n                            Array.Copy(requestData, offset + x, data, 0, 220);\n                            Pokemon5 pkm = new Pokemon5(data);\n                            // todo: actual validation goes here\n                            results[x] = PokemonValidationResult.Valid;\n                        }\n                    } break;\n                /*\n                case RequestType.BattleSubway:\n                    {\n                        // todo: Need more info on this structure\n                        // todo: Perform actual validation here so that we can\n                        // error out before the player actually does their challenge\n                    } break;\n                */\n                // todo: there also appears to be a Battle Video request?\n                default:\n                    {\n                        // Don't understand this request. Give it a response containing\n                        // all 00s so stuff depending on it won't break.\n                        // The game accepts a hash of all 00s and doesn't care what's contained\n                        // in the response beyond its expected length so this will work.\n                        // fixme: Once we start generating real signatures, they will prevent\n                        // this from returning the necessary number of 00s in all cases.\n                        results = new PokemonValidationResult[]{\n                            PokemonValidationResult.Valid,\n                            PokemonValidationResult.Valid,\n                            PokemonValidationResult.Valid,\n                            PokemonValidationResult.Valid,\n                            PokemonValidationResult.Valid,\n                            PokemonValidationResult.Valid};\n                    } break;\n            }\n\n            PartyValidationResult result = PartyValidationResult.Valid;\n            foreach (PokemonValidationResult pkr in results)\n            {\n                if (pkr != PokemonValidationResult.Valid) result = PartyValidationResult.Invalid;\n            }\n\n            context.Response.ContentType = \"text/plain\";\n            context.Response.OutputStream.WriteByte((byte)result); // success\n            foreach (PokemonValidationResult pkr in results)\n            {\n                context.Response.OutputStream.Write(BitConverter.GetBytes((int)pkr), 0, 4);\n            }\n            // placeholder for signature.\n            // Should be 128 bytes of an unknown hashing/signing algorithm\n            context.Response.Write(\"Hey this is a totally legit pkvldtprod signature pwease accept it uwu\");\n            context.Response.OutputStream.Write(new byte[69], 0, 69); // nice\n            //context.Response.OutputStream.Write(new byte[128], 0, 128);\n        }\n\n        private enum PartyValidationResult : byte\n        {\n            Valid = 0x00,\n            Invalid = 0x01\n        }\n\n        private enum PokemonValidationResult : int\n        {\n            Valid = 0x00000000,\n            Invalid = 0x3c000000\n        }\n\n        private enum RequestType : short\n        {\n            RandomMatchup = 0x0000,\n            GTS = 0x0100,\n            BattleSubway = 0x0400\n        }\n\n        private void Error400(HttpContext context)\n        {\n            context.Response.StatusCode = 400;\n            context.Response.ContentType = \"text/plain\";\n            context.Response.Write(\"Bad request\");\n        }\n\n        public bool IsReusable\n        {\n            get\n            {\n                return true;\n            }\n        }\n    }\n\n    internal class Pokemon5\n    {\n        // placeholder until I actually do this for real...\n        byte[] Data;\n        public Pokemon5(byte[] data)\n        {\n            if (data.Length != 220) throw new ArgumentException();\n            Data = data;\n        }\n    }\n}"
  },
  {
    "path": "gts/pokemondpds.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"pokemondpds.ashx.cs\" Class=\"PkmnFoundations.GTS.pokemondpds\" %>\r\n"
  },
  {
    "path": "gts/pokemondpds.ashx.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.SessionState;\r\nusing PkmnFoundations.Data;\r\nusing PkmnFoundations.Structures;\r\nusing PkmnFoundations.Support;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing GamestatsBase;\r\nusing PkmnFoundations.Wfc;\r\n\r\nnamespace PkmnFoundations.GTS\r\n{\r\n    /// <summary>\r\n    /// Summary description for pokemondpds\r\n    /// </summary>\r\n    public class pokemondpds : GamestatsHandler\r\n    {\r\n        public pokemondpds()\r\n            : base(\"sAdeqWo3voLeC5r16DYv\", \r\n            0x45, 0x1111, 0x80000000, 0x4a3b2c1d, \"pokemondpds\", \r\n            GamestatsRequestVersions.Version2, GamestatsResponseVersions.Version1, true, true)\r\n        {\r\n\r\n        }\r\n\r\n        public override void ProcessGamestatsRequest(byte[] data, MemoryStream response, string url, int pid, HttpContext context, GamestatsSession session)\r\n        {\r\n            {\r\n                BanStatus ban = BanHelper.GetBanStatus(pid, IpAddressHelper.GetIpAddress(context.Request), Generations.Generation4);\r\n                if (ban != null && ban.Level > BanLevels.Restricted)\r\n                {\r\n                    ShowError(context, 403);\r\n                    return;\r\n                }\r\n            }\r\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(context.Application);\r\n\r\n            switch (url)\r\n            {\r\n                default:\r\n                    SessionManager.Remove(session);\r\n\r\n                    // unrecognized page url\r\n                    ShowError(context, 404);\r\n                    return;\r\n\r\n                #region Common\r\n                // Called during startup. Seems to contain trainer profile stats.\r\n                case \"/pokemondpds/common/setProfile.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (data.Length != 100)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n#if !DEBUG\r\n                    try\r\n                    {\r\n#endif\r\n                        byte[] profileBinary = new byte[100];\r\n                        Array.Copy(data, 0, profileBinary, 0, 100);\r\n                        TrainerProfile4 profile = new TrainerProfile4(pid, profileBinary, IpAddressHelper.GetIpAddress(context.Request));\r\n                        Database.Instance.GamestatsSetProfile4(profile);\r\n#if !DEBUG\r\n                    }\r\n                    catch { }\r\n#endif\r\n                    short clientSecret = BitConverter.ToInt16(data, 96);\r\n                    short mailSecret = BitConverter.ToInt16(data, 98);\r\n\r\n                    // response:\r\n                    // 4 bytes of response code A\r\n                    // 4 bytes of response code B\r\n                    // Response code A values:\r\n                    // 0: Continues normally.\r\n                    // 1: The data was corrupted. It could not be sent.\r\n                    // 2: The server is undergoing maintenance. Please connect again later.\r\n                    // 3: BSOD\r\n                    if (mailSecret == -1)\r\n                    {\r\n                        // Register wii mail\r\n                        // Response code B values:\r\n                        // 0: There was a communication error.\r\n                        // 1: The Registration Code has been sent to your Wii console. Please enter the Registration Code.\r\n                        // 2: There was an error while attempting to send an authentication Wii message.\r\n                        // 3: There was a communication error.\r\n                        // 4: BSOD\r\n                        response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 },\r\n                            0, 8);\r\n                    }\r\n                    else if (mailSecret != 0 || clientSecret != 0)\r\n                    {\r\n                        // Send wii mail confirmation code OR GTS when mail is configured (we can't tell them apart T__T)\r\n                        // (todo: We could use database to tell them apart.\r\n                        // If the previously stored profile has mailSecret == -1 then this is a wii mail confirmation.\r\n                        // If the previously stored profile has mailSecret == this mailSecret then this is GTS.)\r\n                        // Response code B values:\r\n                        // 0: Your Wii Number has been registered.\r\n                        // 1: There was a communication error.\r\n                        // 2: There was a communication error.\r\n                        // 3: Incorrect Registration Code.\r\n                        // 4: BSOD\r\n                        response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },\r\n                            0, 8);\r\n                    }\r\n                    else\r\n                    {\r\n                        // GTS\r\n                        // Response code B values:\r\n                        // 0: Continues normally\r\n                        // 1: There was a communication error.\r\n                        // 2: There was a communication error.\r\n                        // 3: There was a Wii message authentication error.\r\n                        // 4: BSOD\r\n                        response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },\r\n                            0, 8);\r\n                    }\r\n                }\r\n                break;\r\n                #endregion\r\n\r\n                #region GTS\r\n                // Called during startup. Unknown purpose.\r\n                case \"/pokemondpds/worldexchange/info.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    // todo: find out the meaning of this request.\r\n                    // is it simply done to check whether the GTS is online?\r\n\r\n                    var ip = IpAddressHelper.GetIpAddress(context.Request);\r\n                    Database.Instance.GamestatsBumpProfile4(pid, ip);\r\n\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                } break;\r\n\r\n                // Called during startup and when you check your pokemon's status.\r\n                case \"/pokemondpds/worldexchange/result.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    /* After the above step(s) or performing any of \r\n                    * the tasks below other than searching, the game \r\n                    * makes a request to /pokemondpds/worldexchange/result.asp.\r\n                    * If the game has had a Pokémon sent to it via a trade, \r\n                    * the server responds with the entire encrypted Pokémon \r\n                    * save struct. Otherwise, if there is a Pokémon deposited \r\n                    * in the GTS, it responds with 0x0004; if not, it responds \r\n                    * with 0x0005. */\r\n\r\n                    GtsRecord4 record = Database.Instance.GtsDataForUser4(pokedex, pid);\r\n\r\n                    if (record == null)\r\n                    {\r\n                        // No pokemon in the system\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                    }\r\n                    else if (record.IsExchanged > 0)\r\n                    {\r\n                        // traded pokemon arriving!!!\r\n                        response.Write(record.Save(), 0, 292);\r\n                    }\r\n                    else\r\n                    {\r\n                        // my existing pokemon is in the system, untraded\r\n                        response.Write(new byte[] { 0x04, 0x00 }, 0, 2);\r\n                    }\r\n\r\n                    // other responses:\r\n                    // 0-2 causes a BSOD but it flashes siezure. Scary\r\n                    // 3 causes it to be \"checking GTS's status\" forever.\r\n                    // 6 is also the flashy BSOD. So probably all invalid values do that.\r\n\r\n                } break;\r\n\r\n                // Called after result.asp returns 4 when you check your pokemon's status\r\n                case \"/pokemondpds/worldexchange/get.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    // This can be called in 3 circumstances:\r\n                    // 1. After result.asp when it says your existing pokemon is in the system\r\n                    // 2. When you check the summary of your pokemon (Platinum onward)\r\n                    // 3. When you attempt to retract your offer, just before saving.\r\n\r\n                    GtsRecord4 record = Database.Instance.GtsDataForUser4(pokedex, pid);\r\n\r\n                    if (record == null)\r\n                    {\r\n                        // No pokemon in the system\r\n\r\n                        // response codes:\r\n                        // 0x01: BSOD\r\n                        // 0x02: BSOD\r\n                        // 0x03, entering GTS: Causes it to show no pokemon in the system, as if result.asp returned 5.\r\n                        // 0x03, checking summary: A communication error has occurred. You will be returned to the title screen. Please press the A Button.\r\n                        // 0x03, retracting: Communication error... (and it boots you)\r\n                        // 0x04: BSOD\r\n                        // 0x05, entering GTS: Causes it to show no pokemon in the system, as if result.asp returned 5.\r\n                        // 0x05, checking summary: A communication error has occurred. You will be returned to the title screen. Please press the A Button.\r\n                        // 0x05, retracting: Communication error... (and it boots you)\r\n                        // 0x06: BSOD\r\n                        // 0x07: BSOD\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n                    else\r\n                    {\r\n                        // just write the record whether traded or not...\r\n                        // todo: confirm that writing a traded record here will allow the trade to conclude\r\n                        response.Write(record.Save(), 0, 292);\r\n                    }\r\n                } break;\r\n\r\n                // Called after result.asp returns an inbound pokemon record to delete it\r\n                case \"/pokemondpds/worldexchange/delete.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    GtsRecord4 record = Database.Instance.GtsDataForUser4(pokedex, pid);\r\n                    if (record == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x03, 0x00 }, 0, 2);\r\n                    }\r\n                    else if (record.IsExchanged > 0)\r\n                    {\r\n                        // Responses:\r\n                        // 0x00: BSOD\r\n                        // 0x01: Success\r\n                        // 0x02: BSOD\r\n                        // 0x03: A communication error has occurred. You have been disconnected from Nintendo Wi-Fi Connection. You will be returned to wherever you last saved. Please press the A Button.\r\n                        // 0x04: BSOD\r\n                        // 0x05: Either the GTS is experiencing high traffic volumes or the service is down. Please wait a while and try again. You have been disconnected from Nintendo Wi-Fi Connection, Please press the A Button.\r\n                        // 0x06: BSOD\r\n                        // 0x07: BSOD\r\n\r\n                        // delete the arrived pokemon from the system\r\n                        // todo: add transactions\r\n                        // todo: log the successful trade?\r\n                        // (either here or when the trade is done)\r\n                        bool success = Database.Instance.GtsDeletePokemon4(pid);\r\n                        if (success)\r\n                            response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                        else\r\n                            response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                    }\r\n                    else\r\n                    {\r\n                        // own pokemon is there, fail. Use return.asp instead.\r\n                        response.Write(new byte[] { 0x03, 0x00 }, 0, 2);\r\n                    }\r\n                } break;\r\n\r\n                // called to delete your own pokemon after taking it back\r\n                case \"/pokemondpds/worldexchange/return.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    GtsRecord4 record = Database.Instance.GtsDataForUser4(pokedex, pid);\r\n\r\n                    if (record == null || // no pokemon in the system\r\n                        record.IsExchanged > 0 || // a traded pokemon is there, fail. Use delete.asp instead.\r\n                        !Database.Instance.GtsCheckLockStatus4(record.TradeId, pid)) // someone else is in the process of trading for this\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                    }\r\n                    else\r\n                    {\r\n                        // delete own pokemon\r\n                        // todo: add transactions\r\n                        bool success = Database.Instance.GtsDeletePokemon4(pid);\r\n                        if (success)\r\n                        {\r\n                            response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                        }\r\n                        else\r\n                        {\r\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        }\r\n                    }\r\n                } break;\r\n\r\n                // Called when you deposit a pokemon into the system.\r\n                case \"/pokemondpds/worldexchange/post.asp\":\r\n                {\r\n                    if (data.Length != 292)\r\n                    {\r\n                        SessionManager.Remove(session);\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    // todo: add transaction\r\n                    if (Database.Instance.GtsDataForUser4(pokedex, pid) != null)\r\n                    {\r\n                        // there's already a pokemon inside.\r\n                        // Force the player out so they'll recheck its status.\r\n                        SessionManager.Remove(session);\r\n                        response.Write(new byte[] { 0x0e, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // keep the record in memory while we wait for post_finish.asp request\r\n                    byte[] recordBinary = new byte[292];\r\n                    Array.Copy(data, 0, recordBinary, 0, 292);\r\n                    GtsRecord4 record = new GtsRecord4(pokedex, recordBinary);\r\n                    record.IsExchanged = 0;\r\n                    if (!record.Validate())\r\n                    {\r\n                        // hack check failed\r\n                        SessionManager.Remove(session);\r\n\r\n                        // responses:\r\n                        // 0x00: Appears to start depositing? todo: test if this code leads to a normal deposit.\r\n                        // 0x01: successful deposit\r\n                        // 0x02-0x03: Communication error...\r\n                        // 0x04-0x06: bsod\r\n                        // 0x07: The GTS is very crowded now. Please try again later. (and it boots you!)\r\n                        // 0x08-0x0d: That Pokémon may not be offered for trade!\r\n                        // 0x0e: You were disconnected from the GTS. Returning to the reception counter.\r\n                        // 0x0f: Blue screen of death\r\n                        response.Write(new byte[] { 0x0c, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // the following two fields are blank in the uploaded record.\r\n                    // The server must provide them instead.\r\n                    record.TimeDeposited = DateTime.UtcNow;\r\n                    record.TimeExchanged = null;\r\n                    record.PID = pid;\r\n\r\n                    session.Tag = record;\r\n                    // todo: delete any other post.asp sessions registered under this PID\r\n\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n\r\n                case \"/pokemondpds/worldexchange/post_finish.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (data.Length != 8)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    // todo: these _finish requests seem to come with a magic number of 4 bytes\r\n                    // at offset 0. Find out what this is supposed to do and how to validate it.\r\n\r\n                    // find a matching session which contains our record\r\n                    GamestatsSession prevSession = SessionManager.FindSession(pid, \"/pokemondpds/worldexchange/post.asp\");\r\n                    if (prevSession == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n\r\n                    SessionManager.Remove(prevSession);\r\n                    if (prevSession.Tag == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n                    AssertHelper.Assert(prevSession.Tag is GtsRecord4);\r\n                    GtsRecord4 record = (GtsRecord4)prevSession.Tag;\r\n\r\n                    if (Database.Instance.GtsDepositPokemon4(record))\r\n                    {\r\n                        // Responses:\r\n                        // 0x00: BSOD\r\n                        // 0x01: Success\r\n                        // 0x02: A communication error has occurred. You have been disconnected from Nintendo Wi-Fi Connection. You will be returned to wherever you last saved. Please press the A Button.\r\n                        // 0x03: Communication error... (and it thinks the upload was successful)\r\n                        // 0x04: BSOD\r\n                        // 0x05: A communication error has occurred. You have been disconnected from Nintendo Wi-Fi Connection. You will be returned to wherever you last saved. Please press the A Button.\r\n                        // 0x06: BSOD\r\n                        // 0x07: BSOD\r\n                        response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    }\r\n                    else\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n\r\n                // the search request has a funny bit string request of search terms\r\n                // and just returns a chunk of records end to end.\r\n                case \"/pokemondpds/worldexchange/search.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (data.Length < 7 || data.Length > 8)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    ushort species = BitConverter.ToUInt16(data, 0);\r\n                    if (species < 1)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    int resultsCount = (int)data[6];\r\n                    if (resultsCount < 1) break; // optimize away requests for no rows\r\n\r\n                    Genders gender = (Genders)data[2];\r\n                    byte minLevel = data[3];\r\n                    byte maxLevel = data[4];\r\n                    // byte 5 unknown\r\n                    byte country = 0;\r\n                    if (data.Length > 7) country = data[7];\r\n\r\n                    if (resultsCount > 7) resultsCount = 7; // stop DDOS\r\n                    GtsRecord4[] records = Database.Instance.GtsSearch4(pokedex, pid, species, gender, minLevel, maxLevel, country, resultsCount);\r\n                    foreach (GtsRecord4 record in records)\r\n                    {\r\n                        response.Write(record.Save(), 0, 292);\r\n                    }\r\n\r\n                    Database.Instance.GtsSetLastSearch4(pid);\r\n\r\n                } break;\r\n\r\n                // the exchange request uploads a record of the exchangee pokemon\r\n                // plus the desired PID to trade for at the very end.\r\n                case \"/pokemondpds/worldexchange/exchange.asp\":\r\n                {\r\n                    if (data.Length != 296)\r\n                    {\r\n                        SessionManager.Remove(session);\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    byte[] uploadData = new byte[292];\r\n                    Array.Copy(data, 0, uploadData, 0, 292);\r\n                    GtsRecord4 upload = new GtsRecord4(pokedex, uploadData);\r\n                    upload.IsExchanged = 0;\r\n                    int targetPid = BitConverter.ToInt32(data, 292);\r\n                    GtsRecord4 result = Database.Instance.GtsDataForUser4(pokedex, targetPid);\r\n                    DateTime ? searchTime = Database.Instance.GtsGetLastSearch4(pid);\r\n\r\n                    if (result == null || searchTime == null || \r\n                        result.TimeDeposited > (DateTime)searchTime || // If this condition is met, it means the pokemon in the system is DIFFERENT from the one the user is trying to trade for, ie. it was deposited AFTER the user did their search. The one the user wants was either taken back or traded.\r\n                        result.IsExchanged != 0)\r\n                    {\r\n                        // Pokémon is traded (or was never here to begin with)\r\n                        SessionManager.Remove(session);\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // enforce request requirements server side\r\n                    if (!upload.Validate() || !upload.CanTrade(result))\r\n                    {\r\n                        // todo: find the correct codes for these\r\n                        SessionManager.Remove(session);\r\n\r\n                        // responses:\r\n                        // 0x00-0x01: bsod\r\n                        // 0x02: Unfortunately, it was traded to another Trainer.\r\n                        // 0x03-0x07: bsod\r\n                        // 0x08-0x0d: That Pokémon may not be offered for trade!\r\n                        // 0x0e: You were disconnected from the GTS. Returning to the reception counter.\r\n                        // 0x0f: bsod\r\n                        response.Write(new byte[] { 0x0c, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n\r\n                    if (!Database.Instance.GtsLockPokemon4(result.TradeId, pid))\r\n                    {\r\n                        // failed to acquire lock, implying someone else beat us here. Say already traded.\r\n                        SessionManager.Remove(session);\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // uncomment these two lines if you're replaying gamestats requests and need to skip the random token\r\n                    //session = new GamestatsSession(this.GameId, this.Salt, pid, \"/pokemondpds/worldexchange/exchange.asp\");\r\n                    //SessionManager.Add(session);\r\n\r\n                    object[] tag = new GtsRecord4[2];\r\n                    tag[0] = upload;\r\n                    tag[1] = result;\r\n                    session.Tag = tag;\r\n\r\n                    GtsRecord4 tradedResult = result.Clone();\r\n                    tradedResult.FlagTraded(upload); // only real purpose is to generate a proper response\r\n\r\n                    // todo: we need a mechanism to \"reserve\" a pokemon being traded at this\r\n                    // point in the process, but be able to relinquish it if exchange_finish\r\n                    // never happens.\r\n                    // Currently, if two people try to take the same pokemon, it will appear\r\n                    // to work for both but then fail for the second after they've saved\r\n                    // their game. This causes a hard crash and a \"save file is corrupt, \r\n                    // \"previous will be loaded\" error when restarting.\r\n                    // the reservation can be done in application state and has no reason\r\n                    // to touch the database. (exchange_finish won't work anyway if application\r\n                    // state is lost.)\r\n\r\n                    // I also have a hunch that failure to send the exchange_finish request\r\n                    // is what causes the notorious GTS glitch where a pokemon is listed\r\n                    // under the wrong species and you can't trade it\r\n\r\n                    response.Write(result.Save(), 0, 292);\r\n\r\n                } break;\r\n\r\n                case \"/pokemondpds/worldexchange/exchange_finish.asp\":\r\n                {\r\n                    //if (session != null)\r\n                        SessionManager.Remove(session);\r\n\r\n                    if (data.Length != 8)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    // find a matching session which contains our record\r\n                    GamestatsSession prevSession = SessionManager.FindSession(pid, \"/pokemondpds/worldexchange/exchange.asp\");\r\n                    if (prevSession == null)\r\n                    {\r\n                        // response codes:\r\n                        // 0x00: I thought this meant fail but it also sometimes succeeds\r\n                        // 0x01: Success (the normal success response)\r\n                        // 0x02: Either the GTS is experiencing high traffic volumes or the service is down. Please wait a while and try again.\r\n                        // 0x03: Success (apparently)\r\n                        // 0x04: Success (apparently)\r\n                        // 0x05: Success (apparently)\r\n                        // 0x06: Success (apparently)\r\n                        // ...\r\n                        // 0x0f: Success (apparently)\r\n                        // I'm going to reason that responses other than 0x02 will all succeed, at least on platinum\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n\r\n                    SessionManager.Remove(prevSession);\r\n                    if (prevSession.Tag == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n                    AssertHelper.Assert(prevSession.Tag is GtsRecord4[]);\r\n                    GtsRecord4[] tag = (GtsRecord4[])prevSession.Tag;\r\n                    AssertHelper.Assert(tag.Length == 2);\r\n\r\n                    GtsRecord4 upload = tag[0];\r\n                    GtsRecord4 result = tag[1];\r\n\r\n                    if (Database.Instance.GtsTradePokemon4(upload, result, pid))\r\n                        response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    else\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n                #endregion\r\n\r\n                #region Battle Tower\r\n                case \"/pokemondpds/battletower/info.asp\":\r\n                    SessionManager.Remove(session);\r\n\r\n                    // Probably an availability/status code.\r\n                    Database.Instance.GamestatsBumpProfile4(pid, IpAddressHelper.GetIpAddress(context.Request));\r\n\r\n                    // Response codes:\r\n                    // 0x00: BSOD\r\n                    // 0x01: Continues normally\r\n                    // 0x02: BSOD\r\n                    // 0x03: The Wi-Fi Battle Tower is currently undergoing maintenance. Please try again later.\r\n                    // 0x04: The Wi-Fi Battle Tower is very crowded. Please try again later.\r\n                    // 0x05: Unable to connect to the Wi-Fi Battle Tower. Returning to the reception counter.\r\n                    // 0x06: BSOD\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    break;\r\n\r\n                case \"/pokemondpds/battletower/roomnum.asp\":\r\n                    SessionManager.Remove(session);\r\n\r\n                    //byte rank = data[0x00];\r\n                    response.Write(new byte[] { 0x32, 0x00 }, 0, 2);\r\n                    break;\r\n\r\n                case \"/pokemondpds/battletower/download.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (data.Length != 2)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    byte rank = data[0x00];\r\n                    byte roomNum = data[0x01];\r\n\r\n                    if (rank > 9 || roomNum > 49)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    FakeOpponentFactory4 fact = new FakeOpponentFactory4();\r\n                    BattleTowerRecord4[] opponents = Database.Instance.BattleTowerGetOpponents4(pokedex, pid, rank, roomNum);\r\n                    BattleTowerProfile4[] leaders = Database.Instance.BattleTowerGetLeaders4(pokedex, rank, roomNum);\r\n                    BattleTowerRecordBase[] fakeOpponents = FakeOpponentGenerator.GenerateFakeOpponents(fact, 7 - opponents.Length);\r\n\r\n                    foreach (BattleTowerRecord4 record in fakeOpponents)\r\n                    {\r\n                        response.Write(record.Save(), 0, 228);\r\n                    }\r\n\r\n                    foreach (BattleTowerRecord4 record in opponents)\r\n                    {\r\n                        response.Write(record.Save(), 0, 228);\r\n                    }\r\n\r\n                    foreach (BattleTowerProfile4 leader in leaders)\r\n                    {\r\n                        response.Write(leader.Save(), 0, 34);\r\n                    }\r\n\r\n                    if (leaders.Length < 30)\r\n                    {\r\n                        byte[] fakeLeader = new BattleTowerProfile4\r\n                        (\r\n                            new EncodedString4(\"-----\", 16), \r\n                            Versions.Platinum, Languages.English, \r\n                            0, 0, 0x00000000, new TrendyPhrase4(5, 0, 0, 0), 0, 0\r\n                        ).Save();\r\n\r\n                        for (int x = leaders.Length; x < 30; x++)\r\n                        {\r\n                            response.Write(fakeLeader, 0, 34);\r\n                        }\r\n                    }\r\n\r\n                    // This is completely insane. The game crashes when you\r\n                    // use Check Leaders if the response arrives too fast,\r\n                    // so we artificially delay it.\r\n                    // todo: This is slower than it needs to be if the\r\n                    // database is slow to respond. We should sleep for a\r\n                    // variable time based on when the request was received.\r\n                    Thread.Sleep(500);\r\n\r\n                } break;\r\n\r\n                case \"/pokemondpds/battletower/upload.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (data.Length != 239)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    BattleTowerRecord4 record = new BattleTowerRecord4(pokedex, data, 0);\r\n\r\n                    record.Rank = data[0xe4];\r\n                    record.RoomNum = data[0xe5];\r\n                    record.BattlesWon = data[0xe6];\r\n                    record.Unknown5 = BitConverter.ToUInt64(data, 0xe7);\r\n                    record.PID = pid;\r\n\r\n                    foreach (var p in record.Party)\r\n                    {\r\n                        // todo: add battle tower specific checks:\r\n                        // item clause, species clause, banned species, banned items\r\n                        // https://bulbapedia.bulbagarden.net/wiki/Battle_Tower_(Sinnoh)#Restrictions\r\n                        if (!p.Validate().IsValid)\r\n                        {\r\n                            // Tell the client it was successful so they don't keep retrying.\r\n                            response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    // todo: Do we want to store their record anyway if they lost the first round?\r\n                    if (record.BattlesWon > 0)\r\n                        Database.Instance.BattleTowerUpdateRecord4(record);\r\n                    if (record.BattlesWon == 7)\r\n                        Database.Instance.BattleTowerAddLeader4(record);\r\n\r\n                    // List of responses:\r\n                    // 0x00: BSOD\r\n                    // 0x01: Uploads successfully\r\n                    // 0x02: That number cannot be specified for the Wi-Fi Battle Tower.\r\n                    // 0x03: BSOD\r\n                    // 0x04: The Wi-Fi Battle Tower is very crowded. Please try again later.\r\n                    // 0x05: Unable to connect to the Wi-Fi Battle Tower. Returning to the reception counter.\r\n                    // 0x06: BSOD\r\n                    // 0x07: BSOD\r\n                    // 0x08: BSOD\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n\r\n                #endregion\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "gts/pokemondpds_web.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"pokemondpds_web.ashx.cs\" Class=\"PkmnFoundations.GTS.pokemondpds_web\" %>\n"
  },
  {
    "path": "gts/pokemondpds_web.ashx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Web;\nusing GamestatsBase;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS\n{\n    /// <summary>\n    /// Gamestats handler for Wi-Fi Plaza\n    /// </summary>\n    public class pokemondpds_web : GamestatsHandler\n    {\n        public pokemondpds_web()\n            : base(\"uLMOGEiiJogofchScpXb000244fd00006015100000005b440e7epokemondpds\",\n            GamestatsRequestVersions.Version3, GamestatsResponseVersions.Version2, true, true)\n        {\n\n        }\n\n        public override void ProcessGamestatsRequest(byte[] request, MemoryStream response, string url, int pid, HttpContext context, GamestatsSession session)\n        {\n            switch (url)\n            {\n                default:\n                    SessionManager.Remove(session);\n\n                    // unrecognized page url\n                    ShowError(context, 404);\n                    return;\n\n                case \"/pokemondpds/web/enc/lobby/checkProfile.asp\":\n                {\n                    if (request.Length != 168)\n                    {\n                        ShowError(context, 400);\n                        return;\n                    }\n\n                    byte[] requestData = new byte[164];\n\n                    Array.Copy(request, 4, requestData, 0, 164);\n\n                    TrainerProfilePlaza requestProfile = new TrainerProfilePlaza(pid, requestData);\n                    Database.Instance.PlazaSetProfile(requestProfile);\n\n                    TrainerProfilePlaza responseProfile = Database.Instance.PlazaGetProfile(requestProfile.PID);\n                    response.Write(responseProfile.Data, 12, 152); // skip first 12 bytes of profile data on response\n\n                } break;\n\n                case \"/pokemondpds/web/enc/lobby/getSchedule.asp\":\n                {\n                    // This is a replayed response from a game I had with Pipian.\n                    // It appears to be 49 ints.\n                    // todo(mythra): A real implementation\n                    // - we can generate events manually now, but we have a few\n                    // missing fields, so more research will need to be done before\n                    // that implementation.\n\n                    // note(mythra): this response is usually overwritten by the\n                    // peerchat server (through GETCHANKEY `b_lib_c_lobby`).\n                    // this is only taken if that channel key returns an\n                    // \"empty\" response.\n                    PlazaSchedule ps = new PlazaSchedule();\n                    ps.Duration = 1200;\n                    ps.Unknown1 = -1485781858;\n                    ps.FootprintOptions = PlazaFootprintOptions.Normal;\n                    ps.RoomType = PlazaRoomTypes.Grass;\n                    ps.Season = PlazaSeasons.None;\n                    ps.Schedule = new[]\n                    {\n                        // todo: Have different, randomized schedules but in a way that makes sense\n                        new PlazaScheduleEntry(0, (PlazaEventTypes)1),\n                        new PlazaScheduleEntry(0, (PlazaEventTypes)7),\n                        new PlazaScheduleEntry(0, (PlazaEventTypes)11),\n                        new PlazaScheduleEntry(780, (PlazaEventTypes)8),\n                        new PlazaScheduleEntry(840, (PlazaEventTypes)2),\n                        new PlazaScheduleEntry(840, (PlazaEventTypes)9),\n                        new PlazaScheduleEntry(900, (PlazaEventTypes)3),\n                        new PlazaScheduleEntry(900, (PlazaEventTypes)10),\n                        new PlazaScheduleEntry(900, (PlazaEventTypes)12),\n                        new PlazaScheduleEntry(960, (PlazaEventTypes)4),\n                        new PlazaScheduleEntry(960, (PlazaEventTypes)9),\n                        new PlazaScheduleEntry(960, (PlazaEventTypes)13),\n                        new PlazaScheduleEntry(960, (PlazaEventTypes)15),\n                        new PlazaScheduleEntry(1020, (PlazaEventTypes)5),\n                        new PlazaScheduleEntry(1020, (PlazaEventTypes)14),\n                        new PlazaScheduleEntry(1020, (PlazaEventTypes)16),\n                        new PlazaScheduleEntry(1075, (PlazaEventTypes)18),\n                        new PlazaScheduleEntry(1080, (PlazaEventTypes)6),\n                        new PlazaScheduleEntry(1080, (PlazaEventTypes)13),\n                        new PlazaScheduleEntry(1080, (PlazaEventTypes)17),\n                        new PlazaScheduleEntry(1140, (PlazaEventTypes)11),\n                        new PlazaScheduleEntry(1200, (PlazaEventTypes)19),\n                    };\n\n                    Random rand = new Random();\n                    int roomChoice = rand.Next(13);\n\n                    if (roomChoice < 1)\n                    {\n                        ps.RoomType = PlazaRoomTypes.Mew;\n                        ps.FootprintOptions = PlazaFootprintOptions.Arceus;\n                    }\n                    else\n                    {\n                        ps.RoomType = (PlazaRoomTypes)((roomChoice - 1) / 3);\n                        // todo: Seasons. Based on the irl season? Maybe use GenV's season? That would be a nice callout\n                    }\n\n                    response.Write(new byte[]\n                    {\n                        0x00, 0x00, 0x00, 0x00\n                    }, 0, 4);\n                    response.Write(ps.Save(), 0, ps.Size);\n\n                } break;\n\n                case \"/pokemondpds/web/enc/lobby/getVIP.asp\":\n                {\n                    // todo: keep VIPs in database\n                    response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4);\n                    // VIPs.\n                    foreach (var vip in VIPs)\n                    {\n                        response.Write(vip.Save(), 0, vip.Size);\n                    }\n                }\n                break;\n\n                case \"/pokemondpds/web/enc/lobby/getQuestionnaire.asp\":\n                {\n                    // This is a replayed response that asks the question,\n                    // \"Which move would you most like to use?\" Cut/Surf/Strength\n                    // It also includes results for \"last week\"'s survey:\n                    // \"Do you know anyone that looks like a Gym Leader?\" Yes/No/Yes, a little\n                    // Apparently it's possible not just to use built-in survey\n                    // questions but to also pose unique new ones?\n                    // todo: Turn this into a PlazaQuestionnaire object.\n\n                    response.Write(new byte[]{\n\n                    0x00, 0x00, 0x00, 0x00, \n\n                    0x2a, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01,\n                    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x29, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01,\n                    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x7e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,\n                    0x33, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00,\n                    0x11, 0x01, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00\n                    }, 0, 732);\n\n                    /*\n                    response.Write(new byte[] { 0x0, 0x0, 0x0, 0x0 }, 0, 4);\n                    response.Write(staticQuestionnaire, 0, staticQuestionnaire.Length);\n                    */\n\n                } break;\n\n                case \"/pokemondpds/web/enc/lobby/submitQuestionnaire.asp\":\n                {\n                    // One day we could parse as 'SubmittedQuestionnaire', and save in a DB somewhere.\n                    // that'd be cool!\n                    //\n                    // literally 'thx' in ascii... lol\n                    response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x74, 0x68, 0x78, 0x00 }, 0, 8);\n\n                } break;\n            }\n        }\n\n        /// <summary>\n        /// The list of \"VIPs\".\n        ///\n        /// Being a VIP gives you the following benefits:\n        ///\n        /// 1. Your Tap Toy is immediately upgraded to level 3.\n        /// 2. You get a gold trainer card, instead of a blue trainer card.\n        /// 3. You get a special color on the list of people in a lobby.\n        /// 4. You get a special color name on the footprint board.\n        /// 5. Some other mini games have a special color for your name.\n        ///\n        /// VIPs can also have custom \"passphrases\" that show when you bump\n        /// into them. These are generated from the standard word list you\n        /// could choose in any word box. These will show when you bump into\n        /// a user.\n        /// </summary>\n        private static VipRecord[] VIPs = new VipRecord[] {\n            new VipRecord(600403373, 0, 0, 0, 0),\n            new VipRecord(601315647, 0, 0, 0, 0),\n            new VipRecord(601988829, 0, 0, 0, 0),\n            new VipRecord(602778198, 4, 4, 4, 4), // \"STEEL STEEL STEEL STEEL\"\n            // Etchy -- for finding vips in the first place.\n            new VipRecord(602778716, 0, 0, 0, 0)\n        };\n\n        /// <summary>\n        /// A static questionnaire, who's id is not above 1k so it doesn't load the custom question text.\n        ///\n        /// The last weeks results is still taken.\n        /// And the footer of unknown data is copied from static responses.\n        /// </summary>\n        private static byte[] staticQuestionnaire = new PlazaQuestionnaire(\n        new PlazaQuestion(730, \"Not used\", new string[] { \"N/A\", \"N/A\", \"N/A\" }, new byte[12], false),\n        new PlazaQuestion(729, \"Not used\", new string[] { \"N/A\", \"N/A\", \"N/A\" }, new byte[12], false),\n        new int[] { 69, 420, 100 },\n        new byte[] { 0x64, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00 }).Save();\n    }\n}\n"
  },
  {
    "path": "gts/src/AppStateHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing PkmnFoundations.Data;\n\nnamespace PkmnFoundations.GTS\n{\n    public static class AppStateHelper\n    {\n        /// <summary>\n        /// Gets the Pokédex stored in Application State or else instances a\n        /// new one from the default database.\n        /// </summary>\n        /// <param name=\"application\">App State reference for this request</param>\n        /// <returns>Pokédex</returns>\n        public static Pokedex.Pokedex Pokedex(HttpApplicationState application)\n        {\n            return GetTypedApplicationObject(application, \"pkmncfPokedex\", () => new Pokedex.Pokedex(Database.Instance, false));\n        }\n\n        public static T GetTypedApplicationObject<T>(HttpApplicationState application, String key, Func<T> initializer) where T : class\n        {\n            object o = application[key];\n            T t = o as T;\n\n            if (t == null)\n            {\n                t = initializer();\n                application.Add(key, t);\n            }\n\n            return t;\n        }\n    }\n}"
  },
  {
    "path": "gts/src/BanHelper.cs",
    "content": "﻿using PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Wfc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.GTS\n{\n    public static class BanHelper\n    {\n        public static BanStatus GetBanStatus(int pid, string IpAddress, Generations generation)\n        {\n            try\n            {\n                BanStatus pidBan = Database.Instance.CheckBanStatus(pid);\n                BanStatus ipBan = Database.Instance.CheckBanStatus(IpAddress);\n                BanStatus macBan = null;\n                BanStatus saveBan = null;\n                BanStatus ipRangeBan = null;\n\n\n                try\n                {\n                    switch (generation)\n                    {\n                        case Generations.Generation4:\n                        {\n                            var profile = Database.Instance.GamestatsGetProfile4(pid);\n                            if (profile != null)\n                            {\n                                macBan = Database.Instance.CheckBanStatus(profile.MacAddress);\n                                saveBan = Database.Instance.CheckBanStatus(profile);\n                            }\n                            break;\n                        }\n                        case Generations.Generation5:\n                        {\n                            var profile = Database.Instance.GamestatsGetProfile5(pid);\n                            if (profile != null)\n                            {\n                                macBan = Database.Instance.CheckBanStatus(profile.MacAddress);\n                                saveBan = Database.Instance.CheckBanStatus(profile);\n                            }\n                            break;\n                        }\n                    }\n                }\n                catch (Exception)\n                {\n                }\n\n                try\n                {\n                    uint ipBinary = IpAddressHelper.Ipv4ToBinary(IpAddress);\n                    ipRangeBan = Database.Instance.CheckBanStatus(ipBinary);\n                }\n                catch (Exception)\n                {\n                }\n\n                return new[] { pidBan, ipBan, macBan, saveBan, ipRangeBan }.Where(ban => ban != null).OrderBy(ban => ban.Level).LastOrDefault();\n            }\n            catch (Exception)\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "gts/src/FakeOpponentGenerator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS\n{\n    /// <summary>\n    /// Provides a source of fake battle tower opponents.\n    /// </summary>\n    public static class FakeOpponentGenerator\n    {\n        const int FAKE_OPPONENTS_COUNT_4 = 8;\n        const int FAKE_OPPONENTS_COUNT_5 = 8;\n\n        /// <summary>\n        /// Randomly selects some fake opponents without repeats (if possible)\n        /// </summary>\n        /// <param name=\"count\"></param>\n        /// <returns></returns>\n        public static BattleTowerRecordBase[] GenerateFakeOpponents(FakeOpponentFactory factory, int count)\n        {\n            if (count == 0) return new BattleTowerRecordBase[0];\n            int fakeOpponentsCount = (factory.Generation < Generations.Generation5) ? FAKE_OPPONENTS_COUNT_4 : FAKE_OPPONENTS_COUNT_5;\n\n            int residualCount = count % fakeOpponentsCount;\n            int repeatCount = count / fakeOpponentsCount;\n\n            List<int> values = new List<int>(count);\n            Random rand = new Random();\n\n            for (int x = 0; x < repeatCount; x++)\n            {\n                values.AddRange(Enumerable.Range(0, fakeOpponentsCount));\n            }\n            values.AddRange(Enumerable.Range(0, fakeOpponentsCount).DrawWithoutReplacement(rand).Take(residualCount));\n\n            var pokedex = AppStateHelper.Pokedex(HttpContext.Current.Application);\n            var results = values.DrawWithoutReplacement(rand).Select(i => GenerateFakeOpponent(factory, pokedex, i));\n\n            return results.ToArray();\n        }\n\n        public static BattleTowerRecordBase GenerateFakeOpponent(FakeOpponentFactory factory, Pokedex.Pokedex pokedex, int index)\n        {\n            BattleTowerRecordBase record = factory.CreateRecord(pokedex);\n            bool gen4 = factory.Generation <= Generations.Generation4;\n\n            // Trainer classes in gen4: https://projectpokemon.org/rawdb/diamond/msg/560.php\n            // Trainer classes in gen5: https://projectpokemon.org/rawdb/black/msg/191.php\n            switch (index)\n            {\n                default:\n                    throw new ArgumentOutOfRangeException(\"index\");\n\n                case 0:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        129, 0, // Magikarp\n                        3133, // Cheri\n                        new ushort[] {\n                            150, // Splash\n                            33, // Tackle\n                            175, // Flail\n                            340 // Bounce\n                        },\n                        0x01020304, 3, // Adamant\n                        IvStatValues.PackIVs(31, 31, 21, 31, 21, 21),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 33, // Swift swim\n                        255, \"Carp\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        223, 0, // Remoraid\n                        3134, // Chesto\n                        new ushort[] {\n                            60, // Psybeam\n                            61, // Bubblebeam\n                            62, // Aurora beam\n                            324 // Signal beam\n                        },\n                        0x01020304, 10, // Timid\n                        IvStatValues.PackIVs(31, 21, 21, 31, 31, 21),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 97, // Sniper\n                        255, \"Gunter\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        349, 0, // Feebas\n                        3134, // Chesto\n                        new ushort[] {\n                            150, // Splash\n                            33, // Tackle\n                            175, // Flail\n                            240 // Rain Dance\n                        },\n                        0x01020304, 13, // Jolly\n                        IvStatValues.PackIVs(31, 21, 21, 31, 31, 21),\n                        new byte[] { 252, 0, 6, 0, 0, 252 },\n                        0, Languages.English, 33, // Swift swim\n                        255, \"Meryl\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Steve\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x01020304,\n                        gen4 ? factory.CreateTrendyPhrase(0, 16, 291, 7) // Ninjask! Squirtle power!\n                             : factory.CreateTrendyPhrase(1, 6, 7, 884), // Watch my Squirtle power take care of Metal Claw!\n                        0, 11 // Fisherman\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(1, 14, 1347, 65535); // This FISHING was really good!\n                        record.PhraseWon = factory.CreateTrendyPhrase(1, 11, 766, 65535); // I might have won with HELPING HAND!\n                        record.PhraseLost = factory.CreateTrendyPhrase(2, 15, 1347, 65535); // I would’ve won if this\\nwere FISHING...\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(1, 6, 7, 884); // Watch my Squirtle power take care of Metal Claw!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 1:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        376, 0, // Metagross\n                        268, // Expert belt\n                        new ushort[] {\n                            89, // EQ\n                            309, // Meteor mash\n                            9, // Thunderpunch\n                            153 // Explosion\n                        },\n                        15562158, 2106656978, // Actual TID/PV. Adamant, chained shiny\n                        493780176, // Actual IVs which are crap.\n                        new byte[] { 252, 238, 0, 20, 0, 0 },\n                        0, Languages.English, 29, // Clear body\n                        255, \"Goldfinger\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        282, 0, // Gardevoir\n                        297, // Choice specs\n                        new ushort[] {\n                            94, // Psychic\n                            85, // Thunderbolt\n                            247, // Shadow ball\n                            271 // Trick\n                        },\n                        15562158, 4094067015, // Actual TID/PV. Modest, chained shiny\n                        663420771, // Actual IVs, should be decent\n                        new byte[] { 254, 0, 56, 144, 56, 0 },\n                        0, Languages.English, 36, // Trace\n                        255, \"Curly\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        134, 0, // Vaporeon\n                        234, // Leftovers\n                        new ushort[] {\n                            57, // Surf\n                            164, // Substitute\n                            273, // Wish\n                            226 // Baton pass\n                        },\n                        15562158, 895218680, // Bold\n                        514292539,\n                        new byte[] { 204, 0, 254, 0, 52, 0 },\n                        0, Languages.English, 11, // Water absorb\n                        255, \"Seabiscuit\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Megan\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x02030405,\n                        gen4 ? factory.CreateTrendyPhrase(3, 8, 1487, 65535)  // There's only WI-FI left!\n                             : factory.CreateTrendyPhrase(5, 0, 1611, 65535), // fixme\n                        2, 33 // Lady\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(3, 8, 1487, 65535);  // There's only WI-FI left!\n                        record.PhraseWon = factory.CreateTrendyPhrase(3, 3, 1492, 1439); // This BATTLE TOWER is DIFFICULT, isn't it?\n                        record.PhraseLost = factory.CreateTrendyPhrase(3, 2, 1493, 1492); // I love GTS! I love BATTLE TOWER too!\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(5, 0, 1611, 65535); // Glad to meet you! I am MACHINE!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 2:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        392, 0, // Infernape\n                        275, // Focus sash\n                        new ushort[] {\n                            252, // Fake out\n                            283, // Endeavour\n                            183, // Mach punch\n                            7 // Fire punch\n                        },\n                        0x02030405, 13, // Jolly\n                        IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 66, // Blaze\n                        255, \"FunkyMunky\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        235, 0, // Smeargle\n                        210, // Custap\n                        new ushort[] {\n                            147, // Spore\n                            169, // Spider web\n                            286, // Imprison\n                            144 // Transform\n                        },\n                        0x02030405, 10, // Timid\n                        IvStatValues.PackIVs(31, 10, 31, 31, 10, 20),\n                        new byte[] { 252, 0, 6, 252, 0, 0 },\n                        0, Languages.English, 101, // Technician\n                        255, \"Yourself\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        365, 0, // Walrein\n                        217, // Quick claw\n                        new ushort[] {\n                            156, // Rest\n                            214, // Sleep talk\n                            104, // Double team\n                            329 // Sheer cold\n                        },\n                        5, 5, // Bold, shiny\n                        IvStatValues.PackIVs(31, 10, 20, 31, 10, 31),\n                        new byte[] { 252, 0, 0, 252, 0, 6 },\n                        0, Languages.English, 47, // Thick fat\n                        255, \"Problem?\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Dennis\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x02030405,\n                        gen4 ? factory.CreateTrendyPhrase(1, 12, 1147, 65535) // I get the happiest with MOTHER\n                             : factory.CreateTrendyPhrase(5, 0, 1611, 65535), // fixme\n                        0, 32 // Rich boy\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(1, 12, 1147, 65535); // I get the happiest with MOTHER\n                        record.PhraseWon = factory.CreateTrendyPhrase(2, 8, 1140, 65535); // You're WEAK, aren't you?\n                        record.PhraseLost = factory.CreateTrendyPhrase(2, 6, 1421, 65535); // ROFL! How awful!\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(5, 0, 1611, 65535); // Glad to meet you! I am MACHINE!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 3:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        248, 0, // Tyranitar\n                        189, // Chople\n                        new ushort[] {\n                            446, // Stealth rock\n                            349, // Dragon dance\n                            89, // EQ\n                            444 // Stone edge\n                        },\n                        13, 13, // Jolly, shiny\n                        IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 45, // Sand stream\n                        255, \"Tyranitar\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        212, 0, // Scizor\n                        270, // Life orb\n                        new ushort[] {\n                            418, // Bullet punch\n                            450, // Bug bite\n                            14, // Swords dance\n                            355 // Roost\n                        },\n                        0x03040506, 3, // Adamant\n                        IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 101, // Technician\n                        255, \"Scizor\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        485, 0, // Heatran\n                        234, // Leftovers\n                        new ushort[] {\n                            436, // Lava plume\n                            414, // Earth power\n                            156, // Rest\n                            214 // Sleep talk\n                        },\n                        0x03040506, 3, // Modest\n                                       // fixme: these IVs are unreasonably high for Soft Resetting.\n                        IvStatValues.PackIVs(31, 10, 20, 20, 31, 31),\n                        new byte[] { 250, 0, 0, 0, 56, 204 },\n                        0, Languages.English, 18, // Flash fire\n                        255, \"Heatran\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Dusty\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x03040506,\n                        gen4 ? factory.CreateTrendyPhrase(3, 4, 1342, 65535)  // I can do anything for TREASURE\n                             : factory.CreateTrendyPhrase(5, 0, 1611, 65535), // fixme\n                        0, 48 // Ruin Maniac\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(3, 4, 1342, 65535); // I can do anything for TREASURE\n                        record.PhraseWon = factory.CreateTrendyPhrase(3, 6, 1148, 1107); // GRANDFATHER is the real NO.1\n                        record.PhraseLost = factory.CreateTrendyPhrase(3, 10, 1389, 65535); // I prefer VACATION after all\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(5, 0, 1611, 65535); // Glad to meet you! I am MACHINE!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 4:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        460, 0, // Abomasnow\n                        287, // Scarf\n                        new ushort[] {\n                            59, // Blizzard\n                            452, // Wood hammer\n                            237, // Hidden power\n                            89 // EQ\n                        },\n                        0x04050607, 11, // Hasty\n                        IvStatValues.PackIVs(19, 31, 18, 30, 28, 19), // HP:fire base 59\n                                                                      // Original EVs: 228Spe/164Atk/116SAtk\n                                                                      // Adjusted for Hidden Power IVs, sacrificing some Attack\n                        new byte[] { 0, 148, 0, 234, 128, 0 },\n                        0, Languages.English, 117, // Snow warning\n                        255, \"Abomasnow\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        471, 0, // Glaceon\n                        246, // Nevermeltice\n                        new ushort[] {\n                            59, // Blizzard\n                            247, // Shadow ball\n                            273, // Wish\n                            182 // Protect\n                        },\n                        15, 15, // Modest, shiny\n                        IvStatValues.PackIVs(31, 10, 20, 31, 31, 20),\n                        new byte[] { 6, 0, 0, 252, 252, 0 },\n                        0, Languages.English, 81, // Snow cloak\n                        255, \"Glaceon\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        461, 0, // Weavile\n                        275, // Focus sash\n                        new ushort[] {\n                            14, // Swords dance\n                            400, // Night slash\n                            8, // Ice punch\n                            67 // Low kick\n                        },\n                        13, 13, // Jolly, shiny\n                        IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),\n                        new byte[] { 40, 252, 0, 218, 0, 0 },\n                        0, Languages.English, 46, // Pressure\n                        255, \"Weavile\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Frosty\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x04050607,\n                        gen4 ? factory.CreateTrendyPhrase(3, 3, 677, 1438)    // This POWDER SNOW is NICE, isn't it?\n                             : factory.CreateTrendyPhrase(5, 0, 1611, 65535), // fixme\n                        2, 35 // Socialite\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(3, 3, 677, 1438); // This POWDER SNOW is NICE, isn't it?\n                        record.PhraseWon = factory.CreateTrendyPhrase(1, 14, 797, 65535); // This ICE BALL was really good\n                        record.PhraseLost = factory.CreateTrendyPhrase(2, 5, 752, 65535); // Could it be? HEAT WAVE\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(5, 0, 1611, 65535); // Glad to meet you! I am MACHINE!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 5:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        437, 0, // Bronzong\n                        234, // Leftovers\n                        new ushort[] {\n                            433, // Trick room\n                            360, // Gyro ball\n                            95, // Hypnosis\n                            153 // Explosion\n                        },\n                        22, 22, // Sassy, shiny\n                        IvStatValues.PackIVs(31, 20, 31, 0, 10, 20),\n                        new byte[] { 252, 0, 252, 0, 0, 6 },\n                        0, Languages.English, 26, // Levitate\n                        255, \"Bronzong\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        464, 0, // Rhyperior\n                        270, // Life orb\n                        new ushort[] {\n                            89, // EQ\n                            444, // Stone edge\n                            401, // Aqua tail\n                            224 // Megahorn\n                        },\n                        0x05060708, 2, // Brave\n                        IvStatValues.PackIVs(31, 31, 31, 10, 10, 20),\n                        new byte[] { 248, 252, 10, 0, 0, 0 },\n                        0, Languages.English, 116, // Solid rock\n                        255, \"Rhyperior\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        462, 0, // Magnezone\n                        268, // Expert belt\n                        new ushort[] {\n                            237, // Hidden power\n                            430, // Flash cannon\n                            85, // Thunderbolt\n                            393 // Magnet rise\n                        },\n                        0x05060708, 17, // Quiet\n                        IvStatValues.PackIVs(31, 10, 31, 10, 31, 20),\n                        new byte[] { 252, 0, 6, 0, 252, 0 },\n                        0, Languages.English, 42, // Magnet pull\n                        255, \"Magnezone\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Cassie\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x05060708,\n                        gen4 ? factory.CreateTrendyPhrase(2, 3, 1146, 65535)  // I want to go home with YOU...\n                             : factory.CreateTrendyPhrase(5, 0, 1611, 65535), // fixme\n                        2, 85 // Idol\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(2, 3, 1146, 65535); // I want to go home with YOU...\n                        record.PhraseWon = factory.CreateTrendyPhrase(4, 10, 1245, 65535); // Let's GO AHEAD!\n                        record.PhraseLost = factory.CreateTrendyPhrase(4, 11, 1348, 65535); // Want to DATE?\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(5, 0, 1611, 65535); // Glad to meet you! I am MACHINE!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 6:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        65, 0, // Alakazam\n                        275, // Focus sash\n                        new ushort[] {\n                            269, // Taunt\n                            94, // Psychic\n                            411, // Focus blast\n                            324 // Signal beam\n                        },\n                        15, 15, // Modest, shiny\n                        IvStatValues.PackIVs(31, 10, 20, 31, 31, 20),\n                        new byte[] { 6, 0, 0, 252, 252, 6 },\n                        0, Languages.English, 39, // Inner focus\n                        255, \"Alakazam\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        445, 0, // Garchomp\n                        270, // Life orb\n                        new ushort[] {\n                            14, // Swords dance\n                            89, // EQ\n                            200, // Outrage\n                            424 // Fire fang\n                        },\n                        0x06070809, 13, // Jolly\n                        IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 8, // Sand veil\n                        255, \"Garchomp\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        242, 0, // Blissey\n                        234, // Leftovers\n                        new ushort[] {\n                            135, // Softboiled\n                            104, // Double team\n                            92, // Toxic\n                            69 // Seismic toss\n                        },\n                        0x06070809, 5, // Bold\n                        IvStatValues.PackIVs(31, 10, 31, 31, 20, 20),\n                        new byte[] { 252, 0, 252, 6, 0, 0 },\n                        0, Languages.English, 30, // Natural cure\n                        255, \"Blissey\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Evan\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x06070809,\n                        gen4 ? factory.CreateTrendyPhrase(0, 2, 566, 65535)   // I'll battle with STRENGTH!\n                             : factory.CreateTrendyPhrase(5, 0, 1611, 65535), // fixme\n                        0, 24 // Ace trainer M\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(0, 2, 566, 65535); // I'll battle with STRENGTH!\n                        record.PhraseWon = factory.CreateTrendyPhrase(1, 1, 1418, 65535); // I won! I won with SKILLFUL!\n                        record.PhraseLost = factory.CreateTrendyPhrase(2, 17, 1428, 65535); // The way I lost... It's like RARE...\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(5, 0, 1611, 65535); // Glad to meet you! I am MACHINE!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n\n                case 7:\n                    record.Party[0] = factory.CreatePokemon(pokedex,\n                        9, 0, // Blastoise\n                        234, // Leftovers\n                        new ushort[] {\n                            57, // Surf\n                            58, // Ice beam\n                            252, // Fake out\n                            156 // Rest\n                        },\n                        0x01020304, 15, // Modest\n                        IvStatValues.PackIVs(31, 10, 20, 31, 31, 20),\n                        new byte[] { 6, 0, 0, 252, 252, 0 },\n                        0, Languages.English, 67, // Torrent\n                        255, \"Leonardo\"\n                    );\n\n                    record.Party[1] = factory.CreatePokemon(pokedex,\n                        389, 0, // Torterra\n                        287, // Choice scarf\n                        new ushort[] {\n                            452, // Wood hammer\n                            89, // Earthquake\n                            276, // Superpower\n                            242 // Crunch\n                        },\n                        0x01020304, 13, // Jolly\n                        IvStatValues.PackIVs(31, 31, 20, 31, 10, 20),\n                        new byte[] { 6, 252, 0, 252, 0, 0 },\n                        0, Languages.English, 65, // Overgrow\n                        255, \"Donatello\"\n                    );\n\n                    record.Party[2] = factory.CreatePokemon(pokedex,\n                        324, 0, // Torkoal\n                        217, // Quick claw\n                        new ushort[] {\n                            133, // Amnesia\n                            156, // Rest\n                            261, // Will-o-wisp\n                            90 // Fissure\n                        },\n                        0x01020304, 23, // Careful\n                        IvStatValues.PackIVs(31, 10, 31, 20, 10, 31),\n                        new byte[] { 252, 0, 6, 0, 0, 252 },\n                        0, Languages.English, 73, // White smoke\n                        255, \"Raphael\"\n                    );\n\n                    record.Profile = factory.CreateProfile(\n                        \"Splnter\",\n                        Versions.Platinum, Languages.English,\n                        0, 0, 0x01020304,\n                        gen4 ? factory.CreateTrendyPhrase(0, 16, 291, 7) // Ninjask! Squirtle power!\n                             : factory.CreateTrendyPhrase(1, 6, 7, 884), // Watch my Squirtle power take care of Metal Claw!\n                        0, 14 // Black belt\n                        );\n\n                    if (gen4)\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(0, 16, 291, 7); // Ninjask! Squirtle power!\n                        record.PhraseWon = factory.CreateTrendyPhrase(1, 11, 766, 65535); // I might have won with HELPING HAND!\n                        record.PhraseLost = factory.CreateTrendyPhrase(2, 8, 1406, 65535); // You're INCREDIBLE, aren't you?\n                    }\n                    else\n                    {\n                        record.PhraseChallenged = factory.CreateTrendyPhrase(1, 6, 7, 884); // Watch my Squirtle power take care of Metal Claw!\n                        record.PhraseWon = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                        record.PhraseLost = factory.CreateTrendyPhrase(5, 0, 1611, 65535);\n                    }\n                    break;\n            }\n\n            return record;\n        }\n    }\n\n    public abstract class FakeOpponentFactory\n    {\n        public abstract BattleTowerRecordBase CreateRecord(Pokedex.Pokedex pokedex);\n\n        public abstract BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex, \n            ushort species, byte form, ushort held_item, ushort[] moveset,\n            uint ot, uint personality, uint ivs, byte[] evs, byte pp_ups,\n            Languages language, byte ability, byte happiness, string nickname);\n\n        public abstract BattleTowerProfileBase CreateProfile(string name, Versions version,\n            Languages language, byte country, byte region, uint ot,\n            TrendyPhraseBase phrase_leader, byte gender, byte unknown);\n\n        public abstract TrendyPhraseBase CreateTrendyPhrase(ushort mood, ushort index, ushort word1, ushort word2);\n\n        public abstract Generations Generation { get; }\n    }\n\n    public class FakeOpponentFactory4 : FakeOpponentFactory\n    {\n        public override BattleTowerRecordBase CreateRecord(Pokedex.Pokedex pokedex)\n        {\n            BattleTowerRecord4 record = new BattleTowerRecord4(pokedex);\n            record.Party = new BattleTowerPokemon4[3];\n            record.Unknown3 = 6969;\n            return record;\n        }\n\n        public override BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex, \n            ushort species, byte form, ushort held_item, ushort[] moveset, uint ot, \n            uint personality, uint ivs, byte[] evs, byte pp_ups, \n            Languages language, byte ability, byte happiness, \n            string nickname)\n        {\n            return new BattleTowerPokemon4(pokedex,\n                        species, form,\n                        held_item,\n                        moveset,\n                        ot, personality,\n                        ivs,\n                        evs,\n                        pp_ups, language, ability,\n                        happiness, new EncodedString4(nickname, 22)\n                    );\n        }\n\n        public override BattleTowerProfileBase CreateProfile(string name, \n            Versions version, Languages language, byte country, byte region, \n            uint ot, TrendyPhraseBase phrase_leader, byte gender, byte unknown)\n        {\n            return new BattleTowerProfile4(\n                new EncodedString4(name, 16),\n                version, language,\n                country, region, ot,\n                (TrendyPhrase4)phrase_leader,\n                gender, unknown\n                );\n        }\n\n        public override TrendyPhraseBase CreateTrendyPhrase(ushort mood, \n            ushort index, ushort word1, ushort word2)\n        {\n            return new TrendyPhrase4(mood, index, word1, word2);\n        }\n\n        public override Generations Generation\n        {\n            get\n            {\n                return Generations.Generation4;\n            }\n        }\n    }\n\n    public class FakeOpponentFactory5 : FakeOpponentFactory\n    {\n        public override BattleTowerRecordBase CreateRecord(Pokedex.Pokedex pokedex)\n        {\n            BattleSubwayRecord5 record = new BattleSubwayRecord5(pokedex);\n            record.Party = new BattleSubwayPokemon5[3];\n            record.Unknown3 = 6969;\n            return record;\n        }\n\n        public override BattleTowerPokemonBase CreatePokemon(Pokedex.Pokedex pokedex,\n            ushort species, byte form, ushort held_item, ushort[] moveset, uint ot,\n            uint personality, uint ivs, byte[] evs, byte pp_ups,\n            Languages language, byte ability, byte happiness,\n            string nickname)\n        {\n            return new BattleSubwayPokemon5(pokedex,\n                        species, form,\n                        held_item,\n                        moveset,\n                        ot, personality,\n                        ivs,\n                        evs,\n                        pp_ups, language, ability,\n                        happiness, new EncodedString5(nickname, 22), 0\n                    );\n        }\n\n        public override BattleTowerProfileBase CreateProfile(string name, \n            Versions version, Languages language, byte country, byte region, \n            uint ot, TrendyPhraseBase phrase_leader, byte gender, byte unknown)\n        {\n            return new BattleSubwayProfile5(\n                new EncodedString5(name, 16),\n                version, language,\n                country, region, ot,\n                (TrendyPhrase5)phrase_leader,\n                gender, unknown\n                );\n        }\n\n        public override TrendyPhraseBase CreateTrendyPhrase(ushort mood, ushort index, ushort word1, ushort word2)\n        {\n            return new TrendyPhrase5(mood, index, word1, word2);\n        }\n\n        public override Generations Generation\n        {\n            get\n            {\n                return Generations.Generation5;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "gts/src/IpAddressHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.GTS\n{\n    public static class IpAddressHelper\n    {\n        public static string GetIpAddress(HttpRequest request)\n        {\n            var allowedProxies = ConfigurationManager.AppSettings[\"AllowedProxies\"].Split(',').Select(s => s.Trim());\n            string hostAddress = RemovePort(request.UserHostAddress.Trim());\n            \n            if (!allowedProxies.Contains(hostAddress)) return hostAddress; // return real IP if not a blessed proxy\n            if (request.Headers[\"X-Forwarded-For\"] == null) return hostAddress;\n\n            var xForwardedFor = request.Headers[\"X-Forwarded-For\"].Split(',').Select(s => RemovePort(s.Trim()));\n\n            foreach (string s in xForwardedFor.Reverse())\n            {\n                if (!allowedProxies.Contains(s)) return s; // return LAST IP in the proxy chain that's not trusted. (everything coming earlier could be spoofed)\n            }\n\n            // these conditions can only happen if the real user is at a blessed proxy IP address. (probably localhost)\n            return xForwardedFor.FirstOrDefault() ?? hostAddress;\n        }\n\n        private static string RemovePort(string ip)\n        {\n            if (ip.Contains(':') && ip.Contains('.'))\n                return ip.Substring(0, ip.IndexOf(':'));\n            else\n                return ip;\n        }\n\n        public static uint Ipv4ToBinary(string ip)\n        {\n            string[] split = ip.Split('.');\n            if (split.Length != 4) throw new FormatException(\"Format not valid for an IPV4 address.\");\n\n            return BitConverter.ToUInt32(split.Select(s => Convert.ToByte(s)).Reverse().ToArray(), 0);\n        }\n    }\n}\n"
  },
  {
    "path": "gts/syachi2ds.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"syachi2ds.ashx.cs\" Class=\"PkmnFoundations.GTS.syachi2ds\" %>\r\n"
  },
  {
    "path": "gts/syachi2ds.ashx.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.SessionState;\r\nusing PkmnFoundations.Data;\r\nusing PkmnFoundations.Structures;\r\nusing PkmnFoundations.Support;\r\nusing System.IO;\r\nusing GamestatsBase;\r\nusing PkmnFoundations.Wfc;\r\n\r\nnamespace PkmnFoundations.GTS\r\n{\r\n    /// <summary>\r\n    /// Summary description for pokemondpds\r\n    /// </summary>\r\n    public class syachi2ds : GamestatsHandler\r\n    {\r\n        public syachi2ds()\r\n            : base(\"HZEdGCzcGGLvguqUEKQN0001d93500002dd5000000082db842b2syachi2ds\",\r\n            GamestatsRequestVersions.Version3, GamestatsResponseVersions.Version2, false, true)\r\n        {\r\n\r\n        }\r\n\r\n        public override void ProcessGamestatsRequest(byte[] request, MemoryStream response, string url, int pid, HttpContext context, GamestatsSession session)\r\n        {\r\n            {\r\n                BanStatus ban = BanHelper.GetBanStatus(pid, IpAddressHelper.GetIpAddress(context.Request), Generations.Generation5);\r\n                if (ban != null && ban.Level > BanLevels.Restricted)\r\n                {\r\n                    ShowError(context, 403);\r\n                    return;\r\n                }\r\n            }\r\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(context.Application);\r\n\r\n            switch (url)\r\n            {\r\n                default:\r\n                    SessionManager.Remove(session);\r\n\r\n                    // unrecognized page url\r\n                    ShowError(context, 404);\r\n                    return;\r\n\r\n                #region Common\r\n                // Called during startup. Seems to contain trainer profile stats.\r\n                case \"/syachi2ds/web/common/setProfile.asp\":\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (request.Length != 100)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n#if !DEBUG\r\n                    try\r\n                    {\r\n#endif\r\n                        // this blob appears to share the same format with GenIV only with (obviously) a GenV string for the trainer name\r\n                        // and the email-related fields dummied out.\r\n                        // Specifically, email, notification status, and the two secrets appear to always be 0.\r\n                        byte[] profileBinary = new byte[100];\r\n                        Array.Copy(request, 0, profileBinary, 0, 100);\r\n                        TrainerProfile5 profile = new TrainerProfile5(pid, profileBinary, IpAddressHelper.GetIpAddress(context.Request));\r\n                        Database.Instance.GamestatsSetProfile5(profile);\r\n#if !DEBUG\r\n                    }\r\n                    catch { }\r\n#endif\r\n\r\n                    response.Write(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },\r\n                        0, 8);\r\n                    break;\r\n                #endregion\r\n\r\n                #region GTS\r\n                // Called during startup. Unknown purpose.\r\n                case \"/syachi2ds/web/worldexchange/info.asp\":\r\n                    SessionManager.Remove(session);\r\n\r\n                    // todo: find out the meaning of this request.\r\n                    // is it simply done to check whether the GTS is online?\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    break;\r\n\r\n                // Called during startup and when you check your pokemon's status.\r\n                case \"/syachi2ds/web/worldexchange/result.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    // todo: more fun stuff is contained in this blob on genV.\r\n                    // my guess is that it's trainer profile info like setProfile.asp\r\n                    // There's a long string of 0s which could be a trainer card signature raster\r\n\r\n                    GtsRecord5 record = Database.Instance.GtsDataForUser5(pokedex, pid);\r\n\r\n                    if (record == null)\r\n                    {\r\n                        // No pokemon in the system\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                    }\r\n                    else if (record.IsExchanged > 0)\r\n                    {\r\n                        // traded pokemon arriving!!!\r\n                        response.Write(record.Save(), 0, 296);\r\n                    }\r\n                    else\r\n                    {\r\n                        // my existing pokemon is in the system, untraded\r\n                        response.Write(new byte[] { 0x04, 0x00 }, 0, 2);\r\n                    }\r\n\r\n                } break;\r\n\r\n                // Called after result.asp returns 4 when you check your pokemon's status\r\n                case \"/syachi2ds/web/worldexchange/get.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    // This can be called in 3 circumstances:\r\n                    // 1. After result.asp when it says your existing pokemon is in the system\r\n                    // 2. When you check the summary of your pokemon (Platinum onward)\r\n                    // 3. When you attempt to retract your offer, just before saving.\r\n                    // todo: the same big blob of stuff from result.asp is sent here too.\r\n\r\n                    GtsRecord5 record = Database.Instance.GtsDataForUser5(pokedex, pid);\r\n\r\n                    if (record == null)\r\n                    {\r\n                        // No pokemon in the system\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n                    else\r\n                    {\r\n                        // just write the record whether traded or not...\r\n                        // todo: confirm that writing a traded record here will allow the trade to conclude\r\n                        response.Write(record.Save(), 0, 296);\r\n                    }\r\n                } break;\r\n\r\n                // Called after result.asp returns an inbound pokemon record to delete it\r\n                case \"/syachi2ds/web/worldexchange/delete.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    // todo: the same big blob of stuff from result.asp is sent here too.\r\n\r\n                    GtsRecord5 record = Database.Instance.GtsDataForUser5(pokedex, pid);\r\n                    if (record == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                    }\r\n                    else if (record.IsExchanged > 0)\r\n                    {\r\n                        // Responses:\r\n                        // 0x03: BSOD\r\n                        // 0x05: 13263\r\n\r\n                        // delete the arrived pokemon from the system\r\n                        // todo: add transactions\r\n                        // todo: log the successful trade?\r\n                        // (either here or when the trade is done)\r\n                        bool success = Database.Instance.GtsDeletePokemon5(pid);\r\n                        if (success)\r\n                            response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                        else\r\n                            response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                    }\r\n                    else\r\n                    {\r\n                        // own pokemon is there, fail. Use return.asp instead.\r\n                        response.Write(new byte[] { 0x05, 0x00 }, 0, 2);\r\n                    }\r\n                } break;\r\n\r\n                // called to delete your own pokemon after taking it back\r\n                case \"/syachi2ds/web/worldexchange/return.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    GtsRecord5 record = Database.Instance.GtsDataForUser5(pokedex, pid);\r\n                    if (record == null || // no pokemon in the system\r\n                        record.IsExchanged > 0 || // a traded pokemon is there, fail. Use delete.asp instead.\r\n                        !Database.Instance.GtsCheckLockStatus5(record.TradeId, pid)) // someone else is in the process of trading for this\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                    }\r\n                    else\r\n                    {\r\n                        // delete own pokemon\r\n                        // todo: add transactions\r\n                        bool success = Database.Instance.GtsDeletePokemon5(pid);\r\n                        if (success)\r\n                        {\r\n                            response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                            // todo: invalidate cache\r\n                            //manager.RefreshStats();\r\n                        }\r\n                        else\r\n                        {\r\n                            response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        }\r\n                    }\r\n                } break;\r\n\r\n                // Called when you deposit a pokemon into the system.\r\n                case \"/syachi2ds/web/worldexchange/post.asp\":\r\n                {\r\n                    if (request.Length != 432)\r\n                    {\r\n                        SessionManager.Remove(session);\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    // todo: add transaction\r\n                    if (Database.Instance.GtsDataForUser5(pokedex, pid) != null)\r\n                    {\r\n                        // there's already a pokemon inside\r\n                        // Force the player out so they'll recheck its status.\r\n                        SessionManager.Remove(session);\r\n                        response.Write(new byte[] { 0x0e, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // keep the record in memory while we wait for post_finish.asp request\r\n                    byte[] recordBinary = new byte[296];\r\n                    Array.Copy(request, 0, recordBinary, 0, 296);\r\n                    GtsRecord5 record = new GtsRecord5(pokedex, recordBinary);\r\n                    record.IsExchanged = 0;\r\n\r\n                    // todo: figure out what bytes 296-431 do:\r\n                    // appears to be 4 bytes of 00, 128 bytes of stuff, 4 bytes of 80 00 00 00\r\n                    // probably a pkvldtprod signature\r\n\r\n                    if (!record.Validate())\r\n                    {\r\n                        // hack check failed\r\n                        SessionManager.Remove(session);\r\n\r\n                        // responses:\r\n                        // 0x00: bsod\r\n                        // 0x01: successful deposit\r\n                        // 0x02: Communication error 13265\r\n                        // 0x03: Communication error 13264\r\n                        // 0x04-0x06: bsod\r\n                        // 0x07: The GTS is very crowded now. Please try again later (13261). (and it boots you)\r\n                        // 0x08: That Pokémon may not be offered for trade (13268)!\r\n                        // 0x09: That Pokémon may not be offered for trade (13269)!\r\n                        // 0x0a: That Pokémon may not be offered for trade (13270)!\r\n                        // 0x0b: That Pokémon may not be offered for trade (13271)!\r\n                        // 0x0c: That Pokémon may not be offered for trade (13266)!\r\n                        // 0x0d: That Pokémon may not be offered for trade (13267)!\r\n                        // 0x0e: You were disconnected from the GTS. Error code: 13262 (and it boots you)\r\n                        // 0x0f: bsod\r\n                        response.Write(new byte[] { 0x0c, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // the following two fields are blank in the uploaded record.\r\n                    // The server must provide them instead.\r\n                    record.TimeDeposited = DateTime.UtcNow;\r\n                    record.TimeExchanged = null;\r\n                    record.PID = pid;\r\n\r\n                    session.Tag = record;\r\n                    // todo: delete any other post.asp sessions registered under this PID\r\n\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n\r\n                case \"/syachi2ds/web/worldexchange/post_finish.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (request.Length != 8)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    // find a matching session which contains our record\r\n                    GamestatsSession prevSession = SessionManager.FindSession(pid, \"/syachi2ds/web/worldexchange/post.asp\");\r\n                    if (prevSession == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n\r\n                    SessionManager.Remove(prevSession);\r\n                    if (prevSession.Tag == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n                    AssertHelper.Assert(prevSession.Tag is GtsRecord5);\r\n                    GtsRecord5 record = (GtsRecord5)prevSession.Tag;\r\n\r\n                    if (Database.Instance.GtsDepositPokemon5(record))\r\n                    {\r\n                        // todo: invalidate cache\r\n                        //manager.RefreshStats();\r\n                        response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    }\r\n                    else\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n\r\n                // the search request has a funny bit string request of search terms\r\n                // and just returns a chunk of records end to end.\r\n                case \"/syachi2ds/web/worldexchange/search.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (request.Length < 7 || request.Length > 8)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    int resultsCount = (int)request[6];\r\n\r\n                    ushort species = BitConverter.ToUInt16(request, 0);\r\n                    if (species < 1)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n\r\n                    if (resultsCount < 1) break; // optimize away requests for no rows\r\n\r\n                    Genders gender = (Genders)request[2];\r\n                    byte minLevel = request[3];\r\n                    byte maxLevel = request[4];\r\n                    // byte 5 unknown\r\n                    byte country = 0;\r\n                    if (request.Length > 7) country = request[7];\r\n\r\n                    if (resultsCount > 7) resultsCount = 7; // stop DDOS\r\n                    GtsRecord5[] records = Database.Instance.GtsSearch5(pokedex, pid, species, gender, minLevel, maxLevel, country, resultsCount);\r\n                    foreach (GtsRecord5 record in records)\r\n                    {\r\n                        response.Write(record.Save(), 0, 296);\r\n                    }\r\n\r\n                    Database.Instance.GtsSetLastSearch5(pid);\r\n\r\n                } break;\r\n\r\n                // the exchange request uploads a record of the exchangee pokemon\r\n                // plus the desired PID to trade for at the very end.\r\n                case \"/syachi2ds/web/worldexchange/exchange.asp\":\r\n                {\r\n                    if (request.Length != 432)\r\n                    {\r\n                        SessionManager.Remove(session);\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    byte[] uploadData = new byte[296];\r\n                    Array.Copy(request, 0, uploadData, 0, 296);\r\n                    GtsRecord5 upload = new GtsRecord5(pokedex, uploadData);\r\n                    upload.IsExchanged = 0;\r\n                    int targetPid = BitConverter.ToInt32(request, 296);\r\n                    GtsRecord5 result = Database.Instance.GtsDataForUser5(pokedex, targetPid);\r\n                    DateTime ? searchTime = Database.Instance.GtsGetLastSearch5(pid);\r\n\r\n                    if (result == null || searchTime == null ||\r\n                        result.TimeDeposited > (DateTime)searchTime || // If this condition is met, it means the pokemon in the system is DIFFERENT from the one the user is trying to trade for, ie. it was deposited AFTER the user did their search. The one the user wants was either taken back or traded.\r\n                        result.IsExchanged != 0)\r\n                    {\r\n                        // Pokémon is traded (or was never here to begin with)\r\n                        SessionManager.Remove(session);\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    // enforce request requirements server side\r\n                    if (!upload.Validate() || !upload.CanTrade(result))\r\n                    {\r\n                        // todo: find the correct codes for these\r\n                        SessionManager.Remove(session);\r\n\r\n                        // responses:\r\n                        // 0x00-0x01: bsod\r\n                        // 0x02: Unfortunately, it was traded to another Trainer.\r\n                        // 0x03-0x07: bsod\r\n                        // 0x08: That Pokémon may not be offered for trade (13268)!\r\n                        // 0x09: That Pokémon may not be offered for trade (13269)!\r\n                        // 0x0a: That Pokémon may not be offered for trade (13270)!\r\n                        // 0x0b: That Pokémon may not be offered for trade (13271)!\r\n                        // 0x0c: That Pokémon may not be offered for trade (13266)!\r\n                        // 0x0d: That Pokémon may not be offered for trade (13267)!\r\n                        // 0x0e: You were disconnected from the GTS. Error code: 13262\r\n                        // 0x0f: bsod\r\n                        response.Write(new byte[] { 0x0c, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n\r\n                    if (!Database.Instance.GtsLockPokemon5(result.TradeId, pid))\r\n                    {\r\n                        // failed to acquire lock, implying someone else beat us here. Say already traded.\r\n                        SessionManager.Remove(session);\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        break;\r\n                    }\r\n\r\n                    object[] tag = new GtsRecord5[2];\r\n                    tag[0] = upload;\r\n                    tag[1] = result;\r\n                    session.Tag = tag;\r\n\r\n                    GtsRecord5 tradedResult = result.Clone();\r\n                    tradedResult.FlagTraded(upload); // only real purpose is to generate a proper response\r\n\r\n                    // todo: we need a mechanism to \"reserve\" a pokemon being traded at this\r\n                    // point in the process, but be able to relinquish it if exchange_finish\r\n                    // never happens.\r\n                    // Currently, if two people try to take the same pokemon, it will appear\r\n                    // to work for both but then fail for the second after they've saved\r\n                    // their game. This causes a hard crash and a \"save file is corrupt, \r\n                    // \"previous will be loaded\" error when restarting.\r\n                    // the reservation can be done in application state and has no reason\r\n                    // to touch the database. (exchange_finish won't work anyway if application\r\n                    // state is lost.)\r\n\r\n                    response.Write(result.Save(), 0, 296);\r\n\r\n                } break;\r\n\r\n                case \"/syachi2ds/web/worldexchange/exchange_finish.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (request.Length != 8)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    // find a matching session which contains our record\r\n                    GamestatsSession prevSession = SessionManager.FindSession(pid, \"/syachi2ds/web/worldexchange/exchange.asp\");\r\n                    if (prevSession == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n\r\n                    SessionManager.Remove(prevSession);\r\n                    if (prevSession.Tag == null)\r\n                    {\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n                        return;\r\n                    }\r\n                    AssertHelper.Assert(prevSession.Tag is GtsRecord5[]);\r\n                    GtsRecord5[] tag = (GtsRecord5[])prevSession.Tag;\r\n                    AssertHelper.Assert(tag.Length == 2);\r\n\r\n                    GtsRecord5 upload = tag[0];\r\n                    GtsRecord5 result = tag[1];\r\n\r\n                    if (Database.Instance.GtsTradePokemon5(upload, result, pid))\r\n                        response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    else\r\n                        response.Write(new byte[] { 0x02, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n                #endregion\r\n\r\n                #region Battle Subway\r\n                case \"/syachi2ds/web/battletower/info.asp\":\r\n                    SessionManager.Remove(session);\r\n\r\n                    // Probably an availability/status code.\r\n                    // Response codes:\r\n                    // 0x00: BSOD\r\n                    // 0x01: Continues normally\r\n                    // 0x02: BSOD\r\n                    // 0x03: Continues normally???\r\n                    // 0x04: Continues normally\r\n                    // 0x05: Unable to connect to the Wi-Fi Train. Returning to the reception counter. (13262)\r\n                    // 0x06: BSOD\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                    break;\r\n\r\n                case \"/syachi2ds/web/battletower/roomnum.asp\":\r\n                    SessionManager.Remove(session);\r\n\r\n                    //byte rank = data[0x00];\r\n                    response.Write(new byte[] { 0x32, 0x00 }, 0, 2);\r\n                    break;\r\n\r\n                case \"/syachi2ds/web/battletower/download.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (request.Length != 2)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    byte rank = request[0];\r\n                    byte roomNum = request[1];\r\n\r\n                    if (rank > 9 || roomNum > 49)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    FakeOpponentFactory5 fact = new FakeOpponentFactory5();\r\n                    BattleSubwayRecord5[] opponents = Database.Instance.BattleSubwayGetOpponents5(pokedex, pid, rank, roomNum);\r\n                    BattleSubwayProfile5[] leaders = Database.Instance.BattleSubwayGetLeaders5(pokedex, rank, roomNum);\r\n                    BattleTowerRecordBase[] fakeOpponents = FakeOpponentGenerator.GenerateFakeOpponents(fact, 7 - opponents.Length);\r\n\r\n                    foreach (BattleSubwayRecord5 record in fakeOpponents)\r\n                    {\r\n                        response.Write(record.Save(), 0, 240);\r\n                    }\r\n\r\n                    foreach (BattleSubwayRecord5 record in opponents)\r\n                    {\r\n                        response.Write(record.Save(), 0, 240);\r\n                    }\r\n\r\n                    foreach (BattleSubwayProfile5 leader in leaders)\r\n                    {\r\n                        response.Write(leader.Save(), 0, 34);\r\n                    }\r\n\r\n                    if (leaders.Length < 30)\r\n                    {\r\n                        byte[] fakeLeader = new BattleSubwayProfile5\r\n                        (\r\n                            new EncodedString5(\"-----\", 16),\r\n                            Versions.White, Languages.English,\r\n                            0, 0, 0x00000000, new TrendyPhrase5(0, 20, 0, 0), 0, 0\r\n                        ).Save();\r\n\r\n                        for (int x = leaders.Length; x < 30; x++)\r\n                        {\r\n                            response.Write(fakeLeader, 0, 34);\r\n                        }\r\n                    }\r\n\r\n                } break;\r\n\r\n                case \"/syachi2ds/web/battletower/upload.asp\":\r\n                {\r\n                    SessionManager.Remove(session);\r\n\r\n                    if (request.Length != 388)\r\n                    {\r\n                        ShowError(context, 400);\r\n                        return;\r\n                    }\r\n\r\n                    BattleSubwayRecord5 record = new BattleSubwayRecord5(pokedex, request, 0);\r\n\r\n                    record.Rank = request[0xf0];\r\n                    record.RoomNum = request[0xf1];\r\n                    record.BattlesWon = request[0xf2];\r\n                    record.Unknown4 = new byte[5];\r\n                    Array.Copy(request, 0xf3, record.Unknown4, 0, 5);\r\n                    record.Unknown5 = BitConverter.ToUInt64(request, 0xf8);\r\n                    record.PID = pid;\r\n\r\n                    foreach (var p in record.Party)\r\n                    {\r\n                        // todo: add battle tower specific checks:\r\n                        // item clause, species clause, banned species, banned items\r\n                        // https://bulbapedia.bulbagarden.net/wiki/Battle_Subway#Restrictions\r\n                        if (!p.Validate().IsValid)\r\n                        {\r\n                            // Tell the client it was successful so they don't keep retrying.\r\n                            response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    // todo: Do we want to store their record anyway if they lost the first round?\r\n                    if (record.BattlesWon > 0)\r\n                        Database.Instance.BattleSubwayUpdateRecord5(record);\r\n                    if (record.BattlesWon == 7)\r\n                        Database.Instance.BattleSubwayAddLeader5(record);\r\n\r\n                    // List of responses:\r\n                    // 0x00: BSOD\r\n                    // 0x01: Uploads successfully\r\n                    // 0x02: That number cannot be specified for the Wi-Fi Train. (13263)\r\n                    // 0x03: BSOD\r\n                    // 0x04: The Wi-Fi Train is very crowded. Please try again later. (13261)\r\n                    // 0x05: Unable to connect to the Wi-Fi Train. Returning to the reception counter. (13262)\r\n                    // 0x06: BSOD\r\n                    // 0x07: BSOD\r\n                    // 0x08: BSOD\r\n                    response.Write(new byte[] { 0x01, 0x00 }, 0, 2);\r\n\r\n                } break;\r\n\r\n                #endregion\r\n\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "library/Data/DataMysql.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Data;\r\nusing MySql.Data.MySqlClient;\r\nusing PkmnFoundations.Structures;\r\nusing PkmnFoundations.Support;\r\nusing System.Security.Cryptography;\r\nusing PkmnFoundations.Pokedex;\r\nusing PkmnFoundations.Wfc;\r\n\r\nnamespace PkmnFoundations.Data\r\n{\r\n    // todo: This class is getting quite large. We should move some things with\r\n    // limited usefulness (eg. database creation) into separate classes.\r\n    public class DataMysql : Database\r\n    {\r\n        #region Initialization\r\n        public DataMysql(string connString)\r\n        {\r\n            ConnectionString = connString;\r\n        }\r\n\r\n        public string ConnectionString { get; set; }\r\n\r\n        private MySqlConnection CreateConnection()\r\n        {\r\n            return new MySqlConnection(ConnectionString);\r\n        }\r\n        #endregion\r\n\r\n        #region Utility\r\n        public static string SqlSanitize(string s)\r\n        {\r\n            return SqlSanitize(s, \"\");\r\n        }\r\n\r\n        public static string SqlSanitize(string s, string newChar)\r\n        {\r\n            string result = s.Replace(\"\\'\", newChar).Replace(\"[\", newChar).Replace(\"]\", newChar).Replace(\"`\", newChar);\r\n            int x = result.IndexOf(\"--\");\r\n            if (x != -1) result = result.Substring(0, x);\r\n            return result;\r\n        }\r\n        #endregion\r\n\r\n        #region Transaction helpers\r\n        public delegate T WithMysqlTransactionDelegate<T>(MySqlTransaction tran, out bool success);\r\n\r\n        /// <summary>\r\n        /// Provides a MySqlConnection and transaction to the command and runs\r\n        /// it. The transaction always commits unless an exception is thrown.\r\n        /// </summary>\r\n        private T WithTransaction<T>(Func<MySqlTransaction, T> command)\r\n        {\r\n            T result;\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                using (MySqlTransaction tran = db.BeginTransaction())\r\n                {\r\n                    result = command(tran);\r\n                    tran.Commit();\r\n                }\r\n                db.Close();\r\n            }\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Provides a MySqlConnection and transaction to the command and runs\r\n        /// it. The transaction always commits unless an exception is thrown.\r\n        /// </summary>\r\n        private void WithTransaction(Action<MySqlTransaction> command)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                using (MySqlTransaction tran = db.BeginTransaction())\r\n                {\r\n                    command(tran);\r\n                    tran.Commit();\r\n                }\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Provides a MySqlConnection and transaction to the command and runs\r\n        /// it. The transaction is committed if success is set to true.\r\n        /// Otherwise it's rolled back. The transaction also rolls back if your\r\n        /// function throws.\r\n        /// </summary>\r\n        private T WithTransaction<T>(WithMysqlTransactionDelegate<T> command)\r\n        {\r\n            T result;\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                using (MySqlTransaction tran = db.BeginTransaction())\r\n                {\r\n                    bool success;\r\n                    result = command(tran, out success);\r\n\r\n                    if (success)\r\n                        tran.Commit();\r\n                    else\r\n                        tran.Rollback();\r\n\r\n                }\r\n                db.Close();\r\n            }\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Provides a MySqlConnection and transaction to the command and runs\r\n        /// it. The transaction is committed if the function returns true.\r\n        /// Otherwise it's rolled back. The transaction also rolls back if your\r\n        /// function throws.\r\n        /// </summary>\r\n        private bool WithTransactionSuccessful(Func<MySqlTransaction, bool> command)\r\n        {\r\n            bool success;\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n                using (MySqlTransaction tran = db.BeginTransaction())\r\n                {\r\n                    success = command(tran);\r\n\r\n                    if (success)\r\n                        tran.Commit();\r\n                    else\r\n                        tran.Rollback();\r\n\r\n                }\r\n                db.Close();\r\n            }\r\n            return success;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GTS 4\r\n        public GtsRecord4 GtsDataForUser4(MySqlTransaction tran, Pokedex.Pokedex pokedex, int pid)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT id, Data, Species, Gender, Level, \" +\r\n                \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                \"TrainerName, TrainerOT, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                \"IsExchanged, TrainerVersion, TrainerLanguage FROM GtsPokemon4 WHERE pid = @pid\",\r\n                new MySqlParameter(\"@pid\", pid)))\r\n            {\r\n\r\n                if (!reader.Read())\r\n                {\r\n                    reader.Close();\r\n                    return null;\r\n                }\r\n                GtsRecord4 result = Record4FromReader(pokedex, reader);\r\n#if DEBUG\r\n                AssertHelper.Equals(result.PID, pid);\r\n#endif\r\n                reader.Close();\r\n                return result;\r\n            }\r\n        }\r\n\r\n        public override GtsRecord4 GtsDataForUser4(Pokedex.Pokedex pokedex, int pid)\r\n        {\r\n            return WithTransaction(tran => GtsDataForUser4(tran, pokedex, pid));\r\n        }\r\n\r\n        public GtsRecord4 GtsGetRecord4(MySqlTransaction tran, Pokedex.Pokedex pokedex, long tradeId, bool isExchanged, bool allowHistory)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT id, Data, Species, Gender, Level, \" +\r\n                \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                \"TrainerName, TrainerOT, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                \"IsExchanged, TrainerVersion, TrainerLanguage FROM GtsPokemon4 \" +\r\n                \"WHERE id = @id AND IsExchanged = @is_exchanged\",\r\n                new MySqlParameter(\"@id\", tradeId),\r\n                new MySqlParameter(\"@is_exchanged\", isExchanged ? 1 : 0)))\r\n            {\r\n                if (reader.Read())\r\n                {\r\n                    GtsRecord4 result = Record4FromReader(pokedex, reader);\r\n                    reader.Close();\r\n                    return result;\r\n                }\r\n                reader.Close();\r\n            }\r\n\r\n            if (allowHistory)\r\n            {\r\n                using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT id, Data, Species, Gender, Level, \" +\r\n                    \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                    \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                    \"TrainerName, TrainerOT, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                    \"IsExchanged, TrainerVersion, TrainerLanguage FROM GtsHistory4 \" +\r\n                    \"WHERE trade_id = @id AND IsExchanged = @is_exchanged\",\r\n                    new MySqlParameter(\"@id\", tradeId),\r\n                    new MySqlParameter(\"@is_exchanged\", isExchanged ? 1 : 0)))\r\n                {\r\n                    if (reader.Read())\r\n                    {\r\n                        GtsRecord4 result = Record4FromReader(pokedex, reader);\r\n                        reader.Close();\r\n                        return result;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        public override GtsRecord4 GtsGetRecord4(Pokedex.Pokedex pokedex, long tradeId, bool isExchanged, bool allowHistory)\r\n        {\r\n            return WithTransaction(tran => GtsGetRecord4(tran, pokedex, tradeId, isExchanged, allowHistory));\r\n        }\r\n\r\n        public bool GtsDepositPokemon4(MySqlTransaction tran, GtsRecord4 record)\r\n        {\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n            // note that IsTraded being true in the record is not an error condition\r\n            // since it might have use later on. You should check for this in the upload handler.\r\n\r\n            long count = (long)tran.ExecuteScalar(\"SELECT Count(*) FROM GtsPokemon4 WHERE pid = @pid\",\r\n                new MySqlParameter(\"@pid\", record.PID));\r\n\r\n            if (count > 0)\r\n            {\r\n                // This player already has a pokemon in the system.\r\n                // we can possibly allow multiples under some future conditions\r\n                return false;\r\n            }\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO GtsPokemon4 \" +\r\n                \"(Data, Species, Gender, Level, RequestedSpecies, RequestedGender, \" +\r\n                \"RequestedMinLevel, RequestedMaxLevel, Unknown1, TrainerGender, \" +\r\n                \"Unknown2, TimeDeposited, TimeExchanged, pid, TrainerName, TrainerOT, \" +\r\n                \"TrainerCountry, TrainerRegion, TrainerClass, IsExchanged, TrainerVersion, \" +\r\n                \"TrainerLanguage) \" +\r\n                \"VALUES (@Data, @Species, @Gender, @Level, @RequestedSpecies, \" +\r\n                \"@RequestedGender, @RequestedMinLevel, @RequestedMaxLevel, @Unknown1, \" +\r\n                \"@TrainerGender, @Unknown2, @TimeDeposited, @TimeExchanged, @pid, \" +\r\n                \"@TrainerName, @TrainerOT, @TrainerCountry, @TrainerRegion, @TrainerClass, \" +\r\n                \"@IsExchanged, @TrainerVersion, @TrainerLanguage)\",\r\n                ParamsFromRecord4(record));\r\n\r\n            return true;\r\n        }\r\n\r\n        public override bool GtsDepositPokemon4(GtsRecord4 record)\r\n        {\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n\r\n            return WithTransactionSuccessful(tran => GtsDepositPokemon4(tran, record));\r\n        }\r\n\r\n        public ulong ? GtsGetDepositId4(MySqlTransaction tran, int pid)\r\n        {\r\n            object o = tran.ExecuteScalar(\"SELECT id FROM GtsPokemon4 WHERE pid = @pid \" +\r\n                \"ORDER BY IsExchanged DESC, TimeExchanged, TimeDeposited LIMIT 1\",\r\n                new MySqlParameter(\"@pid\", pid));\r\n            if (o == null || o == DBNull.Value) return null;\r\n            return Convert.ToUInt64(o);\r\n        }\r\n\r\n        public bool GtsDeletePokemon4(MySqlTransaction tran, int pid)\r\n        {\r\n            ulong ? pkmnId = GtsGetDepositId4(tran, pid);\r\n            if (pkmnId == null) return false;\r\n\r\n#if !DEBUG\r\n            try\r\n            {\r\n#endif\r\n                // this has to run before deletion or isExchanged information is lost.\r\n                // fixme: the trade_id is wrong here because logs use the\r\n                // deposited trade ID, not the exchanged one\r\n                GtsSetWithdrawTime4(tran, (ulong)pkmnId);\r\n#if !DEBUG\r\n            }\r\n            catch { }\r\n#endif\r\n\r\n            tran.ExecuteNonQuery(\"DELETE FROM GtsPokemon4 WHERE id = @id\",\r\n                new MySqlParameter(\"@id\", pkmnId));\r\n            return true;\r\n        }\r\n\r\n        public override bool GtsDeletePokemon4(int pid)\r\n        {\r\n            return WithTransactionSuccessful(tran => GtsDeletePokemon4(tran, pid));\r\n        }\r\n\r\n        private void GtsSetWithdrawTime4(MySqlTransaction tran, ulong trade_id)\r\n        {\r\n            // only set the withdraw time if IsExchanged is true.\r\n            // If false, no trade has happened; we are withdrawing our old pokemon.\r\n            if (Convert.ToByte(\r\n                tran.ExecuteScalar(\"SELECT IsExchanged FROM GtsPokemon4 WHERE id = @id\",\r\n                new MySqlParameter(\"@id\", trade_id))) != 0)\r\n            {\r\n                tran.ExecuteNonQuery(\"UPDATE GtsHistory4 \" +\r\n                    \"SET TimeWithdrawn = @now \" +\r\n                    \"WHERE trade_id = @trade_id\",\r\n                    new MySqlParameter(\"@now\", DateTime.UtcNow),\r\n                    new MySqlParameter(\"@trade_id\", trade_id));\r\n            }\r\n        }\r\n\r\n        public override bool GtsTradePokemon4(int pidSrc, int pidDest)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public bool GtsTradePokemon4(MySqlTransaction tran, GtsRecord4 upload, GtsRecord4 result, int partner_pid)\r\n        {\r\n            GtsRecord4 traded = upload.Clone();\r\n            traded.FlagTraded(result);\r\n\r\n            ulong? trade_id = GtsGetDepositId4(tran, result.PID);\r\n            GtsRecord4 resultOrig = GtsDataForUser4(tran, result.Pokedex, result.PID);\r\n            if (trade_id == null || resultOrig == null || resultOrig != result || !GtsCheckLockStatus4(tran, (ulong)trade_id, partner_pid))\r\n                // looks like the pokemon was ninja'd between the Exchange and Exchange_finish\r\n                return false;\r\n\r\n            if (!GtsDeletePokemon4(tran, result.PID))\r\n                return false;\r\n\r\n            if (!GtsDepositPokemon4(tran, traded))\r\n                return false;\r\n\r\n#if !DEBUG\r\n            try\r\n            {\r\n#endif\r\n                GtsLogTrade4(tran, result, null, partner_pid, trade_id);\r\n                GtsLogTrade4(tran, traded, null, partner_pid, trade_id);\r\n#if !DEBUG\r\n            }\r\n            catch { }\r\n#endif\r\n            return true;\r\n        }\r\n\r\n        public override bool GtsTradePokemon4(GtsRecord4 upload, GtsRecord4 result, int partner_pid)\r\n        {\r\n            return WithTransactionSuccessful(tran => GtsTradePokemon4(tran, upload, result, partner_pid));\r\n        }\r\n\r\n        public override bool GtsLockPokemon4(ulong tradeId, int partner_pid)\r\n        {\r\n            return WithTransaction(tran => GtsLockPokemon4(tran, tradeId, partner_pid));\r\n        }\r\n\r\n        public bool GtsLockPokemon4(MySqlTransaction tran, ulong tradeId, int partner_pid)\r\n        {\r\n            DateTime now = DateTime.UtcNow;\r\n            int rows = tran.ExecuteNonQuery(\"UPDATE GtsPokemon4 SET LockedUntil = @locked_until, LockedBy = @locked_by \" +\r\n                \"WHERE id = @trade_id AND (LockedUntil < @now OR LockedUntil IS NULL OR LockedBy = @locked_by)\",\r\n                new MySqlParameter(\"@trade_id\", tradeId),\r\n                new MySqlParameter(\"@locked_until\", now.AddSeconds(GTS_LOCK_DURATION)),\r\n                new MySqlParameter(\"@locked_by\", partner_pid),\r\n                new MySqlParameter(\"@now\", now));\r\n\r\n            return rows != 0;\r\n        }\r\n\r\n        public override bool GtsCheckLockStatus4(ulong tradeId, int partner_pid)\r\n        {\r\n            return WithTransaction(tran => GtsCheckLockStatus4(tran, tradeId, partner_pid));\r\n        }\r\n\r\n        public bool GtsCheckLockStatus4(MySqlTransaction tran, ulong tradeId, int partner_pid)\r\n        {\r\n            int rows = Convert.ToInt32(tran.ExecuteScalar(\"SELECT count(*) FROM GtsPokemon4 \" +\r\n                \"WHERE id = @trade_id AND (LockedUntil < @now OR LockedUntil IS NULL OR LockedBy = @locked_by)\",\r\n                new MySqlParameter(\"@trade_id\", tradeId),\r\n                new MySqlParameter(\"@locked_by\", partner_pid),\r\n                new MySqlParameter(\"@now\", DateTime.UtcNow)\r\n                ));\r\n\r\n            return rows != 0; // No rows means a lock is in effect or nothing was found\r\n        }\r\n\r\n        public GtsRecord4[] GtsSearch4(MySqlTransaction tran, Pokedex.Pokedex pokedex, int pid, ushort species, Genders gender, byte minLevel, byte maxLevel, byte country, int count)\r\n        {\r\n            List<MySqlParameter> _params = new List<MySqlParameter>();\r\n            string where = \"WHERE pid != @pid AND IsExchanged = 0 AND (LockedUntil < @now OR LockedUntil IS NULL)\";\r\n            _params.Add(new MySqlParameter(\"@pid\", pid));\r\n            _params.Add(new MySqlParameter(\"@now\", DateTime.UtcNow));\r\n\r\n            if (species > 0)\r\n            {\r\n                where += \" AND Species = @species\";\r\n                _params.Add(new MySqlParameter(\"@species\", species));\r\n            }\r\n\r\n            if (gender != Genders.Either)\r\n            {\r\n                where += \" AND Gender IN (@gender, 3)\";\r\n                _params.Add(new MySqlParameter(\"@gender\", (byte)gender));\r\n            }\r\n\r\n            if (minLevel > 0 && maxLevel > 0)\r\n            {\r\n                where += \" AND Level BETWEEN @min_level AND @max_level\";\r\n                _params.Add(new MySqlParameter(\"@min_level\", minLevel));\r\n                _params.Add(new MySqlParameter(\"@max_level\", maxLevel));\r\n            }\r\n            else if (minLevel > 0)\r\n            {\r\n                where += \" AND Level >= @min_level\";\r\n                _params.Add(new MySqlParameter(\"@min_level\", minLevel));\r\n            }\r\n            else if (maxLevel > 0)\r\n            {\r\n                where += \" AND Level <= @max_level\";\r\n                _params.Add(new MySqlParameter(\"@max_level\", maxLevel));\r\n            }\r\n\r\n            if (country > 0)\r\n            {\r\n                where += \" AND TrainerCountry = @country\";\r\n                _params.Add(new MySqlParameter(\"@country\", country));\r\n            }\r\n\r\n            string limit = \"\";\r\n            if (count > 0)\r\n            {\r\n                _params.Add(new MySqlParameter(\"@count\", count));\r\n                limit = \" LIMIT @count\";\r\n            }\r\n\r\n            // todo: sort me in creative ways\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT Data, Species, Gender, Level, \" +\r\n                \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                \"TrainerName, TrainerOT, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                \"IsExchanged, TrainerVersion, TrainerLanguage, id FROM GtsPokemon4 \" + where +\r\n                \" ORDER BY TimeDeposited DESC\" + limit,\r\n                _params.ToArray()))\r\n            {\r\n                List<GtsRecord4> records;\r\n                if (count > 0) records = new List<GtsRecord4>(count);\r\n                else records = new List<GtsRecord4>();\r\n\r\n                while (reader.Read())\r\n                {\r\n                    var record = Record4FromReader(pokedex, reader);\r\n                    record.TradeId = DatabaseExtender.Cast<ulong>(reader[\"id\"]);\r\n                    records.Add(record);\r\n                }\r\n\r\n                reader.Close();\r\n                return records.ToArray();\r\n            }\r\n        }\r\n\r\n        public override GtsRecord4[] GtsSearch4(Pokedex.Pokedex pokedex, int pid, ushort species, Genders gender, byte minLevel, byte maxLevel, byte country, int count)\r\n        {\r\n            return WithTransaction(tran => GtsSearch4(tran, pokedex, pid, species, gender, minLevel, maxLevel, country, count));\r\n        }\r\n\r\n        private static GtsRecord4 Record4FromReader(Pokedex.Pokedex pokedex, MySqlDataReader reader)\r\n        {\r\n            GtsRecord4 result = new GtsRecord4(pokedex);\r\n\r\n            result.TradeId = DatabaseExtender.Cast<ulong>(reader[\"id\"]);\r\n            result.Data = DatabaseExtender.Cast<byte[]>(reader[\"Data\"]);\r\n            result.Species = DatabaseExtender.Cast<ushort>(reader[\"Species\"]);\r\n            result.Gender = (Genders)DatabaseExtender.Cast<byte>(reader[\"Gender\"]);\r\n            result.Level = DatabaseExtender.Cast<byte>(reader[\"Level\"]);\r\n            result.RequestedSpecies = DatabaseExtender.Cast<ushort>(reader[\"RequestedSpecies\"]);\r\n            result.RequestedGender = (Genders)DatabaseExtender.Cast<byte>(reader[\"RequestedGender\"]);\r\n            result.RequestedMinLevel = DatabaseExtender.Cast<byte>(reader[\"RequestedMinLevel\"]);\r\n            result.RequestedMaxLevel = DatabaseExtender.Cast<byte>(reader[\"RequestedMaxLevel\"]);\r\n            result.Unknown1 = DatabaseExtender.Cast<byte>(reader[\"Unknown1\"]);\r\n            result.TrainerGender = (TrainerGenders)DatabaseExtender.Cast<byte>(reader[\"TrainerGender\"]);\r\n            result.Unknown2 = DatabaseExtender.Cast<byte>(reader[\"Unknown2\"]);\r\n            result.TimeDeposited = DatabaseExtender.Cast<DateTime ?>(reader[\"TimeDeposited\"]);\r\n            result.TimeExchanged = DatabaseExtender.Cast<DateTime?>(reader[\"TimeExchanged\"]);\r\n            result.PID = DatabaseExtender.Cast<int>(reader[\"pid\"]);\r\n            result.TrainerNameEncoded = new EncodedString4(DatabaseExtender.Cast<byte[]>(reader[\"TrainerName\"]));\r\n            result.TrainerOT = DatabaseExtender.Cast<ushort>(reader[\"TrainerOT\"]);\r\n            result.TrainerCountry = DatabaseExtender.Cast<byte>(reader[\"TrainerCountry\"]);\r\n            result.TrainerRegion = DatabaseExtender.Cast<byte>(reader[\"TrainerRegion\"]);\r\n            result.TrainerClass = DatabaseExtender.Cast<byte>(reader[\"TrainerClass\"]);\r\n            result.IsExchanged = DatabaseExtender.Cast<byte>(reader[\"IsExchanged\"]);\r\n            result.TrainerVersion = (Versions)DatabaseExtender.Cast<byte>(reader[\"TrainerVersion\"]);\r\n            result.TrainerLanguage = (Languages)DatabaseExtender.Cast<byte>(reader[\"TrainerLanguage\"]);\r\n\r\n            return result;\r\n        }\r\n\r\n        private static MySqlParameter[] ParamsFromRecord4(GtsRecord4 record)\r\n        {\r\n            MySqlParameter[] result = new MySqlParameter[22];\r\n\r\n            result[0] = new MySqlParameter(\"@Data\", record.Data.ToArray());\r\n            result[1] = new MySqlParameter(\"@Species\", record.Species);\r\n            result[2] = new MySqlParameter(\"@Gender\", (byte)record.Gender);\r\n            result[3] = new MySqlParameter(\"@Level\", record.Level);\r\n            result[4] = new MySqlParameter(\"@RequestedSpecies\", record.RequestedSpecies);\r\n            result[5] = new MySqlParameter(\"@RequestedGender\", (byte)record.RequestedGender);\r\n            result[6] = new MySqlParameter(\"@RequestedMinLevel\", record.RequestedMinLevel);\r\n            result[7] = new MySqlParameter(\"@RequestedMaxLevel\", record.RequestedMaxLevel);\r\n            result[8] = new MySqlParameter(\"@Unknown1\", record.Unknown1);\r\n            result[9] = new MySqlParameter(\"@TrainerGender\", (byte)record.TrainerGender);\r\n            result[10] = new MySqlParameter(\"@Unknown2\", record.Unknown2);\r\n            result[11] = new MySqlParameter(\"@TimeDeposited\", record.TimeDeposited);\r\n            result[12] = new MySqlParameter(\"@TimeExchanged\", record.TimeExchanged);\r\n            result[13] = new MySqlParameter(\"@pid\", record.PID);\r\n            result[14] = new MySqlParameter(\"@TrainerName\", record.TrainerNameEncoded.RawData);\r\n            result[15] = new MySqlParameter(\"@TrainerOT\", record.TrainerOT);\r\n            result[16] = new MySqlParameter(\"@TrainerCountry\", record.TrainerCountry);\r\n            result[17] = new MySqlParameter(\"@TrainerRegion\", record.TrainerRegion);\r\n            result[18] = new MySqlParameter(\"@TrainerClass\", record.TrainerClass);\r\n            result[19] = new MySqlParameter(\"@IsExchanged\", record.IsExchanged);\r\n            result[20] = new MySqlParameter(\"@TrainerVersion\", record.TrainerVersion);\r\n            result[21] = new MySqlParameter(\"@TrainerLanguage\", record.TrainerLanguage);\r\n\r\n            return result;\r\n        }\r\n\r\n        public int GtsAvailablePokemon4(MySqlTransaction tran)\r\n        {\r\n            return Convert.ToInt32(tran.ExecuteScalar(\"SELECT Count(*) FROM GtsPokemon4 WHERE IsExchanged = 0\"));\r\n        }\r\n\r\n        public override int GtsAvailablePokemon4()\r\n        {\r\n            return WithTransaction(tran => GtsAvailablePokemon4(tran));\r\n        }\r\n\r\n        public void GtsLogTrade4(MySqlTransaction tran, GtsRecord4 record, DateTime? timeWithdrawn, int ? partner_pid, ulong ? trade_id)\r\n        {\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n            // note that IsTraded being true in the record is not an error condition\r\n            // since it might have use later on. You should check for this in the upload handler.\r\n\r\n            if (trade_id == null)\r\n                trade_id = GtsGetDepositId4(tran, record.PID);\r\n\r\n            // when calling delete.asp, the partner pid can't be told from the request alone,\r\n            // so obtain it from the database instead.\r\n            if (record.IsExchanged != 0 && trade_id != null && partner_pid == null)\r\n            {\r\n                partner_pid = (int?)tran.ExecuteScalar(\"SELECT partner_pid FROM GtsHistory4 \" +\r\n                    \"WHERE trade_id = @trade_id AND IsExchanged = 0\", new MySqlParameter(\"@trade_id\", trade_id));\r\n            }\r\n\r\n            MySqlParameter[] _params = ParamsFromRecord4(record);\r\n            MySqlParameter[] _params2 = new MySqlParameter[25];\r\n            Array.Copy(_params, _params2, 22);\r\n            _params2[22] = new MySqlParameter(\"@TimeWithdrawn\", timeWithdrawn);\r\n            _params2[23] = new MySqlParameter(\"@trade_id\", trade_id);\r\n            _params2[24] = new MySqlParameter(\"@partner_pid\", partner_pid);\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO GtsHistory4 \" +\r\n                \"(Data, Species, Gender, Level, RequestedSpecies, RequestedGender, \" +\r\n                \"RequestedMinLevel, RequestedMaxLevel, Unknown1, TrainerGender, \" +\r\n                \"Unknown2, TimeDeposited, TimeExchanged, pid, TrainerName, TrainerOT, \" +\r\n                \"TrainerCountry, TrainerRegion, TrainerClass, IsExchanged, TrainerVersion, \" +\r\n                \"TrainerLanguage, TimeWithdrawn, trade_id, partner_pid) \" +\r\n                \"VALUES (@Data, @Species, @Gender, @Level, @RequestedSpecies, \" +\r\n                \"@RequestedGender, @RequestedMinLevel, @RequestedMaxLevel, @Unknown1, \" +\r\n                \"@TrainerGender, @Unknown2, @TimeDeposited, @TimeExchanged, @pid, \" +\r\n                \"@TrainerName, @TrainerOT, @TrainerCountry, @TrainerRegion, @TrainerClass, \" +\r\n                \"@IsExchanged, @TrainerVersion, @TrainerLanguage, @TimeWithdrawn, \" +\r\n                \"@trade_id, @partner_pid)\",\r\n                _params2);\r\n        }\r\n\r\n        public void GtsLogTrade4(GtsRecord4 record, DateTime? timeWithdrawn, int? partner_pid, ulong ? trade_id)\r\n        {\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n\r\n            WithTransaction(tran => GtsLogTrade4(tran, record, timeWithdrawn, partner_pid, trade_id));\r\n        }\r\n\r\n        public void GtsSetLastSearch4(MySqlTransaction tran, int pid)\r\n        {\r\n            tran.ExecuteNonQuery(\"UPDATE GtsProfiles4 SET TimeLastSearch = \" +\r\n                \"@now WHERE pid = @pid\", new MySqlParameter(\"@now\", DateTime.UtcNow),\r\n                new MySqlParameter(\"@pid\", pid));\r\n        }\r\n\r\n        public override void GtsSetLastSearch4(int pid)\r\n        {\r\n            WithTransaction(tran => GtsSetLastSearch4(tran, pid));\r\n        }\r\n\r\n        public DateTime ? GtsGetLastSearch4(MySqlTransaction tran, int pid)\r\n        {\r\n            object result = tran.ExecuteScalar(\"SELECT TimeLastSearch \" +\r\n                \"FROM GtsProfiles4 WHERE pid = @pid\", new MySqlParameter(\"@pid\", pid));\r\n            if (result == null || result is DBNull) return null;\r\n            return (DateTime)result;\r\n        }\r\n\r\n        public override DateTime ? GtsGetLastSearch4(int pid)\r\n        {\r\n            return WithTransaction(tran => GtsGetLastSearch4(tran, pid));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Battle Tower 4\r\n        private ulong BattleTowerUpdateRecord4(MySqlTransaction tran, BattleTowerRecord4 record)\r\n        {\r\n            if (record.BattlesWon > 7) throw new ArgumentException(\"Battles won can not be greater than 7.\");\r\n\r\n            // Does this player already have a record in this room?\r\n            // Also get primary key if it does. (We need it for updating party)\r\n            //\r\n            // The official server doesn't seem to ever replace existing\r\n            // records. This worked fine for them, but we don't have nearly\r\n            // as many active players, so doing this will cause too many\r\n            // duplicates. Instead, we require the trainers in a given room to\r\n            // be unique by replacing their old record with a new one.\r\n            ulong pkey = FindBattleTowerRecord4(tran, record, false);\r\n\r\n            if (pkey != 0)\r\n            {\r\n                // If the player already has a record, move everyone below it up one position\r\n                // (effectively removing this record from the ordering)\r\n\r\n                // todo: In the case that the player's rank hasn't changed,\r\n                // we can optimize this and the next down to a single BETWEEN\r\n                // query.\r\n                // This does require retrieving their old rank from the db.\r\n                tran.ExecuteNonQuery(\"SELECT Rank, Position INTO @old_rank, @old_position \" +\r\n                    \"FROM GtsBattleTower4 WHERE id = @pkey; \" +\r\n                    \"UPDATE GtsBattleTower4 SET Position = Position - 1 \" +\r\n                    \"WHERE RoomNum = @room AND Rank = @old_rank AND Position > @old_position\",\r\n                    new MySqlParameter(\"@pkey\", pkey),\r\n                    new MySqlParameter(\"@room\", record.RoomNum));\r\n            }\r\n\r\n            uint position = (uint)(7 - record.BattlesWon);\r\n\r\n            // Shift down all the players in the player's new rank by one.\r\n            tran.ExecuteNonQuery(\"UPDATE GtsBattleTower4 SET Position = Position + 1 \" +\r\n                \"WHERE RoomNum = @room AND Rank = @rank AND Position >= @position\",\r\n                new MySqlParameter(\"@room\", record.RoomNum),\r\n                new MySqlParameter(\"@rank\", record.Rank),\r\n                new MySqlParameter(\"@position\", position));\r\n\r\n            object lastPosition = tran.ExecuteScalar(\"SELECT MAX(Position) \" +\r\n                \"FROM GtsBattleTower4 WHERE RoomNum = @room AND Rank = @rank\",\r\n                new MySqlParameter(\"@room\", record.RoomNum),\r\n                new MySqlParameter(\"@rank\", record.Rank));\r\n\r\n            // If the room has fewer than 7 trainers, insert this one at the\r\n            // end but don't leave any gaps in the numbering.\r\n            if (lastPosition is DBNull)\r\n                position = 0;\r\n            else\r\n                position = Math.Min(position, (uint)lastPosition + 1);\r\n\r\n            // Update the actual record\r\n            if (pkey != 0)\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleTowerRecord4(record, false);\r\n                _params.Add(new MySqlParameter(\"@position\", position));\r\n                _params.Add(new MySqlParameter(\"@id\", pkey));\r\n\r\n                tran.ExecuteNonQuery(\"UPDATE GtsBattleTower4 SET pid = @pid, Name = @name, \" +\r\n                    \"Version = @version, Language = @language, Country = @country, \" +\r\n                    \"Region = @region, TrainerID = @trainer_id, \" +\r\n                    \"PhraseLeader = @phrase_leader, Gender = @gender, \" +\r\n                    \"Unknown2 = @unknown2, PhraseChallenged = @phrase_challenged, \" +\r\n                    \"PhraseWon = @phrase_won, PhraseLost = @phrase_lost, \" +\r\n                    \"Unknown3 = @unknown3, \" +\r\n                    \"Unknown5 = @unknown5, ParseVersion = 1, Rank = @rank, \" +\r\n                    \"BattlesWon = @battles_won, Position = @position, \" +\r\n                    \"TimeUpdated = UTC_TIMESTAMP() WHERE id = @id\",\r\n                    _params.ToArray());\r\n\r\n                UpdateBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[0], pkey, 0);\r\n                UpdateBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[1], pkey, 1);\r\n                UpdateBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[2], pkey, 2);\r\n            }\r\n            else\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleTowerRecord4(record, false);\r\n                _params.Add(new MySqlParameter(\"@position\", position));\r\n\r\n                pkey = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO GtsBattleTower4 \" +\r\n                    \"(pid, Name, Version, Language, Country, Region, TrainerID, \" +\r\n                    \"PhraseLeader, Gender, Unknown2, PhraseChallenged, PhraseWon, \" +\r\n                    \"PhraseLost, Unknown3, Unknown5, ParseVersion, \" +\r\n                    \"Rank, RoomNum, BattlesWon, Position, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @name, @version, @language, @country, @region, @trainer_id, \" +\r\n                    \"@phrase_leader, @gender, @unknown2, @phrase_challenged, @phrase_won, \" +\r\n                    \"@phrase_lost, @unknown3, @unknown5, 1, \" +\r\n                    \"@rank, @room, @battles_won, @position, UTC_TIMESTAMP(), UTC_TIMESTAMP()); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    _params.ToArray()));\r\n\r\n                InsertBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[0], pkey, 0);\r\n                InsertBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[1], pkey, 1);\r\n                InsertBattleTowerPokemon4(tran, (BattleTowerPokemon4)record.Party[2], pkey, 2);\r\n            }\r\n\r\n            return pkey;\r\n        }\r\n\r\n        public override ulong BattleTowerUpdateRecord4(BattleTowerRecord4 record)\r\n        {\r\n            if (record.BattlesWon > 7) throw new ArgumentException(\"Battles won can not be greater than 7.\");\r\n\r\n            return WithTransaction(tran => BattleTowerUpdateRecord4(tran, record));\r\n        }\r\n\r\n        private void InsertBattleTowerPokemon4(MySqlTransaction tran, BattleTowerPokemon4 pokemon, ulong partyId, byte slot)\r\n        {\r\n            List<MySqlParameter> _params = ParamsFromBattleTowerPokemon4(pokemon);\r\n            _params.Add(new MySqlParameter(\"@id\", partyId));\r\n            _params.Add(new MySqlParameter(\"@slot\", slot));\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO GtsBattleTowerPokemon4 \" +\r\n                \"(party_id, Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, TrainerID, \" +\r\n                \"Personality, IVs, EVs, Unknown1, Language, Ability, Happiness, Nickname) VALUES \" +\r\n                \"(@id, @slot, @species, @form, @held_item, @move1, @move2, @move3, @move4, @trainer_id, \" +\r\n                \"@personality, @ivs, @evs, @unknown1, @language, @ability, @happiness, @nickname)\",\r\n                _params.ToArray());\r\n        }\r\n\r\n        private void UpdateBattleTowerPokemon4(MySqlTransaction tran, BattleTowerPokemon4 pokemon, ulong partyId, byte slot)\r\n        {\r\n            List<MySqlParameter> _params = ParamsFromBattleTowerPokemon4(pokemon);\r\n            _params.Add(new MySqlParameter(\"@id\", partyId));\r\n            _params.Add(new MySqlParameter(\"@slot\", slot));\r\n\r\n            tran.ExecuteNonQuery(\"UPDATE GtsBattleTowerPokemon4 SET Species = @species, \" +\r\n                \"Form = @form, HeldItem = @held_item, Move1 = @move1, Move2 = @move2, \" +\r\n                \"Move3 = @move3, Move4 = @move4, TrainerID = @trainer_id, \" +\r\n                \"Personality = @personality, IVs = @ivs, EVs = @evs, Unknown1 = @unknown1, \" +\r\n                \"Language = @language, Ability = @ability, Happiness = @happiness, \" +\r\n                \"Nickname = @nickname \" +\r\n                \"WHERE party_id = @id AND Slot = @slot\",\r\n                _params.ToArray());\r\n        }\r\n\r\n        private List<MySqlParameter> ParamsFromBattleTowerRecord4(BattleTowerRecord4 record, bool leader)\r\n        {\r\n            List<MySqlParameter> result = new List<MySqlParameter>(15);\r\n            BattleTowerProfile4 profile = (BattleTowerProfile4)record.Profile;\r\n            result.Add(new MySqlParameter(\"@pid\", record.PID));\r\n            result.Add(new MySqlParameter(\"@name\", profile.Name.RawData));\r\n            result.Add(new MySqlParameter(\"@version\", (byte)profile.Version));\r\n            result.Add(new MySqlParameter(\"@language\", (byte)profile.Language));\r\n            result.Add(new MySqlParameter(\"@country\", profile.Country));\r\n            result.Add(new MySqlParameter(\"@region\", profile.Region));\r\n            result.Add(new MySqlParameter(\"@trainer_id\", profile.OT));\r\n            result.Add(new MySqlParameter(\"@phrase_leader\", profile.PhraseLeader.Data));\r\n            result.Add(new MySqlParameter(\"@gender\", profile.Gender));\r\n            result.Add(new MySqlParameter(\"@unknown2\", profile.Unknown));\r\n            result.Add(new MySqlParameter(\"@rank\", record.Rank));\r\n            result.Add(new MySqlParameter(\"@room\", record.RoomNum));\r\n            if (!leader)\r\n            {\r\n                result.Add(new MySqlParameter(\"@phrase_challenged\", record.PhraseChallenged.Data));\r\n                result.Add(new MySqlParameter(\"@phrase_won\", record.PhraseWon.Data));\r\n                result.Add(new MySqlParameter(\"@phrase_lost\", record.PhraseLost.Data));\r\n                result.Add(new MySqlParameter(\"@unknown3\", record.Unknown3));\r\n                result.Add(new MySqlParameter(\"@unknown5\", record.Unknown5));\r\n                result.Add(new MySqlParameter(\"@battles_won\", record.BattlesWon));\r\n            }\r\n            return result;\r\n        }\r\n\r\n        private List<MySqlParameter> ParamsFromBattleTowerPokemon4(BattleTowerPokemon4 pokemon)\r\n        {\r\n            List<MySqlParameter> result = new List<MySqlParameter>(15);\r\n            result.Add(new MySqlParameter(\"@species\", pokemon.SpeciesID));\r\n            result.Add(new MySqlParameter(\"@form\", pokemon.FormID));\r\n            result.Add(new MySqlParameter(\"@held_item\", pokemon.HeldItemID));\r\n            result.Add(new MySqlParameter(\"@move1\", (ushort)pokemon.Moves[0].MoveID));\r\n            result.Add(new MySqlParameter(\"@move2\", (ushort)pokemon.Moves[1].MoveID));\r\n            result.Add(new MySqlParameter(\"@move3\", (ushort)pokemon.Moves[2].MoveID));\r\n            result.Add(new MySqlParameter(\"@move4\", (ushort)pokemon.Moves[3].MoveID));\r\n            result.Add(new MySqlParameter(\"@trainer_id\", pokemon.TrainerID));\r\n            result.Add(new MySqlParameter(\"@personality\", pokemon.Personality));\r\n            result.Add(new MySqlParameter(\"@ivs\", pokemon.IVs.ToInt32() | (int)pokemon.IvFlags));\r\n            result.Add(new MySqlParameter(\"@evs\", pokemon.EVs.ToArray()));\r\n            result.Add(new MySqlParameter(\"@unknown1\", pokemon.GetPpUps()));\r\n            result.Add(new MySqlParameter(\"@language\", (byte)pokemon.Language));\r\n            result.Add(new MySqlParameter(\"@ability\", pokemon.AbilityID));\r\n            result.Add(new MySqlParameter(\"@happiness\", pokemon.Happiness));\r\n            result.Add(new MySqlParameter(\"@nickname\", pokemon.NicknameEncoded.RawData));\r\n            return result;\r\n        }\r\n\r\n        private ulong BattleTowerAddLeader4(MySqlTransaction tran, BattleTowerRecord4 record)\r\n        {\r\n            ulong pkey = FindBattleTowerRecord4(tran, record, true);\r\n\r\n            // Update the actual record\r\n            if (pkey != 0)\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleTowerRecord4(record, true);\r\n                _params.Add(new MySqlParameter(\"@id\", pkey));\r\n\r\n                tran.ExecuteNonQuery(\"UPDATE GtsBattleTowerLeaders4 SET \" +\r\n                    \"pid = @pid, Name = @name, Version = @version, \" +\r\n                    \"Language = @language, Country = @country, Region = @region, \" +\r\n                    \"TrainerID = @trainer_id, \" +\r\n                    \"PhraseLeader = @phrase_leader, Gender = @gender, Unknown2 = @unknown2, \" +\r\n                    \"ParseVersion = 1, Rank = @rank, \" +\r\n                    \"TimeUpdated = UTC_TIMESTAMP() WHERE id = @id\",\r\n                    _params.ToArray());\r\n            }\r\n            else\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleTowerRecord4(record, true);\r\n\r\n                pkey = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO \" +\r\n                    \"GtsBattleTowerLeaders4 \" +\r\n                    \"(pid, Name, Version, Language, Country, Region, TrainerID, \" +\r\n                    \"PhraseLeader, Gender, Unknown2, ParseVersion, Rank, \" +\r\n                    \"RoomNum, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @name, @version, @language, @country, @region, @trainer_id, \" +\r\n                    \"@phrase_leader, @gender, @unknown2, 1, @rank, \" +\r\n                    \"@room, UTC_TIMESTAMP(), UTC_TIMESTAMP()); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    _params.ToArray()));\r\n            }\r\n\r\n            return pkey;\r\n        }\r\n\r\n        public override ulong BattleTowerAddLeader4(BattleTowerRecord4 record)\r\n        {\r\n            return WithTransaction(tran => BattleTowerAddLeader4(tran, record));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to find an existing database record for the provided player\r\n        /// record. The match must be found in the same rank and room number.\r\n        /// </summary>\r\n        /// <param name=\"tran\"></param>\r\n        /// <param name=\"record\"></param>\r\n        /// <param name=\"leader\">If true, look up against the Leaders table.\r\n        /// Otherwise looks up against the opponents table.</param>\r\n        /// <returns>The match's primary key or 0 if no match is found\r\n        /// </returns>\r\n        private ulong FindBattleTowerRecord4(MySqlTransaction tran, BattleTowerRecord4 record, bool leader)\r\n        {\r\n            string tblName = leader ? \"GtsBattleTowerLeaders4\" : \"GtsBattleTower4\";\r\n\r\n            // If PID is missing, this is restored data.\r\n            // We assume the original server took care of matching existing\r\n            // records, so we don't allow it to match here.\r\n            if (record.PID == 0) return 0;\r\n\r\n            // Match normally.\r\n            object oPkey = tran.ExecuteScalar(\"SELECT id FROM \" + tblName +\r\n                \" WHERE pid = @pid AND RoomNum = @room AND Rank = @rank\",\r\n                new MySqlParameter(\"@pid\", record.PID),\r\n                new MySqlParameter(\"@rank\", record.Rank),\r\n                new MySqlParameter(\"@room\", record.RoomNum));\r\n\r\n            if (oPkey == null)\r\n            {\r\n                BattleTowerProfile4 profile = (BattleTowerProfile4)record.Profile;\r\n                // PID isn't found. Try to match one of Pikachu025's saved\r\n                // records based on unchanging properties of the savegame.\r\n                oPkey = tran.ExecuteScalar(\"SELECT id FROM \" + tblName +\r\n                    \" WHERE pid = 0 AND RoomNum = @room AND Rank = @rank \" +\r\n                    \"AND Name = @name AND Version = @version \" +\r\n                    \"AND Language = @language AND TrainerID = @trainer_id\",\r\n                    new MySqlParameter(\"@rank\", record.Rank),\r\n                    new MySqlParameter(\"@room\", record.RoomNum),\r\n                    new MySqlParameter(\"@name\", profile.Name.RawData),\r\n                    new MySqlParameter(\"@version\", (byte)profile.Version),\r\n                    new MySqlParameter(\"@language\", (byte)profile.Language),\r\n                    new MySqlParameter(\"@trainer_id\", profile.OT)\r\n                );\r\n            }\r\n\r\n            // Don't need to worry about DBNull since the column is non-null.\r\n            return (ulong)(oPkey ?? 0UL);\r\n        }\r\n\r\n        public BattleTowerRecord4[] BattleTowerGetOpponents4(MySqlTransaction tran, Pokedex.Pokedex pokedex, int pid, byte rank, byte roomNum)\r\n        {\r\n            List<BattleTowerRecord4> records = new List<BattleTowerRecord4>(7);\r\n            List<ulong> keys = new List<ulong>(7);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\r\n                \"SELECT id, pid, Name, \" +\r\n                \"Version, Language, Country, Region, TrainerID, \" +\r\n                \"PhraseLeader, Gender, Unknown2, PhraseChallenged, \" +\r\n                \"PhraseWon, PhraseLost, Unknown3, Unknown5 FROM GtsBattleTower4 \" +\r\n                \"WHERE Rank = @rank AND RoomNum = @room AND pid != @pid \" +\r\n                \"ORDER BY Position LIMIT 7\",\r\n                new MySqlParameter(\"@rank\", rank),\r\n                new MySqlParameter(\"@room\", roomNum),\r\n                new MySqlParameter(\"@pid\", pid)))\r\n            {\r\n                while (reader.Read())\r\n                {\r\n                    BattleTowerRecord4 record = BattleTowerRecord4FromReader(reader, pokedex);\r\n                    record.Party = new BattleTowerPokemon4[3];\r\n                    records.Add(record);\r\n                    keys.Add(reader.GetUInt64(0));\r\n                }\r\n                reader.Close();\r\n            }\r\n\r\n            if (records.Count == 0) return new BattleTowerRecord4[0];\r\n\r\n            string inClause = String.Join(\", \", keys.Select(i => i.ToString()).ToArray());\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT party_id, \" +\r\n                \"Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, \" +\r\n                \"TrainerID, Personality, IVs, EVs, Unknown1, Language, \" +\r\n                \"Ability, Happiness, Nickname FROM GtsBattleTowerPokemon4 \" +\r\n                \"WHERE party_id IN (\" + inClause + \")\"))\r\n            {\r\n                while (reader.Read())\r\n                {\r\n                    BattleTowerRecord4 record = records[keys.IndexOf(reader.GetUInt64(0))];\r\n                    record.Party[reader.GetByte(1)] = BattleTowerPokemon4FromReader(reader, pokedex);\r\n                }\r\n                reader.Close();\r\n            }\r\n\r\n            return Enumerable.Reverse(records).ToArray();\r\n        }\r\n\r\n        public override BattleTowerRecord4[] BattleTowerGetOpponents4(Pokedex.Pokedex pokedex, int pid, byte rank, byte roomNum)\r\n        {\r\n            return WithTransaction(tran => BattleTowerGetOpponents4(tran, pokedex, pid, rank, roomNum));\r\n        }\r\n\r\n        private BattleTowerRecord4 BattleTowerRecord4FromReader(MySqlDataReader reader, Pokedex.Pokedex pokedex)\r\n        {\r\n            // xxx: Stop using ordinals everywhere.\r\n            BattleTowerRecord4 result = new BattleTowerRecord4(pokedex);\r\n            result.PID = reader.GetInt32(1);\r\n\r\n            if (reader.FieldCount > 11) result.PhraseChallenged = new TrendyPhrase4(reader.GetByteArray(11, 8));\r\n            if (reader.FieldCount > 12) result.PhraseWon = new TrendyPhrase4(reader.GetByteArray(12, 8));\r\n            if (reader.FieldCount > 13) result.PhraseLost = new TrendyPhrase4(reader.GetByteArray(13, 8));\r\n            if (reader.FieldCount > 14) result.Unknown3 = reader.GetUInt16(14);\r\n            if (reader.FieldCount > 15) result.Unknown5 = reader.GetUInt64(15);\r\n\r\n            BattleTowerProfile4 profile = new BattleTowerProfile4();\r\n            profile.Name = new EncodedString4(reader.GetByteArray(2, 16));\r\n            profile.Version = (Versions)reader.GetByte(3);\r\n            profile.Language = (Languages)reader.GetByte(4);\r\n            profile.Country = reader.GetByte(5);\r\n            profile.Region = reader.GetByte(6);\r\n            profile.OT = reader.GetUInt32(7);\r\n            profile.PhraseLeader = new TrendyPhrase4(reader.GetByteArray(8, 8));\r\n            profile.Gender = reader.GetByte(9);\r\n            profile.Unknown = reader.GetByte(10);\r\n\r\n            result.Profile = profile;\r\n            return result;\r\n        }\r\n\r\n        private BattleTowerPokemon4 BattleTowerPokemon4FromReader(MySqlDataReader reader, Pokedex.Pokedex pokedex)\r\n        {\r\n            ushort? speciesId = DatabaseExtender.Cast<ushort?>(reader[\"Species\"]);\r\n            ushort? formId = DatabaseExtender.Cast<ushort?>(reader[\"Form\"]);\r\n\r\n            return new BattleTowerPokemon4(pokedex,\r\n                (int)speciesId,\r\n                (byte)formId,\r\n                DatabaseExtender.Cast<ushort>(reader[\"HeldItem\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move1\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move2\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move3\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move4\"]),\r\n                DatabaseExtender.Cast<uint>(reader[\"TrainerID\"]),\r\n                DatabaseExtender.Cast<uint>(reader[\"Personality\"]),\r\n                DatabaseExtender.Cast<uint>(reader[\"IVs\"]),\r\n                DatabaseExtender.Cast<byte[]>(reader[\"EVs\"]),\r\n                DatabaseExtender.Cast<byte>(reader[\"Unknown1\"]),\r\n                (Languages)DatabaseExtender.Cast<byte>(reader[\"Language\"]),\r\n                DatabaseExtender.Cast<byte>(reader[\"Ability\"]),\r\n                DatabaseExtender.Cast<byte>(reader[\"Happiness\"]),\r\n                new EncodedString4(DatabaseExtender.Cast<byte[]>(reader[\"Nickname\"]), 0, 22)\r\n                );\r\n        }\r\n\r\n        public BattleTowerProfile4[] BattleTowerGetLeaders4(MySqlTransaction tran, Pokedex.Pokedex pokedex, byte rank, byte roomNum)\r\n        {\r\n            List<BattleTowerProfile4> profiles = new List<BattleTowerProfile4>(30);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\r\n                \"SELECT id, pid, Name, \" +\r\n                \"Version, Language, Country, Region, TrainerID, \" +\r\n                \"PhraseLeader, Gender, Unknown2 FROM GtsBattleTowerLeaders4 \" +\r\n                \"WHERE Rank = @rank AND RoomNum = @room \" +\r\n                \"ORDER BY TimeUpdated DESC, id LIMIT 30\",\r\n                new MySqlParameter(\"@rank\", rank),\r\n                new MySqlParameter(\"@room\", roomNum)))\r\n            {\r\n                while (reader.Read())\r\n                    profiles.Add((BattleTowerProfile4)BattleTowerRecord4FromReader(reader, pokedex).Profile);\r\n\r\n                reader.Close();\r\n            }\r\n\r\n            return profiles.ToArray();\r\n        }\r\n\r\n        public override BattleTowerProfile4[] BattleTowerGetLeaders4(Pokedex.Pokedex pokedex, byte rank, byte roomNum)\r\n        {\r\n            return WithTransaction(tran => BattleTowerGetLeaders4(tran, pokedex, rank, roomNum));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Wi-fi Plaza\r\n        public override TrainerProfilePlaza PlazaGetProfile(int pid)\r\n        {\r\n            return WithTransaction(tran => PlazaGetProfile(tran, pid));\r\n        }\r\n\r\n        public TrainerProfilePlaza PlazaGetProfile(MySqlTransaction tran, int pid)\r\n        {\r\n            // todo next maintenance: remove this CONCAT after the database is updated.\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT \" +\r\n                \"Data FROM pkmncf_plaza_profiles \" +\r\n                \"WHERE pid = @pid\",\r\n                new MySqlParameter(\"@pid\", pid)))\r\n            {\r\n                if (reader.Read())\r\n                {\r\n                    TrainerProfilePlaza result = new TrainerProfilePlaza(pid, reader.GetByteArray(0, 164));\r\n                    reader.Close();\r\n                    return result;\r\n                }\r\n                else return null;\r\n            }\r\n        }\r\n\r\n        public override bool PlazaSetProfile(TrainerProfilePlaza profile)\r\n        {\r\n            return WithTransaction(tran => PlazaSetProfile(tran, profile));\r\n        }\r\n\r\n        public bool PlazaSetProfile(MySqlTransaction tran, TrainerProfilePlaza profile)\r\n        {\r\n            if (profile.Data.Length != 164) throw new FormatException(\"Profile data must be 164 bytes.\");\r\n\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * FROM pkmncf_plaza_profiles WHERE pid = @pid)\", \r\n                new MySqlParameter(\"@pid\", profile.PID))) != 0;\r\n\r\n            // todo next maintenance: Remove this @data_prefix parameter once all data is corrected\r\n            MySqlParameter[] _params = new MySqlParameter[]{\r\n                new MySqlParameter(\"@pid\", profile.PID),\r\n                new MySqlParameter(\"@data\", profile.Data),\r\n                new MySqlParameter(\"@version\", (byte)profile.Version),\r\n                new MySqlParameter(\"@language\", (byte)profile.Language),\r\n                new MySqlParameter(\"@country\", profile.Country),\r\n                new MySqlParameter(\"@region\", profile.Region),\r\n                new MySqlParameter(\"@ot\", profile.OT),\r\n                new MySqlParameter(\"@name\", profile.Name.RawData)\r\n            };\r\n\r\n            if (exists)\r\n            {\r\n                return tran.ExecuteNonQuery(\"UPDATE pkmncf_plaza_profiles \" +\r\n                    \"SET Data = @data, \" +\r\n                    \"Version = @version, Language = @language, Country = @country, \" +\r\n                    \"Region = @region, OT = @ot, Name = @name, ParseVersion = 1, \" +\r\n                    \"TimeUpdated = UTC_TIMESTAMP() \" +\r\n                    \"WHERE pid = @pid\", _params) > 0;\r\n            }\r\n            else\r\n            {\r\n                return tran.ExecuteNonQuery(\"INSERT INTO pkmncf_plaza_profiles \" +\r\n                    \"(pid, Data, Version, Language, Country, Region, OT, Name, \" +\r\n                    \"ParseVersion, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @data, @version, @language, @country, @region, @ot, \" +\r\n                    \"@name, 1, UTC_TIMESTAMP(), UTC_TIMESTAMP())\", _params) > 0;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Other Gamestats 4\r\n        public override bool GamestatsBumpProfile4(int pid, string ip_address)\r\n        {\r\n            return WithTransaction(tran => GamestatsBumpProfile4(tran, pid, ip_address));\r\n        }\r\n\r\n        public bool GamestatsBumpProfile4(MySqlTransaction tran, int pid, string ip_address)\r\n        {\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * FROM GtsProfiles4 WHERE pid = @pid)\", \r\n                new MySqlParameter(\"@pid\", pid))) != 0;\r\n\r\n            if (exists)\r\n            {\r\n                return tran.ExecuteNonQuery(\"UPDATE GtsProfiles4 SET \" +\r\n                    \"TimeUpdated = UTC_TIMESTAMP(), IpAddress = @ip_address \" +\r\n                    \"WHERE pid = @pid\", \r\n                    new MySqlParameter(\"@ip_address\", ip_address),\r\n                    new MySqlParameter(\"@pid\", pid)) > 0;\r\n            }\r\n            else\r\n            {\r\n                return tran.ExecuteNonQuery(\"INSERT INTO GtsProfiles4 \" +\r\n                    \"(pid, TimeAdded, TimeUpdated, IpAddress) VALUES (@pid, UTC_TIMESTAMP(), \" +\r\n                    \"UTC_TIMESTAMP(), @ip_address)\", \r\n                    new MySqlParameter(\"@pid\", pid),\r\n                    new MySqlParameter(\"@ip_address\", ip_address)) > 0;\r\n            }\r\n        }\r\n\r\n        public override bool GamestatsSetProfile4(TrainerProfile4 profile)\r\n        {\r\n            return WithTransaction(tran => GamestatsSetProfile4(tran, profile));\r\n        }\r\n\r\n        public bool GamestatsSetProfile4(MySqlTransaction tran, TrainerProfile4 profile)\r\n        {\r\n            if (profile.Data.Length != 100) throw new FormatException(\"Profile data must be 100 bytes.\");\r\n\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * FROM GtsProfiles4 WHERE pid = @pid)\", \r\n                new MySqlParameter(\"@pid\", profile.PID))) != 0;\r\n\r\n            MySqlParameter[] _params = new MySqlParameter[]{\r\n                new MySqlParameter(\"@pid\", profile.PID),\r\n                new MySqlParameter(\"@data\", profile.Data),\r\n                new MySqlParameter(\"@version\", (byte)profile.Version),\r\n                new MySqlParameter(\"@language\", (byte)profile.Language),\r\n                new MySqlParameter(\"@country\", profile.Country),\r\n                new MySqlParameter(\"@region\", profile.Region),\r\n                new MySqlParameter(\"@ot\", profile.OT),\r\n                new MySqlParameter(\"@name\", profile.Name.RawData),\r\n                new MySqlParameter(\"@mac_address\", profile.MacAddress),\r\n                new MySqlParameter(\"@email\", profile.Email),\r\n                new MySqlParameter(\"@has_notifications\", profile.HasNotifications),\r\n                new MySqlParameter(\"@client_secret\", profile.ClientSecret),\r\n                new MySqlParameter(\"@mail_secret\", profile.MailSecret),\r\n                new MySqlParameter(\"@ip_address\", profile.IpAddress)\r\n            };\r\n\r\n            if (exists)\r\n            {\r\n                return tran.ExecuteNonQuery(\"UPDATE GtsProfiles4 SET Data = @data, \" +\r\n                    \"Version = @version, Language = @language, Country = @country, \" +\r\n                    \"Region = @region, OT = @ot, Name = @name, MacAddress = @mac_address, \" +\r\n                    \"Email = @email, HasNotifications = @has_notifications, \" +\r\n                    \"ClientSecret = @client_secret, MailSecret = @mail_secret, \" +\r\n                    \"IpAddress = @ip_address, ParseVersion = 2, TimeUpdated = UTC_TIMESTAMP() \" +\r\n                    \"WHERE pid = @pid\", _params) > 0;\r\n            }\r\n            else\r\n            {\r\n                return tran.ExecuteNonQuery(\"INSERT INTO GtsProfiles4 \" +\r\n                    \"(pid, Data, Version, Language, Country, Region, OT, Name, \" +\r\n                    \"MacAddress, Email, HasNotifications, ClientSecret, MailSecret, \" +\r\n                    \"IpAddress, ParseVersion, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @data, @version, @language, @country, @region, @ot, \" +\r\n                    \"@name, @mac_address, @email, @has_notifications, \" +\r\n                    \"@client_secret, @mail_secret, @ip_address, 2, UTC_TIMESTAMP(), UTC_TIMESTAMP())\", _params) > 0;\r\n            }\r\n        }\r\n\r\n        public override TrainerProfile4 GamestatsGetProfile4(int pid)\r\n        {\r\n            return WithTransaction(tran => GamestatsGetProfile4(tran, pid));\r\n        }\r\n\r\n        public TrainerProfile4 GamestatsGetProfile4(MySqlTransaction tran, int pid)\r\n        {\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Data, IpAddress FROM GtsProfiles4 WHERE pid = @pid\", new MySqlParameter(\"@pid\", pid));\r\n            if (result.Rows.Count == 0) return null;\r\n            DataRow row = result.Rows[0];\r\n            byte[] data = DatabaseExtender.Cast<byte[]>(row[\"Data\"]);\r\n            if (data == null) return null;\r\n            return new TrainerProfile4(pid, data, DatabaseExtender.Cast<string>(row[\"IpAddress\"]));\r\n        }\r\n        #endregion\r\n\r\n        #region Bans\r\n\r\n        public override BanStatus CheckBanStatus(int pid)\r\n        {\r\n            return WithTransaction(tran => CheckBanStatus(tran, pid));\r\n        }\r\n\r\n        public BanStatus CheckBanStatus(MySqlTransaction tran, int pid)\r\n        {\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Level, Reason, Expires FROM pkmncf_gamestats_bans_pid WHERE pid = @pid AND (Expires > UTC_TIMESTAMP() OR Expires IS NULL)\", new MySqlParameter(\"@pid\", pid));\r\n            if (result.Rows.Count == 0) return new BanStatus(BanLevels.None, null, DateTime.MinValue);\r\n            DataRow row = result.Rows[0];\r\n            return new BanStatus(\r\n                (BanLevels)DatabaseExtender.Cast<int>(row[\"Level\"]), \r\n                DatabaseExtender.Cast<string>(row[\"Reason\"]),\r\n                DatabaseExtender.Cast<DateTime ?>(row[\"Expires\"])\r\n                );\r\n        }\r\n\r\n        public override BanStatus CheckBanStatus(byte[] mac_address)\r\n        {\r\n            return WithTransaction(tran => CheckBanStatus(tran, mac_address));\r\n        }\r\n\r\n        public BanStatus CheckBanStatus(MySqlTransaction tran, byte[] mac_address)\r\n        {\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Level, Reason, Expires FROM pkmncf_gamestats_bans_mac WHERE MacAddress = @mac_address AND (Expires > UTC_TIMESTAMP() OR Expires IS NULL)\", new MySqlParameter(\"@mac_address\", mac_address));\r\n            if (result.Rows.Count == 0) return new BanStatus(BanLevels.None, null, DateTime.MinValue);\r\n            DataRow row = result.Rows[0];\r\n            return new BanStatus(\r\n                (BanLevels)DatabaseExtender.Cast<int>(row[\"Level\"]), \r\n                DatabaseExtender.Cast<string>(row[\"Reason\"]),\r\n                DatabaseExtender.Cast<DateTime?>(row[\"Expires\"])\r\n                );\r\n        }\r\n\r\n        public override BanStatus CheckBanStatus(string ip_address)\r\n        {\r\n            return WithTransaction(tran => CheckBanStatus(tran, ip_address));\r\n        }\r\n\r\n        public BanStatus CheckBanStatus(MySqlTransaction tran, string ip_address)\r\n        {\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Level, Reason, Expires FROM pkmncf_gamestats_bans_ip WHERE IpAddress = @ip_address AND (Expires > UTC_TIMESTAMP() OR Expires IS NULL)\", new MySqlParameter(\"@ip_address\", ip_address));\r\n            if (result.Rows.Count == 0) return new BanStatus(BanLevels.None, null, DateTime.MinValue);\r\n            DataRow row = result.Rows[0];\r\n            return new BanStatus(\r\n                (BanLevels)DatabaseExtender.Cast<int>(row[\"Level\"]), \r\n                DatabaseExtender.Cast<string>(row[\"Reason\"]),\r\n                DatabaseExtender.Cast<DateTime?>(row[\"Expires\"])\r\n                );\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks JUST for a matching savefile ban. Use the appropriate pid/MAC CheckBanStatus overload to check those tables.\r\n        /// </summary>\r\n        /// <param name=\"profile\"></param>\r\n        /// <returns></returns>\r\n        public override BanStatus CheckBanStatus(TrainerProfileBase profile)\r\n        {\r\n            return WithTransaction(tran => CheckBanStatus(tran, profile));\r\n        }\r\n\r\n        public BanStatus CheckBanStatus(MySqlTransaction tran, TrainerProfileBase profile)\r\n        {\r\n            byte[] name = null;\r\n            if (profile is TrainerProfile4)\r\n            {\r\n                name = ((TrainerProfile4)profile).Name.RawData;\r\n            }\r\n            if (profile is TrainerProfile5)\r\n            {\r\n                name = ((TrainerProfile5)profile).Name.RawData;\r\n            }\r\n\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Level, Reason, Expires \" +\r\n                \"FROM pkmncf_gamestats_bans_savefile WHERE Version = @version AND Language = @language AND OT = @ot AND Name = @name \" +\r\n                \"AND (Expires > UTC_TIMESTAMP() OR Expires IS NULL)\",\r\n                new MySqlParameter(\"@version\", profile.Version),\r\n                new MySqlParameter(\"@language\", profile.Language),\r\n                new MySqlParameter(\"@ot\", profile.OT),\r\n                new MySqlParameter(\"@name\", name));\r\n\r\n            if (result.Rows.Count == 0) return new BanStatus(BanLevels.None, null, DateTime.MinValue);\r\n            DataRow row = result.Rows[0];\r\n            return new BanStatus(\r\n                (BanLevels)DatabaseExtender.Cast<int>(row[\"Level\"]), \r\n                DatabaseExtender.Cast<string>(row[\"Reason\"]),\r\n                DatabaseExtender.Cast<DateTime?>(row[\"Expires\"])\r\n                );\r\n        }\r\n\r\n        public override BanStatus CheckBanStatus(uint ip_address)\r\n        {\r\n            return WithTransaction(tran => CheckBanStatus(tran, ip_address));\r\n        }\r\n\r\n        public BanStatus CheckBanStatus(MySqlTransaction tran, uint ip_address)\r\n        {\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Level, Reason, Expires \" +\r\n                \"FROM pkmncf_gamestats_bans_ipv4_range \" +\r\n                \"WHERE (@ip BETWEEN IpAddressMin AND IpAddressMax) AND (Expires > UTC_TIMESTAMP() OR Expires IS NULL)\",\r\n                new MySqlParameter(\"@ip\", ip_address));\r\n\r\n            if (result.Rows.Count == 0) return new BanStatus(BanLevels.None, null, DateTime.MinValue);\r\n            DataRow row = result.Rows[0];\r\n            return new BanStatus(\r\n                (BanLevels)DatabaseExtender.Cast<int>(row[\"Level\"]),\r\n                DatabaseExtender.Cast<string>(row[\"Reason\"]),\r\n                DatabaseExtender.Cast<DateTime?>(row[\"Expires\"])\r\n                );\r\n        }\r\n\r\n        public override void AddBan(int pid, BanStatus status)\r\n        {\r\n            WithTransaction(tran => AddBan(tran, pid, status));\r\n        }\r\n\r\n        public void AddBan(MySqlTransaction tran, int pid, BanStatus status)\r\n        {\r\n            AddBan(tran, \"pkmncf_gamestats_bans_pid\", \"pid\", new MySqlParameter(\"@pk\", pid), status);\r\n        }\r\n\r\n        public override void AddBan(byte[] mac_address, BanStatus status)\r\n        {\r\n            WithTransaction(tran => AddBan(tran, mac_address, status));\r\n        }\r\n\r\n        public void AddBan(MySqlTransaction tran, byte[] mac_address, BanStatus status)\r\n        {\r\n            AddBan(tran, \"pkmncf_gamestats_bans_mac\", \"MacAddress\", new MySqlParameter(\"@pk\", mac_address), status);\r\n        }\r\n\r\n        public override void AddBan(string ip_address, BanStatus status)\r\n        {\r\n            WithTransaction(tran => AddBan(tran, ip_address, status));\r\n        }\r\n\r\n        public void AddBan(MySqlTransaction tran, string ip_address, BanStatus status)\r\n        {\r\n            AddBan(tran, \"pkmncf_gamestats_bans_ip\", \"IpAddress\", new MySqlParameter(\"@pk\", ip_address), status);\r\n        }\r\n\r\n        private void AddBan(MySqlTransaction tran, string tbl, string primary_key, MySqlParameter pk_param, BanStatus status)\r\n        {\r\n            string pkParamName = pk_param.ParameterName;\r\n            string sqlExists = \"SELECT EXISTS(SELECT * FROM \" + tbl + \" WHERE \" + primary_key + \" = \" + pkParamName + \")\";\r\n            string sqlInsert = \"INSERT INTO \" + tbl + \" (\" + primary_key + \", Level, Reason, Expires) VALUES (\" + pkParamName + \", @level, @reason, @expires)\";\r\n            string sqlUpdate = \"UPDATE \" + tbl + \" SET Level = @level, Reason = @reason, Expires = GREATEST(Expires, @expires) WHERE \" + primary_key + \" = \" + pkParamName;\r\n\r\n            if (Convert.ToSByte(tran.ExecuteScalar(sqlExists, pk_param.CloneParameter())) > 0)\r\n            {\r\n                tran.ExecuteNonQuery(sqlUpdate, pk_param.CloneParameter(), \r\n                    new MySqlParameter(\"@level\", status.Level), \r\n                    new MySqlParameter(\"@reason\", status.Reason), \r\n                    new MySqlParameter(\"@expires\", status.Expires));\r\n            }\r\n            else\r\n            {\r\n                tran.ExecuteNonQuery(sqlInsert, pk_param.CloneParameter(),\r\n                    new MySqlParameter(\"@level\", status.Level),\r\n                    new MySqlParameter(\"@reason\", status.Reason),\r\n                    new MySqlParameter(\"@expires\", status.Expires));\r\n            }\r\n        }\r\n        #endregion\r\n\r\n        #region GTS 5\r\n        public GtsRecord5 GtsDataForUser5(MySqlTransaction tran, Pokedex.Pokedex pokedex, int pid)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT id, Data, Unknown0, \" +\r\n                \"Species, Gender, Level, \" +\r\n                \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                \"TrainerOT, TrainerName, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                \"IsExchanged, TrainerVersion, TrainerLanguage, TrainerBadges, TrainerUnityTower \" +\r\n                \"FROM GtsPokemon5 WHERE pid = @pid\",\r\n                new MySqlParameter(\"@pid\", pid)))\r\n            {\r\n                if (!reader.Read())\r\n                {\r\n                    reader.Close();\r\n                    return null;\r\n                }\r\n                GtsRecord5 result = Record5FromReader(pokedex, reader);\r\n#if DEBUG\r\n                AssertHelper.Equals(result.PID, pid);\r\n#endif\r\n                reader.Close();\r\n                return result;\r\n            }\r\n        }\r\n\r\n        public override GtsRecord5 GtsDataForUser5(Pokedex.Pokedex pokedex, int pid)\r\n        {\r\n            return WithTransaction(tran => GtsDataForUser5(tran, pokedex, pid));\r\n        }\r\n\r\n        public GtsRecord5 GtsGetRecord5(MySqlTransaction tran, Pokedex.Pokedex pokedex, long tradeId, bool isExchanged, bool allowHistory)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT id, Data, Unknown0, \" +\r\n                \"Species, Gender, Level, \" +\r\n                \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                \"TrainerOT, TrainerName, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                \"IsExchanged, TrainerVersion, TrainerLanguage, TrainerBadges, TrainerUnityTower \" +\r\n                \"FROM GtsPokemon5 WHERE id = @id AND IsExchanged = @is_exchanged\",\r\n                new MySqlParameter(\"@id\", tradeId),\r\n                new MySqlParameter(\"@is_exchanged\", isExchanged ? 1 : 0)))\r\n            {\r\n                if (reader.Read())\r\n                {\r\n                    GtsRecord5 result = Record5FromReader(pokedex, reader);\r\n                    reader.Close();\r\n                    return result;\r\n                }\r\n                reader.Close();\r\n            }\r\n\r\n            if (allowHistory)\r\n            {\r\n                using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT id, Data, Unknown0, \" +\r\n                    \"Species, Gender, Level, \" +\r\n                    \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                    \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                    \"TrainerOT, TrainerName, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                    \"IsExchanged, TrainerVersion, TrainerLanguage, TrainerBadges, TrainerUnityTower \" +\r\n                    \"FROM GtsHistory5 WHERE trade_id = @id AND IsExchanged = @is_exchanged\",\r\n                    new MySqlParameter(\"@id\", tradeId),\r\n                    new MySqlParameter(\"@is_exchanged\", isExchanged ? 1 : 0)))\r\n                {\r\n                    if (reader.Read())\r\n                    {\r\n                        GtsRecord5 result = Record5FromReader(pokedex, reader);\r\n                        reader.Close();\r\n                        return result;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        public override GtsRecord5 GtsGetRecord5(Pokedex.Pokedex pokedex, long tradeId, bool isExchanged, bool allowHistory)\r\n        {\r\n            return WithTransaction(tran => GtsGetRecord5(tran, pokedex, tradeId, isExchanged, allowHistory));\r\n        }\r\n\r\n        public bool GtsDepositPokemon5(MySqlTransaction tran, GtsRecord5 record)\r\n        {\r\n            if (record == null) throw new ArgumentNullException(\"record\");\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n            // note that IsTraded being true in the record is not an error condition\r\n            // since it might have use later on. You should check for this in the upload handler.\r\n\r\n            long count = (long)tran.ExecuteScalar(\"SELECT Count(*) FROM GtsPokemon5 WHERE pid = @pid\",\r\n                new MySqlParameter(\"@pid\", record.PID));\r\n\r\n            if (count > 0)\r\n            {\r\n                // This player already has a pokemon in the system.\r\n                // we can possibly allow multiples under some future conditions\r\n                return false;\r\n            }\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO GtsPokemon5 \" +\r\n                \"(Data, Unknown0, Species, Gender, Level, RequestedSpecies, RequestedGender, \" +\r\n                \"RequestedMinLevel, RequestedMaxLevel, Unknown1, TrainerGender, \" +\r\n                \"Unknown2, TimeDeposited, TimeExchanged, pid, TrainerOT, TrainerName, \" +\r\n                \"TrainerCountry, TrainerRegion, TrainerClass, IsExchanged, TrainerVersion, \" +\r\n                \"TrainerLanguage, TrainerBadges, TrainerUnityTower) \" +\r\n                \"VALUES (@Data, @Unknown0, @Species, @Gender, @Level, @RequestedSpecies, \" +\r\n                \"@RequestedGender, @RequestedMinLevel, @RequestedMaxLevel, @Unknown1, \" +\r\n                \"@TrainerGender, @Unknown2, @TimeDeposited, @TimeExchanged, @pid, \" +\r\n                \"@TrainerOT, @TrainerName, @TrainerCountry, @TrainerRegion, @TrainerClass, \" +\r\n                \"@IsExchanged, @TrainerVersion, @TrainerLanguage, @TrainerBadges, @TrainerUnityTower)\",\r\n                ParamsFromRecord5(record));\r\n\r\n            return true;\r\n        }\r\n\r\n        public override bool GtsDepositPokemon5(GtsRecord5 record)\r\n        {\r\n            if (record == null) throw new ArgumentNullException(\"record\");\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n\r\n            return WithTransactionSuccessful(tran => GtsDepositPokemon5(tran, record));\r\n        }\r\n\r\n        public ulong ? GtsGetDepositId5(MySqlTransaction tran, int pid)\r\n        {\r\n            object o = tran.ExecuteScalar(\"SELECT id FROM GtsPokemon5 WHERE pid = @pid \" +\r\n                \"ORDER BY IsExchanged DESC, TimeExchanged, TimeDeposited LIMIT 1\",\r\n                new MySqlParameter(\"@pid\", pid));\r\n            if (o == null || o == DBNull.Value) return null;\r\n            return Convert.ToUInt64(o);\r\n        }\r\n\r\n        public bool GtsDeletePokemon5(MySqlTransaction tran, int pid)\r\n        {\r\n            ulong ? pkmnId = GtsGetDepositId5(tran, pid);\r\n            if (pkmnId == null) return false;\r\n\r\n#if !DEBUG\r\n            try\r\n            {\r\n#endif\r\n                // this has to run before deletion or isExchanged information is lost.\r\n                // fixme: the trade_id is wrong here because logs use the\r\n                // deposited trade ID, not the exchanged one\r\n                GtsSetWithdrawTime5(tran, (ulong)pkmnId);\r\n#if !DEBUG\r\n            }\r\n            catch { }\r\n#endif\r\n\r\n            tran.ExecuteNonQuery(\"DELETE FROM GtsPokemon5 WHERE id = @id\",\r\n                new MySqlParameter(\"@id\", pkmnId));\r\n            return true;\r\n        }\r\n\r\n        public override bool GtsDeletePokemon5(int pid)\r\n        {\r\n            return WithTransactionSuccessful(tran => GtsDeletePokemon5(tran, pid));\r\n        }\r\n\r\n        private void GtsSetWithdrawTime5(MySqlTransaction tran, ulong trade_id)\r\n        {\r\n            // only set the withdraw time if IsExchanged is true.\r\n            // If false, no trade has happened; we are withdrawing our old pokemon.\r\n            if (Convert.ToByte(\r\n                tran.ExecuteScalar(\"SELECT IsExchanged FROM GtsPokemon5 WHERE id = @id\",\r\n                new MySqlParameter(\"@id\", trade_id))) != 0)\r\n            {\r\n                tran.ExecuteNonQuery(\"UPDATE GtsHistory5 \" +\r\n                    \"SET TimeWithdrawn = @now \" +\r\n                    \"WHERE trade_id = @trade_id\",\r\n                    new MySqlParameter(\"@now\", DateTime.UtcNow),\r\n                    new MySqlParameter(\"@trade_id\", trade_id));\r\n            }\r\n        }\r\n\r\n        public override bool GtsTradePokemon5(int pidSrc, int pidDest)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public bool GtsTradePokemon5(MySqlTransaction tran, GtsRecord5 upload, GtsRecord5 result, int partner_pid)\r\n        {\r\n            GtsRecord5 traded = upload.Clone();\r\n            traded.FlagTraded(result);\r\n\r\n            ulong? trade_id = GtsGetDepositId5(tran, result.PID);\r\n            GtsRecord5 resultOrig = GtsDataForUser5(tran, result.Pokedex, result.PID);\r\n            if (trade_id == null || resultOrig == null || resultOrig != result || !GtsCheckLockStatus5(tran, (ulong)trade_id, partner_pid))\r\n                // looks like the pokemon was ninja'd between the Exchange and Exchange_finish\r\n                return false;\r\n\r\n            if (!GtsDeletePokemon5(tran, result.PID))\r\n                return false;\r\n\r\n            if (!GtsDepositPokemon5(tran, traded))\r\n                return false;\r\n\r\n#if !DEBUG\r\n            try\r\n            {\r\n#endif\r\n                GtsLogTrade5(tran, result, null, partner_pid, trade_id);\r\n                GtsLogTrade5(tran, traded, null, partner_pid, trade_id);\r\n#if !DEBUG\r\n            }\r\n            catch { }\r\n#endif\r\n            return true;\r\n        }\r\n\r\n        public override bool GtsTradePokemon5(GtsRecord5 upload, GtsRecord5 result, int partner_pid)\r\n        {\r\n            return WithTransactionSuccessful(tran => GtsTradePokemon5(tran, upload, result, partner_pid));\r\n        }\r\n\r\n        public override bool GtsLockPokemon5(ulong tradeId, int partner_pid)\r\n        {\r\n            return WithTransaction(tran => GtsLockPokemon5(tran, tradeId, partner_pid));\r\n        }\r\n\r\n        public bool GtsLockPokemon5(MySqlTransaction tran, ulong tradeId, int partner_pid)\r\n        {\r\n            DateTime now = DateTime.UtcNow;\r\n            int rows = tran.ExecuteNonQuery(\"UPDATE GtsPokemon5 SET LockedUntil = @locked_until, LockedBy = @locked_by \" +\r\n                \"WHERE id = @trade_id AND (LockedUntil < @now OR LockedUntil IS NULL OR LockedBy = @locked_by)\",\r\n                new MySqlParameter(\"@trade_id\", tradeId),\r\n                new MySqlParameter(\"@locked_until\", now.AddSeconds(GTS_LOCK_DURATION)),\r\n                new MySqlParameter(\"@locked_by\", partner_pid),\r\n                new MySqlParameter(\"@now\", now));\r\n\r\n            return rows != 0;\r\n        }\r\n\r\n        public override bool GtsCheckLockStatus5(ulong tradeId, int partner_pid)\r\n        {\r\n            return WithTransaction(tran => GtsCheckLockStatus5(tran, tradeId, partner_pid));\r\n        }\r\n\r\n        public bool GtsCheckLockStatus5(MySqlTransaction tran, ulong tradeId, int partner_pid)\r\n        {\r\n            int rows = Convert.ToInt32(tran.ExecuteScalar(\"SELECT count(*) FROM GtsPokemon5 \" +\r\n                \"WHERE id = @trade_id AND (LockedUntil < @now OR LockedUntil IS NULL OR LockedBy = @locked_by)\",\r\n                new MySqlParameter(\"@trade_id\", tradeId),\r\n                new MySqlParameter(\"@locked_by\", partner_pid),\r\n                new MySqlParameter(\"@now\", DateTime.UtcNow)\r\n                ));\r\n\r\n            return rows != 0; // No rows means a lock is in effect or nothing was found\r\n        }\r\n\r\n        public override GtsRecord5[] GtsSearch5(Pokedex.Pokedex pokedex, int pid, ushort species, Genders gender, byte minLevel, byte maxLevel, byte country, int count)\r\n        {\r\n            return WithTransaction(tran => GtsSearch5(tran, pokedex, pid, species, gender, minLevel, maxLevel, country, count));\r\n        }\r\n\r\n        public GtsRecord5[] GtsSearch5(MySqlTransaction tran, Pokedex.Pokedex pokedex, int pid, ushort species, Genders gender, byte minLevel, byte maxLevel, byte country, int count)\r\n        {\r\n            List<MySqlParameter> _params = new List<MySqlParameter>();\r\n            string where = \"WHERE pid != @pid AND IsExchanged = 0 AND (LockedUntil < @now OR LockedUntil IS NULL)\";\r\n            _params.Add(new MySqlParameter(\"@pid\", pid));\r\n            _params.Add(new MySqlParameter(\"@now\", DateTime.UtcNow));\r\n\r\n            if (species > 0)\r\n            {\r\n                where += \" AND Species = @species\";\r\n                _params.Add(new MySqlParameter(\"@species\", species));\r\n            }\r\n\r\n            if (gender != Genders.Either)\r\n            {\r\n                where += \" AND Gender IN (@gender, 3)\";\r\n                _params.Add(new MySqlParameter(\"@gender\", (byte)gender));\r\n            }\r\n\r\n            if (minLevel > 0 && maxLevel > 0)\r\n            {\r\n                where += \" AND Level BETWEEN @min_level AND @max_level\";\r\n                _params.Add(new MySqlParameter(\"@min_level\", minLevel));\r\n                _params.Add(new MySqlParameter(\"@max_level\", maxLevel));\r\n            }\r\n            else if (minLevel > 0)\r\n            {\r\n                where += \" AND Level >= @min_level\";\r\n                _params.Add(new MySqlParameter(\"@min_level\", minLevel));\r\n            }\r\n            else if (maxLevel > 0)\r\n            {\r\n                where += \" AND Level <= @max_level\";\r\n                _params.Add(new MySqlParameter(\"@max_level\", maxLevel));\r\n            }\r\n\r\n            if (country > 0)\r\n            {\r\n                where += \" AND TrainerCountry = @country\";\r\n                _params.Add(new MySqlParameter(\"@country\", country));\r\n            }\r\n\r\n            string limit = \"\";\r\n            if (count > 0)\r\n            {\r\n                _params.Add(new MySqlParameter(\"@count\", count));\r\n                limit = \" LIMIT @count\";\r\n            }\r\n\r\n            // todo: sort me in creative ways\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT Data, Unknown0, \" +\r\n                \"Species, Gender, Level, \" +\r\n                \"RequestedSpecies, RequestedGender, RequestedMinLevel, RequestedMaxLevel, \" +\r\n                \"Unknown1, TrainerGender, Unknown2, TimeDeposited, TimeExchanged, pid, \" +\r\n                \"TrainerOT, TrainerName, TrainerCountry, TrainerRegion, TrainerClass, \" +\r\n                \"IsExchanged, TrainerVersion, TrainerLanguage, TrainerBadges, TrainerUnityTower, id \" +\r\n                \"FROM GtsPokemon5 \" + where +\r\n                \" ORDER BY TimeDeposited DESC\" + limit,\r\n                _params.ToArray()))\r\n            {\r\n                List<GtsRecord5> records;\r\n                if (count > 0) records = new List<GtsRecord5>(count);\r\n                else records = new List<GtsRecord5>();\r\n\r\n                while (reader.Read())\r\n                {\r\n                    var record = Record5FromReader(pokedex, reader);\r\n                    record.TradeId = DatabaseExtender.Cast<ulong>(reader[\"id\"]);\r\n                    records.Add(record);\r\n                }\r\n\r\n                reader.Close();\r\n                return records.ToArray();\r\n            }\r\n        }\r\n\r\n        private static GtsRecord5 Record5FromReader(Pokedex.Pokedex pokedex, MySqlDataReader reader)\r\n        {\r\n            GtsRecord5 result = new GtsRecord5(pokedex);\r\n\r\n            result.TradeId = DatabaseExtender.Cast<ulong>(reader[\"id\"]);\r\n            // xxx: Data and Unknown0 should share a database field.\r\n            // (This requires migrating a lot of existing data)\r\n            byte[] data = DatabaseExtender.Cast<byte[]>(reader[\"Data\"]);\r\n            byte[] unknown0 = DatabaseExtender.Cast<byte[]>(reader[\"Unknown0\"]);\r\n            byte[] combined = new byte[236];\r\n            Array.Copy(data, 0, combined, 0, 220);\r\n            Array.Copy(unknown0, 0, combined, 220, 16);\r\n            result.Data = combined;\r\n\r\n            result.Species = DatabaseExtender.Cast<ushort>(reader[\"Species\"]);\r\n            result.Gender = (Genders)DatabaseExtender.Cast<byte>(reader[\"Gender\"]);\r\n            result.Level = DatabaseExtender.Cast<byte>(reader[\"Level\"]);\r\n            result.RequestedSpecies = DatabaseExtender.Cast<ushort>(reader[\"RequestedSpecies\"]);\r\n            result.RequestedGender = (Genders)DatabaseExtender.Cast<byte>(reader[\"RequestedGender\"]);\r\n            result.RequestedMinLevel = DatabaseExtender.Cast<byte>(reader[\"RequestedMinLevel\"]);\r\n            result.RequestedMaxLevel = DatabaseExtender.Cast<byte>(reader[\"RequestedMaxLevel\"]);\r\n            result.Unknown1 = DatabaseExtender.Cast<byte>(reader[\"Unknown1\"]);\r\n            result.TrainerGender = (TrainerGenders)DatabaseExtender.Cast<byte>(reader[\"TrainerGender\"]);\r\n            result.Unknown2 = DatabaseExtender.Cast<byte>(reader[\"Unknown2\"]);\r\n            result.TimeDeposited = DatabaseExtender.Cast<DateTime ?>(reader[\"TimeDeposited\"]);\r\n            result.TimeExchanged = DatabaseExtender.Cast<DateTime ?>(reader[\"TimeExchanged\"]);\r\n            result.PID = DatabaseExtender.Cast<int>(reader[\"pid\"]);\r\n            result.TrainerOT = DatabaseExtender.Cast<uint>(reader[\"TrainerOT\"]);\r\n            result.TrainerNameEncoded = new EncodedString5(DatabaseExtender.Cast<byte[]>(reader[\"TrainerName\"]));\r\n            result.TrainerCountry = DatabaseExtender.Cast<byte>(reader[\"TrainerCountry\"]);\r\n            result.TrainerRegion = DatabaseExtender.Cast<byte>(reader[\"TrainerRegion\"]);\r\n            result.TrainerClass = DatabaseExtender.Cast<byte>(reader[\"TrainerClass\"]);\r\n            result.IsExchanged = DatabaseExtender.Cast<byte>(reader[\"IsExchanged\"]);\r\n            result.TrainerVersion = (Versions)DatabaseExtender.Cast<byte>(reader[\"TrainerVersion\"]);\r\n            result.TrainerLanguage = (Languages)DatabaseExtender.Cast<byte>(reader[\"TrainerLanguage\"]);\r\n            result.TrainerBadges = DatabaseExtender.Cast<byte>(reader[\"TrainerBadges\"]);\r\n            result.TrainerUnityTower = DatabaseExtender.Cast<byte>(reader[\"TrainerUnityTower\"]);\r\n\r\n            return result;\r\n        }\r\n\r\n        private static MySqlParameter[] ParamsFromRecord5(GtsRecord5 record)\r\n        {\r\n            MySqlParameter[] result = new MySqlParameter[25];\r\n\r\n            byte[] src = record.Data.ToArray(); // xxx: why is there no IList<T>.CopyTo(T[] dest, int destOffset, int count) overload??\r\n            byte[] data = new byte[220];\r\n            byte[] unknown0 = new byte[16];\r\n            Array.Copy(src, 0, data, 0, 220);\r\n            Array.Copy(src, 220, unknown0, 0, 16);\r\n\r\n            result[0] = new MySqlParameter(\"@Data\", data);\r\n            result[1] = new MySqlParameter(\"@Unknown0\", unknown0);\r\n            result[2] = new MySqlParameter(\"@Species\", record.Species);\r\n            result[3] = new MySqlParameter(\"@Gender\", (byte)record.Gender);\r\n            result[4] = new MySqlParameter(\"@Level\", record.Level);\r\n            result[5] = new MySqlParameter(\"@RequestedSpecies\", record.RequestedSpecies);\r\n            result[6] = new MySqlParameter(\"@RequestedGender\", (byte)record.RequestedGender);\r\n            result[7] = new MySqlParameter(\"@RequestedMinLevel\", record.RequestedMinLevel);\r\n            result[8] = new MySqlParameter(\"@RequestedMaxLevel\", record.RequestedMaxLevel);\r\n            result[9] = new MySqlParameter(\"@Unknown1\", record.Unknown1);\r\n            result[10] = new MySqlParameter(\"@TrainerGender\", (byte)record.TrainerGender);\r\n            result[11] = new MySqlParameter(\"@Unknown2\", record.Unknown2);\r\n            result[12] = new MySqlParameter(\"@TimeDeposited\", record.TimeDeposited);\r\n            result[13] = new MySqlParameter(\"@TimeExchanged\", record.TimeExchanged);\r\n            result[14] = new MySqlParameter(\"@pid\", record.PID);\r\n            result[15] = new MySqlParameter(\"@TrainerOT\", record.TrainerOT);\r\n            result[16] = new MySqlParameter(\"@TrainerName\", record.TrainerNameEncoded.RawData);\r\n            result[17] = new MySqlParameter(\"@TrainerCountry\", record.TrainerCountry);\r\n            result[18] = new MySqlParameter(\"@TrainerRegion\", record.TrainerRegion);\r\n            result[19] = new MySqlParameter(\"@TrainerClass\", record.TrainerClass);\r\n            result[20] = new MySqlParameter(\"@IsExchanged\", record.IsExchanged);\r\n            result[21] = new MySqlParameter(\"@TrainerVersion\", record.TrainerVersion);\r\n            result[22] = new MySqlParameter(\"@TrainerLanguage\", record.TrainerLanguage);\r\n            result[23] = new MySqlParameter(\"@TrainerBadges\", record.TrainerBadges);\r\n            result[24] = new MySqlParameter(\"@TrainerUnityTower\", record.TrainerUnityTower);\r\n\r\n            return result;\r\n        }\r\n\r\n        public override int GtsAvailablePokemon5()\r\n        {\r\n            return WithTransaction(tran => GtsAvailablePokemon5(tran));\r\n        }\r\n\r\n        public int GtsAvailablePokemon5(MySqlTransaction tran)\r\n        {\r\n            return Convert.ToInt32(tran.ExecuteScalar(\"SELECT Count(*) FROM GtsPokemon5 WHERE IsExchanged = 0\"));\r\n        }\r\n\r\n        public void GtsLogTrade5(GtsRecord5 record, DateTime ? timeWithdrawn, int ? partner_pid, ulong ? trade_id)\r\n        {\r\n            WithTransaction(tran => GtsLogTrade5(tran, record, timeWithdrawn, partner_pid, trade_id));\r\n        }\r\n\r\n        public void GtsLogTrade5(MySqlTransaction tran, GtsRecord5 record, DateTime ? timeWithdrawn, int ? partner_pid, ulong ? trade_id)\r\n        {\r\n            // todo: Bring these out into a ValidateRecord5 method\r\n            if (record == null) throw new ArgumentNullException(\"record\");\r\n            if (record.Data.Count != 236) throw new FormatException(\"pkm data must be 236 bytes.\");\r\n            if (record.TrainerNameEncoded.RawData.Length != 16) throw new FormatException(\"Trainer name must be 16 bytes.\");\r\n            // note that IsTraded being true in the record is not an error condition\r\n            // since it might have use later on. You should check for this in the upload handler.\r\n\r\n            if (trade_id == null)\r\n                trade_id = GtsGetDepositId5(tran, record.PID);\r\n\r\n            // when calling delete.asp, the partner pid can't be told from the request alone,\r\n            // so obtain it from the database instead.\r\n            if (record.IsExchanged != 0 && trade_id != null && partner_pid == null)\r\n                partner_pid = (int ?)tran.ExecuteScalar(\"SELECT partner_pid FROM GtsHistory5 \" +\r\n                    \"WHERE trade_id = @trade_id AND IsExchanged = 0\", new MySqlParameter(\"@trade_id\", trade_id));\r\n\r\n            MySqlParameter[] _params = ParamsFromRecord5(record);\r\n            MySqlParameter[] _params2 = new MySqlParameter[28];\r\n            Array.Copy(_params, _params2, 25);\r\n            _params2[25] = new MySqlParameter(\"@TimeWithdrawn\", timeWithdrawn);\r\n            _params2[26] = new MySqlParameter(\"@trade_id\", trade_id);\r\n            _params2[27] = new MySqlParameter(\"@partner_pid\", partner_pid);\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO GtsHistory5 \" +\r\n                \"(Data, Unknown0, Species, Gender, Level, RequestedSpecies, RequestedGender, \" +\r\n                \"RequestedMinLevel, RequestedMaxLevel, Unknown1, TrainerGender, \" +\r\n                \"Unknown2, TimeDeposited, TimeExchanged, pid, TrainerOT, TrainerName, \" +\r\n                \"TrainerCountry, TrainerRegion, TrainerClass, IsExchanged, TrainerVersion, \" +\r\n                \"TrainerLanguage, TrainerBadges, TrainerUnityTower, TimeWithdrawn, \" +\r\n                \"trade_id, partner_pid) \" +\r\n                \"VALUES (@Data, @Unknown0, @Species, @Gender, @Level, @RequestedSpecies, \" +\r\n                \"@RequestedGender, @RequestedMinLevel, @RequestedMaxLevel, @Unknown1, \" +\r\n                \"@TrainerGender, @Unknown2, @TimeDeposited, @TimeExchanged, @pid, \" +\r\n                \"@TrainerOT, @TrainerName, @TrainerCountry, @TrainerRegion, @TrainerClass, \" +\r\n                \"@IsExchanged, @TrainerVersion, @TrainerLanguage, @TrainerBadges, \" +\r\n                \"@TrainerUnityTower, @TimeWithdrawn, @trade_id, @partner_pid)\",\r\n                _params2);\r\n        }\r\n\r\n        public void GtsSetLastSearch5(MySqlTransaction tran, int pid)\r\n        {\r\n            tran.ExecuteNonQuery(\"UPDATE GtsProfiles5 SET TimeLastSearch = \" +\r\n                \"@now WHERE pid = @pid\", new MySqlParameter(\"@now\", DateTime.UtcNow),\r\n                new MySqlParameter(\"@pid\", pid));\r\n        }\r\n\r\n        public override void GtsSetLastSearch5(int pid)\r\n        {\r\n            WithTransaction(tran => GtsSetLastSearch5(tran, pid));\r\n        }\r\n\r\n        public DateTime? GtsGetLastSearch5(MySqlTransaction tran, int pid)\r\n        {\r\n            object result = tran.ExecuteScalar(\"SELECT TimeLastSearch \" +\r\n                \"FROM GtsProfiles5 WHERE pid = @pid\", new MySqlParameter(\"@pid\", pid));\r\n            if (result == null || result is DBNull) return null;\r\n            return (DateTime)result;\r\n        }\r\n\r\n        public override DateTime? GtsGetLastSearch5(int pid)\r\n        {\r\n            return WithTransaction(tran => GtsGetLastSearch5(tran, pid));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Battle Subway 5\r\n        public override ulong BattleSubwayUpdateRecord5(BattleSubwayRecord5 record)\r\n        {\r\n            if (record.BattlesWon > 7) throw new ArgumentException(\"Battles won can not be greater than 7.\");\r\n\r\n            return WithTransaction(tran => BattleSubwayUpdateRecord5(tran, record));\r\n        }\r\n\r\n        private ulong BattleSubwayUpdateRecord5(MySqlTransaction tran, BattleSubwayRecord5 record)\r\n        {\r\n            if (record.BattlesWon > 7) throw new ArgumentException(\"Battles won can not be greater than 7.\");\r\n\r\n            // Does this player already have a record in this room?\r\n            // Also get primary key if it does. (We need it for updating party)\r\n            ulong pkey = FindBattleSubwayRecord5(tran, record, false);\r\n\r\n            if (pkey != 0)\r\n            {\r\n                // If the player already has a record, move everyone below it up one position\r\n                // (effectively removing this record from the ordering)\r\n\r\n                // todo: In the case that the player's rank hasn't changed,\r\n                // we can optimize this and the next down to a single BETWEEN\r\n                // query.\r\n                // This does require retrieving their old rank from the db.\r\n                tran.ExecuteNonQuery(\"SELECT Rank, Position INTO @old_rank, @old_position \" +\r\n                    \"FROM GtsBattleSubway5 WHERE id = @pkey; \" +\r\n                    \"UPDATE GtsBattleSubway5 SET Position = Position - 1 \" +\r\n                    \"WHERE RoomNum = @room AND Rank = @old_rank AND Position > @old_position\",\r\n                    new MySqlParameter(\"@pkey\", pkey),\r\n                    new MySqlParameter(\"@room\", record.RoomNum));\r\n            }\r\n\r\n            uint position = (uint)(7 - record.BattlesWon);\r\n\r\n            // Shift down all the players in the player's new rank by one.\r\n            tran.ExecuteNonQuery(\"UPDATE GtsBattleSubway5 SET Position = Position + 1 \" +\r\n                \"WHERE RoomNum = @room AND Rank = @rank AND Position >= @position\",\r\n                new MySqlParameter(\"@room\", record.RoomNum),\r\n                new MySqlParameter(\"@rank\", record.Rank),\r\n                new MySqlParameter(\"@position\", position));\r\n\r\n            object lastPosition = tran.ExecuteScalar(\"SELECT MAX(Position) \" +\r\n                \"FROM GtsBattleSubway5 WHERE RoomNum = @room AND Rank = @rank\",\r\n                new MySqlParameter(\"@room\", record.RoomNum),\r\n                new MySqlParameter(\"@rank\", record.Rank));\r\n\r\n            // If the room has fewer than 7 trainers, insert this one at the\r\n            // end but don't leave any gaps in the numbering.\r\n            if (lastPosition is DBNull)\r\n                position = 0;\r\n            else\r\n                position = Math.Min(position, (uint)lastPosition + 1);\r\n\r\n            // Update the actual record\r\n            if (pkey != 0)\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleSubwayRecord5(record, false);\r\n                _params.Add(new MySqlParameter(\"@position\", position));\r\n                _params.Add(new MySqlParameter(\"@id\", pkey));\r\n\r\n                tran.ExecuteNonQuery(\"UPDATE GtsBattleSubway5 SET pid = @pid, Name = @name, \" +\r\n                    \"Version = @version, Language = @language, Country = @country, \" +\r\n                    \"Region = @region, TrainerID = @trainer_id, \" +\r\n                    \"PhraseLeader = @phrase_leader, Gender = @gender, \" +\r\n                    \"Unknown2 = @unknown2, PhraseChallenged = @phrase_challenged, \" +\r\n                    \"PhraseWon = @phrase_won, PhraseLost = @phrase_lost, Unknown3 = @unknown3, \" +\r\n                    \"Unknown4 = @unknown4, Unknown5 = @unknown5, ParseVersion = 1, Rank = @rank, \" +\r\n                    \"BattlesWon = @battles_won, Position = @position, \" +\r\n                    \"TimeUpdated = UTC_TIMESTAMP() WHERE id = @id\",\r\n                    _params.ToArray());\r\n\r\n                UpdateBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[0], pkey, 0);\r\n                UpdateBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[1], pkey, 1);\r\n                UpdateBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[2], pkey, 2);\r\n            }\r\n            else\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleSubwayRecord5(record, false);\r\n                _params.Add(new MySqlParameter(\"@position\", position));\r\n\r\n                pkey = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO GtsBattleSubway5 \" +\r\n                    \"(pid, Name, Version, Language, Country, Region, TrainerID, \" +\r\n                    \"PhraseLeader, Gender, Unknown2, PhraseChallenged, PhraseWon, \" +\r\n                    \"PhraseLost, Unknown3, Unknown4, Unknown5, ParseVersion, \" +\r\n                    \"Rank, RoomNum, BattlesWon, Position, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @name, @version, @language, @country, @region, @trainer_id, \" +\r\n                    \"@phrase_leader, @gender, @unknown2, @phrase_challenged, @phrase_won, \" +\r\n                    \"@phrase_lost, @unknown3, @unknown4, @unknown5, 1, \" +\r\n                    \"@rank, @room, @battles_won, @position, UTC_TIMESTAMP(), UTC_TIMESTAMP()); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    _params.ToArray()));\r\n\r\n                InsertBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[0], pkey, 0);\r\n                InsertBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[1], pkey, 1);\r\n                InsertBattleSubwayPokemon5(tran, (BattleSubwayPokemon5)record.Party[2], pkey, 2);\r\n            }\r\n\r\n            return pkey;\r\n        }\r\n\r\n        private void InsertBattleSubwayPokemon5(MySqlTransaction tran, BattleSubwayPokemon5 pokemon, ulong partyId, byte slot)\r\n        {\r\n            List<MySqlParameter> _params = ParamsFromBattleSubwayPokemon5(pokemon);\r\n            _params.Add(new MySqlParameter(\"@id\", partyId));\r\n            _params.Add(new MySqlParameter(\"@slot\", slot));\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO GtsBattleSubwayPokemon5 \" +\r\n                \"(party_id, Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, TrainerID, \" +\r\n                \"Personality, IVs, EVs, Unknown1, Language, Ability, Happiness, \" +\r\n                \"Nickname, Unknown2) VALUES \" +\r\n                \"(@id, @slot, @species, @form, @held_item, @move1, @move2, @move3, @move4, @trainer_id, \" +\r\n                \"@personality, @ivs, @evs, @unknown1, @language, @ability, @happiness, \" +\r\n                \"@nickname, @unknown2)\",\r\n                _params.ToArray());\r\n        }\r\n\r\n        private void UpdateBattleSubwayPokemon5(MySqlTransaction tran, BattleSubwayPokemon5 pokemon, ulong partyId, byte slot)\r\n        {\r\n            List<MySqlParameter> _params = ParamsFromBattleSubwayPokemon5(pokemon);\r\n            _params.Add(new MySqlParameter(\"@id\", partyId));\r\n            _params.Add(new MySqlParameter(\"@slot\", slot));\r\n\r\n            tran.ExecuteNonQuery(\"UPDATE GtsBattleSubwayPokemon5 SET Species = @species, \" +\r\n                \"Form = @form, HeldItem = @held_item, Move1 = @move1, Move2 = @move2, \" +\r\n                \"Move3 = @move3, Move4 = @move4, TrainerID = @trainer_id, \" +\r\n                \"Personality = @personality, IVs = @ivs, EVs = @evs, Unknown1 = @unknown1, \" +\r\n                \"Language = @language, Ability = @ability, Happiness = @happiness, \" +\r\n                \"Nickname = @nickname, Unknown2 = @unknown2 \" +\r\n                \"WHERE party_id = @id AND Slot = @slot\",\r\n                _params.ToArray());\r\n        }\r\n\r\n        private List<MySqlParameter> ParamsFromBattleSubwayRecord5(BattleSubwayRecord5 record, bool leader)\r\n        {\r\n            BattleSubwayProfile5 profile = (BattleSubwayProfile5)record.Profile;\r\n            List<MySqlParameter> result = new List<MySqlParameter>(15);\r\n            result.Add(new MySqlParameter(\"@pid\", record.PID));\r\n            result.Add(new MySqlParameter(\"@name\", profile.Name.RawData));\r\n            result.Add(new MySqlParameter(\"@version\", (byte)profile.Version));\r\n            result.Add(new MySqlParameter(\"@language\", (byte)profile.Language));\r\n            result.Add(new MySqlParameter(\"@country\", profile.Country));\r\n            result.Add(new MySqlParameter(\"@region\", profile.Region));\r\n            result.Add(new MySqlParameter(\"@trainer_id\", profile.OT));\r\n            result.Add(new MySqlParameter(\"@phrase_leader\", profile.PhraseLeader.Data));\r\n            result.Add(new MySqlParameter(\"@gender\", profile.Gender));\r\n            result.Add(new MySqlParameter(\"@unknown2\", profile.Unknown));\r\n            result.Add(new MySqlParameter(\"@rank\", record.Rank));\r\n            result.Add(new MySqlParameter(\"@room\", record.RoomNum));\r\n            if (!leader)\r\n            {\r\n                result.Add(new MySqlParameter(\"@phrase_challenged\", record.PhraseChallenged.Data));\r\n                result.Add(new MySqlParameter(\"@phrase_won\", record.PhraseWon.Data));\r\n                result.Add(new MySqlParameter(\"@phrase_lost\", record.PhraseLost.Data));\r\n                result.Add(new MySqlParameter(\"@unknown3\", record.Unknown3));\r\n                result.Add(new MySqlParameter(\"@unknown4\", record.Unknown4 ?? new byte[5]));\r\n                result.Add(new MySqlParameter(\"@unknown5\", record.Unknown5));\r\n                result.Add(new MySqlParameter(\"@battles_won\", record.BattlesWon));\r\n            }\r\n            return result;\r\n        }\r\n\r\n        private List<MySqlParameter> ParamsFromBattleSubwayPokemon5(BattleSubwayPokemon5 pokemon)\r\n        {\r\n            List<MySqlParameter> result = new List<MySqlParameter>(15);\r\n            result.Add(new MySqlParameter(\"@species\", pokemon.SpeciesID));\r\n            result.Add(new MySqlParameter(\"@form\", pokemon.FormID));\r\n            result.Add(new MySqlParameter(\"@held_item\", pokemon.HeldItemID));\r\n            result.Add(new MySqlParameter(\"@move1\", pokemon.Moves[0].MoveID));\r\n            result.Add(new MySqlParameter(\"@move2\", pokemon.Moves[1].MoveID));\r\n            result.Add(new MySqlParameter(\"@move3\", pokemon.Moves[2].MoveID));\r\n            result.Add(new MySqlParameter(\"@move4\", pokemon.Moves[3].MoveID));\r\n            result.Add(new MySqlParameter(\"@trainer_id\", pokemon.TrainerID));\r\n            result.Add(new MySqlParameter(\"@personality\", pokemon.Personality));\r\n            result.Add(new MySqlParameter(\"@ivs\", pokemon.IVs.ToInt32() | (int)pokemon.IvFlags));\r\n            result.Add(new MySqlParameter(\"@evs\", pokemon.EVs.ToArray()));\r\n            result.Add(new MySqlParameter(\"@unknown1\", pokemon.GetPpUps()));\r\n            result.Add(new MySqlParameter(\"@language\", (byte)pokemon.Language));\r\n            result.Add(new MySqlParameter(\"@ability\", pokemon.AbilityID));\r\n            result.Add(new MySqlParameter(\"@happiness\", pokemon.Happiness));\r\n            result.Add(new MySqlParameter(\"@nickname\", pokemon.NicknameEncoded.RawData));\r\n            result.Add(new MySqlParameter(\"@unknown2\", pokemon.Unknown2));\r\n            return result;\r\n        }\r\n\r\n        public override ulong BattleSubwayAddLeader5(BattleSubwayRecord5 record)\r\n        {\r\n            return WithTransaction(tran => BattleSubwayAddLeader5(tran, record));\r\n        }\r\n\r\n        private ulong BattleSubwayAddLeader5(MySqlTransaction tran, BattleSubwayRecord5 record)\r\n        {\r\n            ulong pkey = FindBattleSubwayRecord5(tran, record, true);\r\n\r\n            // Update the actual record\r\n            if (pkey != 0)\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleSubwayRecord5(record, true);\r\n                _params.Add(new MySqlParameter(\"@id\", pkey));\r\n\r\n                tran.ExecuteNonQuery(\"UPDATE GtsBattleSubwayLeaders5 SET \" +\r\n                    \"pid = @pid, Name = @name, Version = @version, \" +\r\n                    \"Language = @language, Country = @country, Region = @region, \" +\r\n                    \"TrainerID = @trainer_id, \" +\r\n                    \"PhraseLeader = @phrase_leader, Gender = @gender, Unknown2 = @unknown2, \" +\r\n                    \"ParseVersion = 1, Rank = @rank, \" +\r\n                    \"TimeUpdated = UTC_TIMESTAMP() WHERE id = @id\",\r\n                    _params.ToArray());\r\n            }\r\n            else\r\n            {\r\n                List<MySqlParameter> _params = ParamsFromBattleSubwayRecord5(record, true);\r\n\r\n                pkey = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO \" +\r\n                    \"GtsBattleSubwayLeaders5 \" +\r\n                    \"(pid, Name, Version, Language, Country, Region, TrainerID, \" +\r\n                    \"PhraseLeader, Gender, Unknown2, ParseVersion, Rank, \" +\r\n                    \"RoomNum, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @name, @version, @language, @country, @region, @trainer_id, \" +\r\n                    \"@phrase_leader, @gender, @unknown2, 1, @rank, \" +\r\n                    \"@room, UTC_TIMESTAMP(), UTC_TIMESTAMP()); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    _params.ToArray()));\r\n            }\r\n\r\n            return pkey;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to find an existing database record for the provided player\r\n        /// record. The match must be found in the same rank and room number.\r\n        /// </summary>\r\n        /// <param name=\"tran\"></param>\r\n        /// <param name=\"record\"></param>\r\n        /// <param name=\"leader\">If true, look up against the Leaders table.\r\n        /// Otherwise looks up against the opponents table.</param>\r\n        /// <returns>The match's primary key or 0 if no match is found\r\n        /// </returns>\r\n        private ulong FindBattleSubwayRecord5(MySqlTransaction tran, BattleSubwayRecord5 record, bool leader)\r\n        {\r\n            string tblName = leader ? \"GtsBattleSubwayLeaders5\" : \"GtsBattleSubway5\";\r\n\r\n            // If PID is missing, this is restored data.\r\n            // We assume the original server took care of matching existing\r\n            // records, so we don't allow it to match here.\r\n            if (record.PID == 0) return 0;\r\n\r\n            // Match normally.\r\n            object oPkey = tran.ExecuteScalar(\"SELECT id FROM \" + tblName +\r\n                \" WHERE pid = @pid AND RoomNum = @room AND Rank = @rank\", // Only require rank to match if this is the leaderboard.\r\n                new MySqlParameter(\"@pid\", record.PID),\r\n                new MySqlParameter(\"@rank\", record.Rank),\r\n                new MySqlParameter(\"@room\", record.RoomNum));\r\n\r\n            if (oPkey == null)\r\n            {\r\n                BattleSubwayProfile5 profile = (BattleSubwayProfile5)record.Profile;\r\n                // PID isn't found. Try to match one of Pikachu025's saved\r\n                // records based on unchanging properties of the savegame.\r\n                oPkey = tran.ExecuteScalar(\"SELECT id FROM \" + tblName +\r\n                    \" WHERE pid = 0 AND RoomNum = @room AND Rank = @rank \" + // Only require rank to match if this is the leaderboard.\r\n                    \"AND Name = @name AND Version = @version \" +\r\n                    \"AND Language = @language AND TrainerID = @trainer_id\",\r\n                    new MySqlParameter(\"@rank\", record.Rank),\r\n                    new MySqlParameter(\"@room\", record.RoomNum),\r\n                    new MySqlParameter(\"@name\", profile.Name.RawData),\r\n                    new MySqlParameter(\"@version\", (byte)profile.Version),\r\n                    new MySqlParameter(\"@language\", (byte)profile.Language),\r\n                    new MySqlParameter(\"@trainer_id\", profile.OT)\r\n                );\r\n            }\r\n\r\n            // Don't need to worry about DBNull since the column is non-null.\r\n            return (ulong)(oPkey ?? 0UL);\r\n        }\r\n\r\n        public override BattleSubwayRecord5[] BattleSubwayGetOpponents5(Pokedex.Pokedex pokedex, int pid, byte rank, byte roomNum)\r\n        {\r\n            return WithTransaction(tran => BattleSubwayGetOpponents5(tran, pokedex, pid, rank, roomNum));\r\n        }\r\n\r\n        public BattleSubwayRecord5[] BattleSubwayGetOpponents5(MySqlTransaction tran, Pokedex.Pokedex pokedex, int pid, byte rank, byte roomNum)\r\n        {\r\n            List<BattleSubwayRecord5> records = new List<BattleSubwayRecord5>(7);\r\n            List<ulong> keys = new List<ulong>(7);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\r\n                \"SELECT id, pid, Name, \" +\r\n                \"Version, Language, Country, Region, TrainerID, \" +\r\n                \"PhraseLeader, Gender, Unknown2, PhraseChallenged, \" +\r\n                \"PhraseWon, PhraseLost, Unknown3, Unknown4, Unknown5 \" +\r\n                \"FROM GtsBattleSubway5 \" +\r\n                \"WHERE Rank = @rank AND RoomNum = @room AND pid != @pid \" +\r\n                \"ORDER BY Position LIMIT 7\",\r\n                new MySqlParameter(\"@rank\", rank),\r\n                new MySqlParameter(\"@room\", roomNum),\r\n                new MySqlParameter(\"@pid\", pid)))\r\n            {\r\n                while (reader.Read())\r\n                {\r\n                    BattleSubwayRecord5 record = BattleSubwayRecord5FromReader(reader, pokedex);\r\n                    record.Party = new BattleSubwayPokemon5[3];\r\n                    records.Add(record);\r\n                    keys.Add(reader.GetUInt64(0));\r\n                }\r\n                reader.Close();\r\n            }\r\n\r\n            if (records.Count == 0) return new BattleSubwayRecord5[0];\r\n\r\n            string inClause = String.Join(\", \", keys.Select(i => i.ToString()).ToArray());\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT party_id, \" +\r\n                \"Slot, Species, Form, HeldItem, Move1, Move2, Move3, Move4, \" +\r\n                \"TrainerID, Personality, IVs, EVs, Unknown1, Language, \" +\r\n                \"Ability, Happiness, Nickname, Unknown2 FROM GtsBattleSubwayPokemon5 \" +\r\n                \"WHERE party_id IN (\" + inClause + \")\"))\r\n            {\r\n                while (reader.Read())\r\n                {\r\n                    BattleSubwayRecord5 record = records[keys.IndexOf(reader.GetUInt64(0))];\r\n                    record.Party[reader.GetByte(1)] = BattleSubwayPokemon5FromReader(reader, pokedex);\r\n                }\r\n                reader.Close();\r\n            }\r\n\r\n            return Enumerable.Reverse(records).ToArray();\r\n        }\r\n\r\n        private BattleSubwayRecord5 BattleSubwayRecord5FromReader(MySqlDataReader reader, Pokedex.Pokedex pokedex)\r\n        {\r\n            // todo: Stop using ordinals everywhere.\r\n            BattleSubwayRecord5 result = new BattleSubwayRecord5(pokedex);\r\n            result.PID = reader.GetInt32(1);\r\n            // this is unsustainable. What happens if I add columns to Leaders?\r\n            if (reader.FieldCount > 11) result.PhraseChallenged = new TrendyPhrase5(reader.GetByteArray(11, 8));\r\n            if (reader.FieldCount > 12) result.PhraseWon = new TrendyPhrase5(reader.GetByteArray(12, 8));\r\n            if (reader.FieldCount > 13) result.PhraseLost = new TrendyPhrase5(reader.GetByteArray(13, 8));\r\n            if (reader.FieldCount > 14) result.Unknown3 = reader.GetUInt16(14);\r\n            if (reader.FieldCount > 15 && !reader.IsDBNull(15)) result.Unknown4 = reader.GetByteArray(15, 5);\r\n            if (reader.FieldCount > 16) result.Unknown5 = reader.GetUInt64(16);\r\n\r\n            BattleSubwayProfile5 profile = new BattleSubwayProfile5();\r\n            profile.Name = new EncodedString5(reader.GetByteArray(2, 16));\r\n            profile.Version = (Versions)reader.GetByte(3);\r\n            profile.Language = (Languages)reader.GetByte(4);\r\n            profile.Country = reader.GetByte(5);\r\n            profile.Region = reader.GetByte(6);\r\n            profile.OT = reader.GetUInt32(7);\r\n            profile.PhraseLeader = new TrendyPhrase5(reader.GetByteArray(8, 8));\r\n            profile.Gender = reader.GetByte(9);\r\n            profile.Unknown = reader.GetByte(10);\r\n\r\n            result.Profile = profile;\r\n            return result;\r\n        }\r\n\r\n        private BattleSubwayPokemon5 BattleSubwayPokemon5FromReader(MySqlDataReader reader, Pokedex.Pokedex pokedex)\r\n        {\r\n            ushort? speciesId = DatabaseExtender.Cast<ushort?>(reader[\"Species\"]);\r\n            ushort? formId = DatabaseExtender.Cast<ushort?>(reader[\"Form\"]);\r\n\r\n            return new BattleSubwayPokemon5(pokedex,\r\n                (int)speciesId,\r\n                (byte)formId,\r\n                DatabaseExtender.Cast<ushort>(reader[\"HeldItem\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move1\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move2\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move3\"]),\r\n                DatabaseExtender.Cast<ushort>(reader[\"Move4\"]),\r\n                DatabaseExtender.Cast<uint>(reader[\"TrainerID\"]),\r\n                DatabaseExtender.Cast<uint>(reader[\"Personality\"]),\r\n                DatabaseExtender.Cast<uint>(reader[\"IVs\"]),\r\n                DatabaseExtender.Cast<byte[]>(reader[\"EVs\"]),\r\n                DatabaseExtender.Cast<byte>(reader[\"Unknown1\"]),\r\n                (Languages)DatabaseExtender.Cast<byte>(reader[\"Language\"]),\r\n                DatabaseExtender.Cast<byte>(reader[\"Ability\"]),\r\n                DatabaseExtender.Cast<byte>(reader[\"Happiness\"]),\r\n                new EncodedString5(DatabaseExtender.Cast<byte[]>(reader[\"Nickname\"]), 0, 22),\r\n                DatabaseExtender.Cast<uint>(reader[\"Unknown2\"])\r\n                );\r\n        }\r\n\r\n        public override BattleSubwayProfile5[] BattleSubwayGetLeaders5(Pokedex.Pokedex pokedex, byte rank, byte roomNum)\r\n        {\r\n            return WithTransaction(tran => BattleSubwayGetLeaders5(tran, pokedex, rank, roomNum));\r\n        }\r\n\r\n        public BattleSubwayProfile5[] BattleSubwayGetLeaders5(MySqlTransaction tran, Pokedex.Pokedex pokedex, byte rank, byte roomNum)\r\n        {\r\n            List<BattleSubwayProfile5> profiles = new List<BattleSubwayProfile5>(30);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\r\n                \"SELECT id, pid, Name, \" +\r\n                \"Version, Language, Country, Region, TrainerID, \" +\r\n                \"PhraseLeader, Gender, Unknown2 FROM GtsBattleSubwayLeaders5 \" +\r\n                \"WHERE Rank = @rank AND RoomNum = @room \" +\r\n                \"ORDER BY TimeUpdated DESC, id LIMIT 30\",\r\n                new MySqlParameter(\"@rank\", rank),\r\n                new MySqlParameter(\"@room\", roomNum)))\r\n            {\r\n                while (reader.Read())\r\n                    profiles.Add((BattleSubwayProfile5)BattleSubwayRecord5FromReader(reader, pokedex).Profile);\r\n\r\n                reader.Close();\r\n            }\r\n\r\n            return profiles.ToArray();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Other Gamestats 5\r\n        public override bool GamestatsSetProfile5(TrainerProfile5 profile)\r\n        {\r\n            return WithTransaction(tran => GamestatsSetProfile5(tran, profile));\r\n        }\r\n\r\n        public bool GamestatsSetProfile5(MySqlTransaction tran, TrainerProfile5 profile)\r\n        {\r\n            // Although GenV doesn't actually support email notifications,\r\n            // we're using the same database structure here as for GenIV\r\n            // as a rule of least surprise and maybe in the hopes of\r\n            // removing this code duplication eventually.\r\n\r\n            if (profile.Data.Length != 100) throw new FormatException(\"Profile data must be 100 bytes.\");\r\n\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * FROM GtsProfiles5 WHERE pid = @pid)\", \r\n                new MySqlParameter(\"@pid\", profile.PID))) != 0;\r\n\r\n            MySqlParameter[] _params = new MySqlParameter[]{\r\n                new MySqlParameter(\"@pid\", profile.PID),\r\n                new MySqlParameter(\"@data\", profile.Data),\r\n                new MySqlParameter(\"@version\", (byte)profile.Version),\r\n                new MySqlParameter(\"@language\", (byte)profile.Language),\r\n                new MySqlParameter(\"@country\", profile.Country),\r\n                new MySqlParameter(\"@region\", profile.Region),\r\n                new MySqlParameter(\"@ot\", profile.OT),\r\n                new MySqlParameter(\"@name\", profile.Name.RawData),\r\n                new MySqlParameter(\"@mac_address\", profile.MacAddress),\r\n                new MySqlParameter(\"@email\", profile.Email),\r\n                new MySqlParameter(\"@has_notifications\", profile.HasNotifications),\r\n                new MySqlParameter(\"@client_secret\", profile.ClientSecret),\r\n                new MySqlParameter(\"@mail_secret\", profile.MailSecret),\r\n                new MySqlParameter(\"@ip_address\", profile.IpAddress)\r\n            };\r\n\r\n            if (exists)\r\n            {\r\n                return tran.ExecuteNonQuery(\"UPDATE GtsProfiles5 SET Data = @data, \" +\r\n                    \"Version = @version, Language = @language, Country = @country, \" +\r\n                    \"Region = @region, OT = @ot, Name = @name, MacAddress = @mac_address, \" +\r\n                    \"Email = @email, HasNotifications = @has_notifications, \" +\r\n                    \"ClientSecret = @client_secret, MailSecret = @mail_secret, \" +\r\n                    \"IpAddress = @ip_address, ParseVersion = 2, TimeUpdated = UTC_TIMESTAMP() \" +\r\n                    \"WHERE pid = @pid\", _params) > 0;\r\n            }\r\n            else\r\n            {\r\n                return tran.ExecuteNonQuery(\"INSERT INTO GtsProfiles5 \" +\r\n                    \"(pid, Data, Version, Language, Country, Region, OT, Name, \" +\r\n                    \"MacAddress, Email, HasNotifications, ClientSecret, MailSecret, \" +\r\n                    \"IpAddress, ParseVersion, TimeAdded, TimeUpdated) VALUES \" +\r\n                    \"(@pid, @data, @version, @language, @country, @region, @ot, \" +\r\n                    \"@name, @mac_address, @email, @has_notifications, \" +\r\n                    \"@client_secret, @mail_secret, @ip_address, 2, UTC_TIMESTAMP(), UTC_TIMESTAMP())\", _params) > 0;\r\n            }\r\n        }\r\n\r\n        public override TrainerProfile5 GamestatsGetProfile5(int pid)\r\n        {\r\n            return WithTransaction(tran => GamestatsGetProfile5(tran, pid));\r\n        }\r\n\r\n        public TrainerProfile5 GamestatsGetProfile5(MySqlTransaction tran, int pid)\r\n        {\r\n            DataTable result = tran.ExecuteDataTable(\"SELECT Data, IpAddress FROM GtsProfiles4 WHERE pid = @pid\", new MySqlParameter(\"@pid\", pid));\r\n            if (result.Rows.Count == 0) return null;\r\n            DataRow row = result.Rows[0];\r\n            byte[] data = DatabaseExtender.Cast<byte[]>(row[\"Data\"]);\r\n            if (data == null) return null;\r\n            return new TrainerProfile5(pid, data, DatabaseExtender.Cast<string>(row[\"IpAddress\"]));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Global Terminal 4\r\n        public ulong DressupUpload4(MySqlTransaction tran, DressupRecord4 record)\r\n        {\r\n            if (record.Data.Length != 224) throw new ArgumentException(\"Dressup data must be 224 bytes.\");\r\n\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * FROM TerminalDressup4 WHERE md5 = unhex(md5(@data)) AND Data = @data)\", \r\n                new MySqlParameter(\"@data\", record.Data))) != 0;\r\n            if (exists) return 0;\r\n\r\n            if (record.SerialNumber == 0)\r\n            {\r\n                ulong serial = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO TerminalDressup4 (pid, \" +\r\n                    \"Data, md5, TimeAdded, ParseVersion, Species) VALUES (@pid, @data, \" +\r\n                    \"unhex(md5(@data)), UTC_TIMESTAMP(), 1, @species); SELECT LAST_INSERT_ID()\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@species\", record.Species)));\r\n                return serial;\r\n            }\r\n            else\r\n            {\r\n                int rows = tran.ExecuteNonQuery(\"INSERT INTO TerminalDressup4 (pid, SerialNumber, \" +\r\n                    \"Data, md5, TimeAdded, ParseVersion, Species) VALUES (@pid, @serial, @data, \" +\r\n                    \"unhex(md5(@data)), UTC_TIMESTAMP(), 1, @species)\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@serial\", record.SerialNumber),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@species\", record.Species));\r\n\r\n                return rows > 0 ? record.SerialNumber : 0;\r\n            }\r\n        }\r\n\r\n        public override ulong DressupUpload4(DressupRecord4 record)\r\n        {\r\n            if (record.Data.Length != 224) throw new ArgumentException(\"Dressup data must be 224 bytes.\");\r\n            return WithTransaction(tran => DressupUpload4(tran, record));\r\n        }\r\n\r\n        public DressupRecord4[] DressupSearch4(MySqlTransaction tran, ushort species, int count)\r\n        {\r\n            List<DressupRecord4> results = new List<DressupRecord4>(count);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT pid, \" +\r\n                \"SerialNumber, Data FROM TerminalDressup4 WHERE Species = @species \" +\r\n                \"ORDER BY TimeAdded DESC LIMIT @count\",\r\n                new MySqlParameter(\"@species\", species),\r\n                new MySqlParameter(\"@count\", count)))\r\n            {\r\n                while (reader.Read())\r\n                    results.Add(Dressup4FromReader(reader));\r\n\r\n                reader.Close();\r\n            }\r\n\r\n            return results.ToArray();\r\n        }\r\n\r\n        public override DressupRecord4[] DressupSearch4(ushort species, int count)\r\n        {\r\n            return WithTransaction(tran => DressupSearch4(tran, species, count));\r\n        }\r\n\r\n        private DressupRecord4 Dressup4FromReader(MySqlDataReader reader)\r\n        {\r\n            // xxx: don't use ordinals\r\n            byte[] data = new byte[224];\r\n            reader.GetBytes(2, 0, data, 0, 224);\r\n\r\n            return new DressupRecord4(reader.GetInt32(0), reader.GetUInt64(1), data);\r\n        }\r\n\r\n        public ulong BoxUpload4(MySqlTransaction tran, BoxRecord4 record)\r\n        {\r\n            if (record.Data.Length != 540) throw new ArgumentException(\"Box data must be 540 bytes.\");\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * FROM TerminalBoxes4 WHERE md5 = unhex(md5(@data)) AND Data = @data)\", \r\n                new MySqlParameter(\"@data\", record.Data))) != 0;\r\n            if (exists) return 0; // xxx: it would be better to return a null ulong ? than 0\r\n\r\n            if (record.SerialNumber == 0)\r\n            {\r\n                ulong serial = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO TerminalBoxes4 (pid, \" +\r\n                    \"Data, md5, TimeAdded, ParseVersion, Label) VALUES (@pid, @data, \" +\r\n                    \"unhex(md5(@data)), UTC_TIMESTAMP(), 1, @label); SELECT LAST_INSERT_ID()\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@label\", (int)record.Label)));\r\n                return serial;\r\n            }\r\n            else\r\n            {\r\n                int rows = tran.ExecuteNonQuery(\"INSERT INTO TerminalBoxes4 (pid, SerialNumber, \" +\r\n                    \"Data, md5, TimeAdded, ParseVersion, Label) VALUES (@pid, @serial, @data, \" +\r\n                    \"unhex(md5(@data)), UTC_TIMESTAMP(), 1, @label)\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@serial\", record.SerialNumber),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@label\", (int)record.Label));\r\n\r\n                return rows > 0 ? record.SerialNumber : 0;\r\n            }\r\n        }\r\n\r\n        public override ulong BoxUpload4(BoxRecord4 record)\r\n        {\r\n            if (record.Data.Length != 540) throw new ArgumentException(\"Box data must be 540 bytes.\");\r\n            return WithTransaction(tran => BoxUpload4(tran, record));\r\n        }\r\n\r\n        public BoxRecord4[] BoxSearch4(MySqlTransaction tran, BoxLabels4 label, int count)\r\n        {\r\n            List<BoxRecord4> results = new List<BoxRecord4>(count);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT pid, \" +\r\n                \"Label, SerialNumber, Data FROM TerminalBoxes4 WHERE Label = @label \" +\r\n                \"ORDER BY TimeAdded DESC LIMIT @count\",\r\n                new MySqlParameter(\"@label\", (int)label),\r\n                new MySqlParameter(\"@count\", count)))\r\n            {\r\n                while (reader.Read())\r\n                    results.Add(Box4FromReader(reader));\r\n\r\n                reader.Close();\r\n            }\r\n            return results.ToArray();\r\n        }\r\n\r\n        public override BoxRecord4[] BoxSearch4(BoxLabels4 label, int count)\r\n        {\r\n            return WithTransaction(tran => BoxSearch4(tran, label, count));\r\n        }\r\n\r\n        private BoxRecord4 Box4FromReader(MySqlDataReader reader)\r\n        {\r\n            // xxx: don't use ordinals\r\n            byte[] data = new byte[540];\r\n            reader.GetBytes(3, 0, data, 0, 540);\r\n\r\n            return new BoxRecord4(reader.GetInt32(0), (BoxLabels4)reader.GetInt32(1), reader.GetUInt64(2), data);\r\n        }\r\n\r\n        public ulong BattleVideoUpload4(MySqlTransaction tran, BattleVideoRecord4 record)\r\n        {\r\n            if (record.Data.Length != 7272) throw new ArgumentException();\r\n            if (record.Header.Data.Length != 228) throw new ArgumentException();\r\n\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * \" +\r\n                \"FROM TerminalBattleVideos4 WHERE md5 = unhex(md5(CONCAT(@header, @data))) \" +\r\n                \"AND Data = @data AND Header = @header)\", \r\n                new MySqlParameter(\"@header\", record.Header.Data), \r\n                new MySqlParameter(\"@data\", record.Data))) != 0;\r\n            if (exists) return 0;\r\n\r\n            DateTime now = DateTime.UtcNow;\r\n            DateTime hypeTime = GetActiveHypeDate(now);\r\n            double adjustedHype = HypeDecay(HYPE_NEW_VIDEO, now, hypeTime);\r\n\r\n            ulong serial;\r\n\r\n            if (record.SerialNumber == 0)\r\n            {\r\n                ulong key = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO TerminalBattleVideos4 \" +\r\n                    \"(pid, Header, Data, md5, TimeAdded, ParseVersion, Streak, TrainerName, \" +\r\n                    \"Metagame, Country, Region, Hype, HypeTimestamp) \" +\r\n                    \"VALUES (@pid, @header, @data, unhex(md5(CONCAT(@header, @data))), \" +\r\n                    \"UTC_TIMESTAMP(), 1, @streak, @trainer, @metagame, @country, @region, @hype, @hype_timestamp); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@header\", record.Header.Data),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@streak\", record.Header.Streak),\r\n                    new MySqlParameter(\"@trainer\", record.Header.TrainerName),\r\n                    new MySqlParameter(\"@metagame\", (byte)record.Header.Metagame),\r\n                    new MySqlParameter(\"@country\", (byte)record.Header.Country),\r\n                    new MySqlParameter(\"@region\", (byte)record.Header.Region),\r\n                    new MySqlParameter(\"@hype\", adjustedHype),\r\n                    new MySqlParameter(\"@hype_timestamp\", hypeTime)\r\n                    ));\r\n                serial = BattleVideoHeader4.KeyToSerial(key);\r\n\r\n                tran.ExecuteNonQuery(\"UPDATE TerminalBattleVideos4 SET \" +\r\n                    \"SerialNumber = @serial WHERE id = @key\", \r\n                    new MySqlParameter(\"@serial\", serial), \r\n                    new MySqlParameter(\"@key\", key));\r\n\r\n                // todo: make a proc to insert both video and party.\r\n                InsertBattleVideoParty4(record.Header, key, tran);\r\n            }\r\n            else\r\n            {\r\n                ulong key = BattleVideoHeader4.SerialToKey(record.SerialNumber);\r\n\r\n                int rows = tran.ExecuteNonQuery(\"INSERT INTO TerminalBattleVideos4 \" +\r\n                    \"(id, pid, SerialNumber, Header, Data, md5, TimeAdded, \" +\r\n                    \"ParseVersion, Streak, TrainerName, \" +\r\n                    \"Metagame, Country, Region, Hype, HypeTimestamp) \" +\r\n                    \"VALUES (@key, @pid, @serial, @header, @data, \" +\r\n                    \"unhex(md5(CONCAT(@header, @data))), \" +\r\n                    \"UTC_TIMESTAMP(), 1, @streak, @trainer, @metagame, @country, @region, @hype, @hype_timestamp)\",\r\n                    new MySqlParameter(\"@key\", key),\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@serial\", record.SerialNumber),\r\n                    new MySqlParameter(\"@header\", record.Header.Data),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@streak\", record.Header.Streak),\r\n                    new MySqlParameter(\"@trainer\", record.Header.TrainerName),\r\n                    new MySqlParameter(\"@metagame\", (byte)record.Header.Metagame),\r\n                    new MySqlParameter(\"@country\", (byte)record.Header.Country),\r\n                    new MySqlParameter(\"@region\", (byte)record.Header.Region),\r\n                    new MySqlParameter(\"@hype\", adjustedHype),\r\n                    new MySqlParameter(\"@hype_timestamp\", hypeTime)\r\n                    );\r\n\r\n                if (rows == 0) return 0;\r\n                serial = record.SerialNumber;\r\n\r\n                InsertBattleVideoParty4(record.Header, key, tran);\r\n            }\r\n\r\n            BattleVideoUpdateHypeTimes4(tran, hypeTime);\r\n            return serial;\r\n        }\r\n\r\n        public override ulong BattleVideoUpload4(BattleVideoRecord4 record)\r\n        {\r\n            if (record.Data.Length != 7272) throw new ArgumentException();\r\n            if (record.Header.Data.Length != 228) throw new ArgumentException();\r\n            return WithTransaction(tran => BattleVideoUpload4(tran, record));\r\n        }\r\n\r\n        private void InsertBattleVideoParty4(BattleVideoHeader4 header, ulong key, MySqlTransaction tran)\r\n        {\r\n            MySqlCommand cmd = new MySqlCommand(\"INSERT INTO \" +\r\n            \"TerminalBattleVideoPokemon4 (video_id, Slot, Species) VALUES \" +\r\n            \"(@key, @slot, @species)\", tran.Connection, tran);\r\n            cmd.Parameters.Add(\"@key\", MySqlDbType.UInt64).Value = key;\r\n            cmd.Parameters.Add(\"@slot\", MySqlDbType.UByte);\r\n            cmd.Parameters.Add(\"@species\", MySqlDbType.UInt16);\r\n\r\n            ushort[] party = header.Party;\r\n            for (byte x = 0; x < 12; x++)\r\n            {\r\n                ushort species = party[x];\r\n                if (species == 0) continue;\r\n                cmd.Parameters[\"@slot\"].Value = x;\r\n                cmd.Parameters[\"@species\"].Value = species;\r\n                cmd.ExecuteNonQuery();\r\n            }\r\n        }\r\n\r\n        private void BattleVideoUpdateHypeTimes(MySqlTransaction tran, string tableName, DateTime hypeTime)\r\n        {\r\n            // todo: run this less often by caching the HypeTimestamp somewhere\r\n            // run it only once a week\r\n            // use cached timestamp for insertions/updates too\r\n\r\n            // common case: HypeTimestamp is in the past and needs to be updated and decay applied.\r\n            tran.ExecuteNonQuery(\"UPDATE \" + tableName + \" \" +\r\n                \"SET Hype = Hype / (1 << FLOOR(DATEDIFF(@hypetime, HypeTimestamp) / @decay)), HypeTimestamp = @hypetime \" +\r\n                \"WHERE HypeTimestamp < @hypetime\",\r\n                new MySqlParameter(\"@hypetime\", hypeTime),\r\n                new MySqlParameter(\"@decay\", HYPE_DECAY_DAYS));\r\n\r\n            // unusual case: HypeTimestamp is in the future and reverse decay needs to be applied.\r\n            tran.ExecuteNonQuery(\"UPDATE \" + tableName + \" \" +\r\n                \"SET Hype = Hype * (1 << FLOOR(DATEDIFF(HypeTimestamp, @hypetime) / @decay)), HypeTimestamp = @hypetime \" +\r\n                \"WHERE HypeTimestamp > @hypetime\",\r\n                new MySqlParameter(\"@hypetime\", hypeTime),\r\n                new MySqlParameter(\"@decay\", HYPE_DECAY_DAYS));\r\n        }\r\n\r\n        private void BattleVideoUpdateHypeTimes4(MySqlTransaction tran, DateTime hypeTime)\r\n        {\r\n            BattleVideoUpdateHypeTimes(tran, \"TerminalBattleVideos4\", hypeTime);\r\n        }\r\n\r\n        public BattleVideoHeader4[] BattleVideoSearch4(MySqlTransaction tran, ushort species, BattleVideoRankings4 ranking, BattleVideoMetagames4 metagame, byte country, byte region, int count)\r\n        {\r\n            List<MySqlParameter> _params = new List<MySqlParameter>();\r\n            string where = \"\";\r\n            string sort = \"\";\r\n            bool hasSearch = false;\r\n\r\n            if (ranking == BattleVideoRankings4.None)\r\n            {\r\n                if (species != 0xffff)\r\n                {\r\n                    where += \" WHERE EXISTS(SELECT * FROM TerminalBattleVideoPokemon4 \" +\r\n                        \"WHERE video_id = TerminalBattleVideos4.id AND Species = @species)\";\r\n                    _params.Add(new MySqlParameter(\"@species\", species));\r\n                    hasSearch = true;\r\n                }\r\n\r\n                if (metagame == BattleVideoMetagames4.SearchColosseumSingleNoRestrictions)\r\n                    metagame = BattleVideoMetagames4.ColosseumSingleNoRestrictions;\r\n                if (metagame == BattleVideoMetagames4.SearchColosseumDoubleNoRestrictions)\r\n                    metagame = BattleVideoMetagames4.ColosseumDoubleNoRestrictions;\r\n\r\n                if (metagame == BattleVideoMetagames4.SearchColosseumSingleCupMatch)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame BETWEEN 1 AND 6\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame == BattleVideoMetagames4.SearchColosseumDoubleCupMatch)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame BETWEEN 8 AND 13\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame == BattleVideoMetagames4.SearchNoBattleFrontier)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame BETWEEN 0 AND 14\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame != BattleVideoMetagames4.SearchLatest30)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame = @metagame\";\r\n                    _params.Add(new MySqlParameter(\"@metagame\", (byte)metagame));\r\n                    hasSearch = true;\r\n                }\r\n\r\n                if (country != 0xff)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Country = @country\";\r\n                    _params.Add(new MySqlParameter(\"@country\", country));\r\n                    hasSearch = true;\r\n                }\r\n\r\n                if (region != 0xff)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Region = @region\";\r\n                    _params.Add(new MySqlParameter(\"@region\", region));\r\n                }\r\n\r\n                sort = \" ORDER BY TimeAdded DESC, id DESC\";\r\n            }\r\n            else if (ranking == BattleVideoRankings4.Colosseum)\r\n            {\r\n                where = \" WHERE Metagame BETWEEN 0 AND 14\";\r\n                sort = \" ORDER BY Hype DESC, TimeAdded DESC, id DESC\";\r\n            }\r\n            else if (ranking == BattleVideoRankings4.BattleFrontier)\r\n            {\r\n                where = \" WHERE NOT (Metagame BETWEEN 0 AND 14)\";\r\n                sort = \" ORDER BY Hype DESC, TimeAdded DESC, id DESC\";\r\n            }\r\n            else\r\n            {\r\n                sort = \" ORDER BY TimeAdded DESC, id DESC\";\r\n            }\r\n\r\n            _params.Add(new MySqlParameter(\"@count\", count));\r\n\r\n            List<BattleVideoHeader4> results = new List<BattleVideoHeader4>(count);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT pid, \" +\r\n                \"SerialNumber, Header FROM TerminalBattleVideos4\" + where +\r\n                sort + \" LIMIT @count\",\r\n                _params.ToArray()))\r\n            {\r\n                while (reader.Read())\r\n                    results.Add(BattleVideoHeader4FromReader(reader));\r\n\r\n                reader.Close();\r\n            }\r\n\r\n            return results.ToArray();\r\n        }\r\n\r\n        public override BattleVideoHeader4[] BattleVideoSearch4(ushort species, BattleVideoRankings4 ranking, BattleVideoMetagames4 metagame, byte country, byte region, int count)\r\n        {\r\n            return WithTransaction(tran => BattleVideoSearch4(tran, species, ranking, metagame, country, region, count));\r\n        }\r\n\r\n        private BattleVideoHeader4 BattleVideoHeader4FromReader(MySqlDataReader reader)\r\n        {\r\n            byte[] data = new byte[228];\r\n            reader.GetBytes(2, 0, data, 0, 228);\r\n\r\n            return new BattleVideoHeader4(reader.GetInt32(0), reader.GetUInt64(1), data);\r\n        }\r\n\r\n        public MySqlDataReader BattleVideoGet(MySqlTransaction tran, string tableName, ulong serial, bool incrementViews)\r\n        {\r\n            string update;\r\n            MySqlParameter[] _params;\r\n\r\n            if (incrementViews)\r\n            {\r\n                DateTime now = DateTime.UtcNow;\r\n                DateTime hypeTime = GetActiveHypeDate(now);\r\n                double hype = HypeDecay(HYPE_WATCHED_VIDEO, now, hypeTime);\r\n\r\n                BattleVideoUpdateHypeTimes(tran, tableName, hypeTime);\r\n\r\n                update = \"UPDATE \" + tableName + \" \" +\r\n                    \"SET Views = Views + 1, Hype = Hype + @hype WHERE SerialNumber = @serial; \";\r\n                _params = new[] {\r\n                    new MySqlParameter(\"@hype\", hype),\r\n                    new MySqlParameter(\"@hype_timestamp\", hypeTime),\r\n                    new MySqlParameter(\"@serial\", serial) };\r\n            }\r\n            else\r\n            {\r\n                update = \"\";\r\n                _params = new[] { new MySqlParameter(\"@serial\", serial) };\r\n            }\r\n\r\n            return (MySqlDataReader)tran.ExecuteReader(update + \"SELECT pid, \" +\r\n                \"SerialNumber, Header, Data FROM \" + tableName + \" \" +\r\n                \"WHERE SerialNumber = @serial\",\r\n                _params);\r\n        }\r\n\r\n        public BattleVideoRecord4 BattleVideoGet4(MySqlTransaction tran, ulong serial, bool incrementViews = false)\r\n        {\r\n            BattleVideoRecord4 result = null;\r\n            using (var reader = BattleVideoGet(tran, \"TerminalBattleVideos4\", serial, incrementViews))\r\n            {\r\n                if (reader.Read())\r\n                    result = BattleVideo4FromReader(reader);\r\n            }\r\n            return result;\r\n        }\r\n\r\n        public override BattleVideoRecord4 BattleVideoGet4(ulong serial, bool incrementViews = false)\r\n        {\r\n            return WithTransaction(tran => BattleVideoGet4(tran, serial, incrementViews));\r\n        }\r\n\r\n        private BattleVideoRecord4 BattleVideo4FromReader(MySqlDataReader reader)\r\n        {\r\n            byte[] data = new byte[7272];\r\n            reader.GetBytes(3, 0, data, 0, 7272);\r\n            BattleVideoHeader4 header = BattleVideoHeader4FromReader(reader);\r\n\r\n            return new BattleVideoRecord4(header.PID, header.SerialNumber, header, data);\r\n        }\r\n\r\n        public bool BattleVideoFlagSaved4(MySqlTransaction tran, ulong serial)\r\n        {\r\n            DateTime now = DateTime.UtcNow;\r\n            DateTime hypeTime = GetActiveHypeDate(now);\r\n            double hype = HypeDecay(HYPE_SAVED_VIDEO, now, hypeTime);\r\n\r\n            BattleVideoUpdateHypeTimes4(tran, hypeTime);\r\n\r\n            int results = tran.ExecuteNonQuery(\"UPDATE TerminalBattleVideos4 \" +\r\n                \"SET Saves = Saves + 1, Hype = Hype + @hype WHERE SerialNumber = @serial\",\r\n                new MySqlParameter(\"@hype\", hype),\r\n                new MySqlParameter(\"@hype_timestamp\", hypeTime),\r\n                new MySqlParameter(\"@serial\", serial));\r\n\r\n            return results > 0;\r\n        }\r\n\r\n        public override bool BattleVideoFlagSaved4(ulong serial)\r\n        {\r\n            return WithTransaction(tran => BattleVideoFlagSaved4(tran, serial));\r\n        }\r\n\r\n        public ulong BattleVideoCount4(MySqlTransaction tran)\r\n        {\r\n            return Convert.ToUInt64(tran.ExecuteScalar(\"SELECT Count(*) FROM TerminalBattleVideos4\"));\r\n        }\r\n\r\n        public override ulong BattleVideoCount4()\r\n        {\r\n            return WithTransaction(tran => BattleVideoCount4(tran));\r\n        }\r\n\r\n        public override bool TrainerRankingsPerformRollover()\r\n        {\r\n            return WithTransaction(tran => TrainerRankingsPerformRollover(tran));\r\n        }\r\n\r\n        public bool TrainerRankingsPerformRollover(MySqlTransaction tran)\r\n        {\r\n            // Use one single date for this transaction to avoid any possible inconsistencies.\r\n            // An inconsistency here could lead to creating an extra leaderboard for the past week.\r\n            DateTime now = DateTime.UtcNow;\r\n\r\n            // 1. Check if current leaderboard is still valid.\r\n            // It's best to just check that a future end date is in existence.\r\n            // Adding more checks, e.g. start < now < end, could allow things to get funny if the clock changes.\r\n            // Just use the futuremost leaderboard as the current one, and start a new one if we think that leaderboard is in the past.\r\n            DataTable tblLastReport = tran.ExecuteDataTable(\r\n                \"SELECT report_id, StartDate, EndDate FROM pkmncf_terminal_trainer_rankings_reports ORDER BY EndDate DESC LIMIT 1\",\r\n                new MySqlParameter(\"@now\", now));\r\n\r\n            if (tblLastReport.Rows.Count > 0)\r\n            {\r\n                DataRow rowLastReport = tblLastReport.Rows[0];\r\n                if (DatabaseExtender.Cast<DateTime>(rowLastReport[\"EndDate\"]) > now) return false; // found leaderboard still good\r\n\r\n                int lastReportId = DatabaseExtender.Cast<int>(rowLastReport[\"report_id\"]);\r\n\r\n                // update leaderboard aggregates for the most recently concluded leaderboard\r\n                tran.ExecuteProcedure(\"pkmncf_terminal_proc_create_leaderboards_for_report\", new MySqlParameter(\"_report_id\", lastReportId));\r\n            }\r\n\r\n            // 2. Pick new record-types, preferring ones which haven't been used in a while.\r\n            DataTable tblRecordTypes = tran.ExecuteDataTable(\"SELECT RecordType, MAX(StartDate) AS LastUsed \" +\r\n                \"FROM ( \" +\r\n                    \"SELECT RecordType1 AS RecordType, StartDate FROM pkmncf_terminal_trainer_rankings_reports \" +\r\n                    \"UNION \" +\r\n                    \"SELECT RecordType2 AS RecordType, StartDate FROM pkmncf_terminal_trainer_rankings_reports \" +\r\n                    \"UNION \" +\r\n                    \"SELECT RecordType3 AS RecordType, StartDate FROM pkmncf_terminal_trainer_rankings_reports \" +\r\n                    \") AS tbl4 \" +\r\n                \"GROUP BY RecordType\");\r\n\r\n            TrainerRankingsRecordTypes[] enumValues = (TrainerRankingsRecordTypes[])Enum.GetValues(typeof(TrainerRankingsRecordTypes));\r\n\r\n            // outer join enum values to include those recordtypes that have never been used\r\n            var combined = enumValues\r\n                .GroupJoin(tblRecordTypes.AsEnumerable(),\r\n                    i => i,\r\n                    row => (TrainerRankingsRecordTypes)DatabaseExtender.Cast<int>(row[\"RecordType\"]),\r\n                    (i, rows) => new { RecordType = i, LastUsed = rows.Count() == 0 ? DateTime.MinValue : DatabaseExtender.Cast<DateTime>(rows.First()[\"LastUsed\"]) }\r\n                    )\r\n                .OrderBy(r => r.LastUsed).ToList();\r\n\r\n            List<TrainerRankingsRecordTypes> chosen = new List<TrainerRankingsRecordTypes>(3);\r\n            Random rand = new Random(); // todo: use better rng here. Maybe when the framework gets good RNGs\r\n\r\n            // pick a random sampling of 3 recordtypes near the start of the list (oldest) but not always just the first 3 for a little randomness but not too much:\r\n            for (int i = 0; i < 3; i++)\r\n            {\r\n                // here we do a kind of \"itunes shuffle\" type algorithm where\r\n                // we cycle through recordtypes but vary the order a little bit\r\n                // each time.\r\n                // We do this by choosing from the recordypes in the bottom 10%\r\n                // according to last used date and iterating\r\n\r\n                DateTime cutoff = DateLerp(combined[0].LastUsed, combined[combined.Count - 1].LastUsed, 0.1);\r\n                int acceptableCount = combined.Count(row => row.LastUsed <= cutoff); // xxx: can do faster since we know this is sorted\r\n                int chosenIndex = rand.Next(acceptableCount);\r\n                chosen.Add(combined[chosenIndex].RecordType);\r\n                combined.RemoveAt(chosenIndex);\r\n            }\r\n\r\n            // 3. Init a new report.\r\n            // Note that if more than a whole week has passed since a visit, go ahead and skip the blank week(s). It's a little white lie but makes the data look more presentable than a bunch of 0s.\r\n            DateTime startDate = now.Date.AddDays(-(int)now.Date.DayOfWeek); // DayOfWeek zero-based starting on sunday\r\n            DateTime endDate = startDate.AddDays(7);\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO pkmncf_terminal_trainer_rankings_reports \" +\r\n                \"(StartDate, EndDate, RecordType1, RecordType2, RecordType3) VALUES \" +\r\n                \"(@start_date, @end_date, @record_type1, @record_type2, @record_type3)\",\r\n                new MySqlParameter(\"@start_date\", startDate),\r\n                new MySqlParameter(\"@end_date\", endDate),\r\n                new MySqlParameter(\"@record_type1\", chosen[0]),\r\n                new MySqlParameter(\"@record_type2\", chosen[1]),\r\n                new MySqlParameter(\"@record_type3\", chosen[2]));\r\n\r\n            return true;\r\n        }\r\n\r\n        public override IList<TrainerRankingsRecordTypes> TrainerRankingsGetActiveRecordTypes()\r\n        {\r\n            return WithTransaction(tran => TrainerRankingsGetActiveRecordTypes(tran));\r\n        }\r\n\r\n        public IList<TrainerRankingsRecordTypes> TrainerRankingsGetActiveRecordTypes(MySqlTransaction tran)\r\n        {\r\n            DateTime now = DateTime.UtcNow;\r\n\r\n            DataTable tbl = tran.ExecuteDataTable(\r\n                \"SELECT RecordType1, RecordType2, RecordType3 FROM pkmncf_terminal_trainer_rankings_reports ORDER BY EndDate DESC LIMIT 1\",\r\n                new MySqlParameter(\"@now\", now));\r\n\r\n            if (tbl.Rows.Count == 0) return new List<TrainerRankingsRecordTypes>();\r\n            DataRow row = tbl.Rows[0];\r\n\r\n            return new List<TrainerRankingsRecordTypes>()\r\n            { \r\n                (TrainerRankingsRecordTypes)DatabaseExtender.Cast<int>(row[\"RecordType1\"]),\r\n                (TrainerRankingsRecordTypes)DatabaseExtender.Cast<int>(row[\"RecordType2\"]),\r\n                (TrainerRankingsRecordTypes)DatabaseExtender.Cast<int>(row[\"RecordType3\"]),\r\n            };\r\n        }\r\n\r\n        public override void TrainerRankingsSubmit(TrainerRankingsSubmission submission)\r\n        {\r\n            WithTransaction(tran => TrainerRankingsSubmit(tran, submission));\r\n        }\r\n\r\n        public void TrainerRankingsSubmit(MySqlTransaction tran, TrainerRankingsSubmission submission)\r\n        {\r\n            tran.ExecuteNonQuery(\"IF (SELECT EXISTS(SELECT * FROM pkmncf_terminal_trainer_rankings_teams WHERE pid = @pid)) THEN \" +\r\n                \"UPDATE pkmncf_terminal_trainer_rankings_teams SET \" +\r\n                \"TrainerClass = @trainer_class, BirthMonth = @birth_month, \" +\r\n                \"FavouritePokemon = @favourite_pokemon, \" +\r\n                \"Unknown1 = @unknown1, Unknown2 = @unknown2, \" +\r\n                \"Unknown3 = @unknown3, LastUpdated = UTC_TIMESTAMP() \" +\r\n                \"WHERE pid = @pid; \" +\r\n                \"ELSE \" +\r\n                \"INSERT INTO pkmncf_terminal_trainer_rankings_teams \" +\r\n                \"(pid, TrainerClass, BirthMonth, FavouritePokemon, Unknown1, Unknown2, Unknown3, LastUpdated) \" +\r\n                \"VALUES (@pid, @trainer_class, @birth_month, @favourite_pokemon, @unknown1, @unknown2, @unknown3, UTC_TIMESTAMP()); \" +\r\n                \"END IF;\", \r\n                new MySqlParameter(\"@pid\", submission.PID),\r\n                new MySqlParameter(\"@trainer_class\", submission.TrainerClass),\r\n                new MySqlParameter(\"@birth_month\", submission.BirthMonth),\r\n                new MySqlParameter(\"@favourite_pokemon\", submission.FavouritePokemon),\r\n                new MySqlParameter(\"@unknown1\", submission.Unknown1),\r\n                new MySqlParameter(\"@unknown2\", submission.Unknown2),\r\n                new MySqlParameter(\"@unknown3\", submission.Unknown3)\r\n            );\r\n\r\n            foreach (var entry in submission.Entries)\r\n            {\r\n                tran.ExecuteNonQuery(\"DELETE FROM pkmncf_terminal_trainer_rankings_records WHERE pid = @pid AND RecordType = @record_type; \" +\r\n                    \"INSERT INTO pkmncf_terminal_trainer_rankings_records (pid, RecordType, Score, LastUpdated) \" +\r\n                    \"VALUES (@pid, @record_type, @score, UTC_TIMESTAMP())\",\r\n                    new MySqlParameter(\"@pid\", submission.PID),\r\n                    new MySqlParameter(\"@record_type\", entry.RecordType),\r\n                    new MySqlParameter(\"@score\", entry.Score));\r\n            }\r\n        }\r\n\r\n        public override TrainerRankingsReport[] TrainerRankingsGetReport(DateTime start, DateTime end, int limit)\r\n        {\r\n            return WithTransaction(tran => TrainerRankingsGetReport(tran, start, end, limit));\r\n        }\r\n\r\n        public TrainerRankingsReport[] TrainerRankingsGetReport(MySqlTransaction tran, DateTime start, DateTime end, int limit)\r\n        {\r\n            DataTable tblReports = tran.ExecuteDataTable(\r\n                \"SELECT report_id, StartDate, EndDate, RecordType1, RecordType2, RecordType3 \" +\r\n                \"FROM pkmncf_terminal_trainer_rankings_reports \" +\r\n                \"WHERE EndDate >= @start_date AND StartDate <= @end_date \" +\r\n                \"ORDER BY StartDate DESC\" + (limit > 0 ? \" LIMIT @limit\" : \"\"),\r\n                new MySqlParameter(\"@start_date\", start),\r\n                new MySqlParameter(\"@end_date\", end),\r\n                new MySqlParameter(\"@limit\", limit));\r\n\r\n            var result = new TrainerRankingsReport[tblReports.Rows.Count];\r\n\r\n            for (int res = 0; res < result.Length; res++)\r\n            {\r\n                DataRow row = tblReports.Rows[res];\r\n                var groups = new TrainerRankingsLeaderboardGroup[3];\r\n                var groupCols = new[] { \"RecordType1\", \"RecordType2\", \"RecordType3\" };\r\n                var reportId = DatabaseExtender.Cast<int>(row[\"report_id\"]);\r\n\r\n                for (int grp = 0; grp < 3; grp++)\r\n                {\r\n                    var recordType = (TrainerRankingsRecordTypes)DatabaseExtender.Cast<int>(row[groupCols[grp]]);\r\n\r\n                    groups[grp] = new TrainerRankingsLeaderboardGroup\r\n                    (\r\n                        recordType,\r\n                        GetSpecificLeaderboard(tran, reportId, recordType, TrainerRankingsTeamCategories.TrainerClass),\r\n                        GetSpecificLeaderboard(tran, reportId, recordType, TrainerRankingsTeamCategories.BirthMonth),\r\n                        GetSpecificLeaderboard(tran, reportId, recordType, TrainerRankingsTeamCategories.FavouritePokemon)\r\n                    );\r\n                }\r\n\r\n                result[res] = new TrainerRankingsReport(DatabaseExtender.Cast<DateTime>(row[\"StartDate\"]), DatabaseExtender.Cast<DateTime>(row[\"EndDate\"]), groups);\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        private TrainerRankingsLeaderboard GetSpecificLeaderboard(MySqlTransaction tran, int reportId, \r\n            TrainerRankingsRecordTypes recordType, TrainerRankingsTeamCategories teamCategory)\r\n        {\r\n            string tableName, teamColumnName, teamBetween;\r\n\r\n            switch (teamCategory)\r\n            {\r\n                case TrainerRankingsTeamCategories.TrainerClass:\r\n                    tableName = \"pkmncf_terminal_trainer_rankings_leaderboards_class\";\r\n                    teamColumnName = \"TrainerClass\";\r\n                    teamBetween = \"TrainerClass BETWEEN 0 and 16\";\r\n                    break;\r\n                case TrainerRankingsTeamCategories.BirthMonth:\r\n                    tableName = \"pkmncf_terminal_trainer_rankings_leaderboards_month\";\r\n                    teamColumnName = \"Month\";\r\n                    teamBetween = \"Month BETWEEN 1 and 12\";\r\n                    break;\r\n                case TrainerRankingsTeamCategories.FavouritePokemon:\r\n                    tableName = \"pkmncf_terminal_trainer_rankings_leaderboards_pokemon\";\r\n                    teamColumnName = \"pokemon_id\";\r\n                    teamBetween = \"pokemon_id BETWEEN 1 and 493\";\r\n                    break;\r\n                default:\r\n                    throw new ArgumentOutOfRangeException(\"teamCategory\");\r\n            }\r\n\r\n            var tblLeaderboard = tran.ExecuteDataTable(\"SELECT \" + teamColumnName + \" AS Team, Score FROM \" + tableName +\r\n                \" WHERE report_id = @report_id AND RecordType = @record_type AND \" + teamBetween + \" ORDER BY Score DESC\",\r\n                new MySqlParameter(\"@report_id\", reportId),\r\n                new MySqlParameter(\"@record_type\", recordType));\r\n\r\n            var entries = tblLeaderboard.AsEnumerable()\r\n                .Select(rowEntry => new TrainerRankingsLeaderboardEntry(\r\n                    DatabaseExtender.Cast<int>(rowEntry[\"Team\"]),\r\n                    DatabaseExtender.Cast<long>(rowEntry[\"Score\"]))).ToArray();\r\n\r\n            return new TrainerRankingsLeaderboard(teamCategory, entries);\r\n        }\r\n\r\n        public override TrainerRankingsReport TrainerRankingsGetPendingReport()\r\n        {\r\n            return WithTransaction(tran => TrainerRankingsGetPendingReport(tran));\r\n        }\r\n\r\n        public TrainerRankingsReport TrainerRankingsGetPendingReport(MySqlTransaction tran)\r\n        {\r\n            DataTable tblReports = tran.ExecuteDataTable(\r\n                \"SELECT report_id, StartDate, EndDate, RecordType1, RecordType2, RecordType3 \" +\r\n                \"FROM pkmncf_terminal_trainer_rankings_reports \" +\r\n                \"ORDER BY StartDate DESC LIMIT 1\");\r\n\r\n            if (tblReports.Rows.Count < 1) return null;\r\n\r\n            DataRow row = tblReports.Rows[0];\r\n            var groups = new TrainerRankingsLeaderboardGroup[3];\r\n            var groupCols = new[] { \"RecordType1\", \"RecordType2\", \"RecordType3\" };\r\n            var startDate = DatabaseExtender.Cast<DateTime>(row[\"StartDate\"]);\r\n\r\n            for (int grp = 0; grp < 3; grp++)\r\n            {\r\n                var recordType = (TrainerRankingsRecordTypes)DatabaseExtender.Cast<int>(row[groupCols[grp]]);\r\n\r\n                groups[grp] = new TrainerRankingsLeaderboardGroup\r\n                (\r\n                    recordType,\r\n                    GetSpecificPendingLeaderboard(tran, recordType, TrainerRankingsTeamCategories.TrainerClass, startDate),\r\n                    GetSpecificPendingLeaderboard(tran, recordType, TrainerRankingsTeamCategories.BirthMonth, startDate),\r\n                    GetSpecificPendingLeaderboard(tran, recordType, TrainerRankingsTeamCategories.FavouritePokemon, startDate)\r\n                );\r\n            }\r\n\r\n            return new TrainerRankingsReport(startDate, DatabaseExtender.Cast<DateTime>(row[\"EndDate\"]), groups);\r\n        }\r\n\r\n        private TrainerRankingsLeaderboard GetSpecificPendingLeaderboard(MySqlTransaction tran, \r\n            TrainerRankingsRecordTypes recordType, TrainerRankingsTeamCategories teamCategory, DateTime startDate)\r\n        {\r\n            string teamColumnName, teamBetween; // different column names than above...\r\n\r\n            switch (teamCategory)\r\n            {\r\n                case TrainerRankingsTeamCategories.TrainerClass:\r\n                    teamColumnName = \"TrainerClass\";\r\n                    teamBetween = \"TrainerClass BETWEEN 0 and 16\";\r\n                    break;\r\n                case TrainerRankingsTeamCategories.BirthMonth:\r\n                    teamColumnName = \"BirthMonth\";\r\n                    teamBetween = \"BirthMonth BETWEEN 1 and 12\";\r\n                    break;\r\n                case TrainerRankingsTeamCategories.FavouritePokemon:\r\n                    teamColumnName = \"FavouritePokemon\";\r\n                    teamBetween = \"FavouritePokemon BETWEEN 1 and 493\";\r\n                    break;\r\n                default:\r\n                    throw new ArgumentOutOfRangeException(\"teamCategory\");\r\n            }\r\n\r\n            var tblLeaderboard = tran.ExecuteDataTable(\"SELECT \" + teamColumnName + \" AS Team, SUM(Score) AS Score \" +\r\n                \"FROM pkmncf_terminal_trainer_rankings_records \" +\r\n                \"INNER JOIN pkmncf_terminal_trainer_rankings_teams \" +\r\n                    \"ON pkmncf_terminal_trainer_rankings_records.pid = pkmncf_terminal_trainer_rankings_teams.pid \" +\r\n                \"WHERE pkmncf_terminal_trainer_rankings_records.LastUpdated >= @start_date \" +\r\n                    \"AND RecordType = @record_type AND \" + teamBetween +\r\n                \" GROUP BY Team ORDER BY Score DESC\",\r\n                new MySqlParameter(\"@record_type\", recordType),\r\n                new MySqlParameter(\"@start_date\", startDate));\r\n\r\n            var entries = tblLeaderboard.AsEnumerable()\r\n                .Select(rowEntry => new TrainerRankingsLeaderboardEntry(\r\n                    DatabaseExtender.Cast<int>(rowEntry[\"Team\"]),\r\n                    Convert.ToInt64(rowEntry[\"Score\"]))).ToArray();\r\n\r\n            return new TrainerRankingsLeaderboard(teamCategory, entries);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Global Terminal 5\r\n        public ulong MusicalUpload5(MySqlTransaction tran, MusicalRecord5 record)\r\n        {\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * \" +\r\n                \"FROM TerminalMusicals5 WHERE md5 = unhex(md5(@data)) \" +\r\n                \"AND Data = @data)\",\r\n                new MySqlParameter(\"@data\", record.Data))) != 0;\r\n            if (exists) return 0;\r\n\r\n            if (record.SerialNumber == 0)\r\n            {\r\n                ulong serial = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO TerminalMusicals5 \" +\r\n                    \"(pid, Data, md5, TimeAdded, ParseVersion) \" +\r\n                    \"VALUES (@pid, @data, unhex(md5(@data)), \" +\r\n                    \"UTC_TIMESTAMP(), 1); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@data\", record.Data)\r\n                    ));\r\n\r\n                // todo: make a proc to insert both musical and party.\r\n                InsertMusicalParticipants5(record, serial, tran);\r\n\r\n                return serial;\r\n            }\r\n            else\r\n            {\r\n                int rows = tran.ExecuteNonQuery(\"INSERT INTO TerminalMusicals5 \" +\r\n                    \"(pid, SerialNumber, Data, md5, TimeAdded, ParseVersion) \" +\r\n                    \"VALUES (@pid, @serial, @data, unhex(md5(@data)), \" +\r\n                    \"UTC_TIMESTAMP(), 1)\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@serial\", record.SerialNumber),\r\n                    new MySqlParameter(\"@data\", record.Data)\r\n                    );\r\n\r\n                if (rows == 0) return 0;\r\n\r\n                InsertMusicalParticipants5(record, record.SerialNumber, tran);\r\n\r\n                return record.SerialNumber;\r\n            }\r\n        }\r\n\r\n        public override ulong MusicalUpload5(MusicalRecord5 record)\r\n        {\r\n            if (record.Data.Length != 560) throw new ArgumentException();\r\n            return WithTransaction(tran => MusicalUpload5(tran, record));\r\n        }\r\n\r\n        private void InsertMusicalParticipants5(MusicalRecord5 record, ulong SerialNumber, MySqlTransaction tran)\r\n        {\r\n            MySqlCommand cmd = new MySqlCommand(\"INSERT INTO \" +\r\n            \"TerminalMusicalPokemon5 (musical_id, Slot, Species) VALUES \" +\r\n            \"(@serial, @slot, @species)\", tran.Connection, tran);\r\n            cmd.Parameters.Add(\"@serial\", MySqlDbType.UInt64).Value = SerialNumber;\r\n            cmd.Parameters.Add(\"@slot\", MySqlDbType.UByte);\r\n            cmd.Parameters.Add(\"@species\", MySqlDbType.UInt16);\r\n\r\n            MusicalParticipant5[] participants = record.Participants;\r\n            for (byte x = 0; x < 4; x++)\r\n            {\r\n                ushort species = participants[x].Species;\r\n                if (species == 0) continue;\r\n                cmd.Parameters[\"@slot\"].Value = x;\r\n                cmd.Parameters[\"@species\"].Value = species;\r\n                cmd.ExecuteNonQuery();\r\n            }\r\n        }\r\n\r\n        public MusicalRecord5[] MusicalSearch5(MySqlTransaction tran, ushort species, int count)\r\n        {\r\n            List<MusicalRecord5> results = new List<MusicalRecord5>(count);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT pid, \" +\r\n                \"SerialNumber, Data FROM TerminalMusicals5 \" +\r\n                \"WHERE EXISTS(SELECT * FROM TerminalMusicalPokemon5 \" +\r\n                \"WHERE musical_id = TerminalMusicals5.SerialNumber AND Species = @species) \" +\r\n                \"ORDER BY TimeAdded DESC LIMIT @count\",\r\n                new MySqlParameter(\"@species\", species),\r\n                new MySqlParameter(\"@count\", count)))\r\n            {\r\n                while (reader.Read())\r\n                    results.Add(Musical5FromReader(reader));\r\n\r\n                reader.Close();\r\n            }\r\n            return results.ToArray();\r\n        }\r\n\r\n        public override MusicalRecord5[] MusicalSearch5(ushort species, int count)\r\n        {\r\n            return WithTransaction(tran => MusicalSearch5(tran, species, count));\r\n        }\r\n\r\n        private MusicalRecord5 Musical5FromReader(MySqlDataReader reader)\r\n        {\r\n            byte[] data = new byte[560];\r\n            reader.GetBytes(2, 0, data, 0, 560);\r\n\r\n            return new MusicalRecord5(reader.GetInt32(0), reader.GetUInt64(1), data);\r\n        }\r\n\r\n        public ulong BattleVideoUpload5(MySqlTransaction tran, BattleVideoRecord5 record)\r\n        {\r\n            if (record.Data.Length != 6112) throw new ArgumentException();\r\n            if (record.Header.Data.Length != 196) throw new ArgumentException();\r\n\r\n            bool exists = Convert.ToSByte(tran.ExecuteScalar(\"SELECT EXISTS(SELECT * \" +\r\n                \"FROM TerminalBattleVideos5 WHERE md5 = unhex(md5(CONCAT(@header, @data))) \" +\r\n                \"AND Data = @data AND Header = @header)\",\r\n                new MySqlParameter(\"@header\", record.Header.Data),\r\n                new MySqlParameter(\"@data\", record.Data))) != 0;\r\n            if (exists) return 0;\r\n\r\n            DateTime now = DateTime.UtcNow;\r\n            DateTime hypeTime = GetActiveHypeDate(now);\r\n            double adjustedHype = HypeDecay(HYPE_NEW_VIDEO, now, hypeTime);\r\n\r\n            ulong serial;\r\n\r\n            if (record.SerialNumber == 0)\r\n            {\r\n                ulong key = Convert.ToUInt64(tran.ExecuteScalar(\"INSERT INTO TerminalBattleVideos5 \" +\r\n                    \"(pid, Header, Data, md5, TimeAdded, ParseVersion, Streak, TrainerName, \" +\r\n                    \"Metagame, Country, Region, Hype, HypeTimestamp) \" +\r\n                    \"VALUES (@pid, @header, @data, unhex(md5(CONCAT(@header, @data))), \" +\r\n                    \"UTC_TIMESTAMP(), 1, @streak, @trainer, @metagame, @country, @region, @hype, @hype_timestamp); \" +\r\n                    \"SELECT LAST_INSERT_ID()\",\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@header\", record.Header.Data),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@streak\", record.Header.Streak),\r\n                    new MySqlParameter(\"@trainer\", record.Header.TrainerName),\r\n                    new MySqlParameter(\"@metagame\", (byte)record.Header.Metagame),\r\n                    new MySqlParameter(\"@country\", (byte)record.Header.Country),\r\n                    new MySqlParameter(\"@region\", (byte)record.Header.Region),\r\n                    new MySqlParameter(\"@hype\", adjustedHype),\r\n                    new MySqlParameter(\"@hype_timestamp\", hypeTime)\r\n                    ));\r\n                serial = BattleVideoHeader4.KeyToSerial(key);\r\n\r\n                tran.ExecuteNonQuery(\"UPDATE TerminalBattleVideos5 SET \" +\r\n                    \"SerialNumber = @serial WHERE id = @key\",\r\n                    new MySqlParameter(\"@serial\", serial),\r\n                    new MySqlParameter(\"@key\", key));\r\n\r\n                // todo: make a proc to insert both video and party.\r\n                InsertBattleVideoParty5(record.Header, key, tran);\r\n            }\r\n            else\r\n            {\r\n                ulong key = (ulong)BattleVideoHeader4.SerialToKey(record.SerialNumber);\r\n\r\n                int rows = tran.ExecuteNonQuery(\"INSERT INTO TerminalBattleVideos5 \" +\r\n                    \"(id, pid, SerialNumber, Header, Data, md5, TimeAdded, \" +\r\n                    \"ParseVersion, Streak, TrainerName, \" +\r\n                    \"Metagame, Country, Region, Hype, HypeTimestamp) \" +\r\n                    \"VALUES (@key, @pid, @serial, @header, @data, \" +\r\n                    \"unhex(md5(CONCAT(@header, @data))), \" +\r\n                    \"UTC_TIMESTAMP(), 1, @streak, @trainer, @metagame, @country, @region, @hype, @hype_timestamp)\",\r\n                    new MySqlParameter(\"@key\", key),\r\n                    new MySqlParameter(\"@pid\", record.PID),\r\n                    new MySqlParameter(\"@serial\", record.SerialNumber),\r\n                    new MySqlParameter(\"@header\", record.Header.Data),\r\n                    new MySqlParameter(\"@data\", record.Data),\r\n                    new MySqlParameter(\"@streak\", record.Header.Streak),\r\n                    new MySqlParameter(\"@trainer\", record.Header.TrainerName),\r\n                    new MySqlParameter(\"@metagame\", (byte)record.Header.Metagame),\r\n                    new MySqlParameter(\"@country\", (byte)record.Header.Country),\r\n                    new MySqlParameter(\"@region\", (byte)record.Header.Region),\r\n                    new MySqlParameter(\"@hype\", adjustedHype),\r\n                    new MySqlParameter(\"@hype_timestamp\", hypeTime)\r\n                    );\r\n\r\n                if (rows == 0) return 0;\r\n                serial = record.SerialNumber;\r\n\r\n                InsertBattleVideoParty5(record.Header, key, tran);\r\n            }\r\n\r\n            BattleVideoUpdateHypeTimes5(tran, hypeTime);\r\n            return serial;\r\n        }\r\n\r\n        public override ulong BattleVideoUpload5(BattleVideoRecord5 record)\r\n        {\r\n            if (record.Data.Length != 6112) throw new ArgumentException();\r\n            if (record.Header.Data.Length != 196) throw new ArgumentException();\r\n            return WithTransaction(tran => BattleVideoUpload5(tran, record));\r\n        }\r\n\r\n        private void InsertBattleVideoParty5(BattleVideoHeader5 header, ulong key, MySqlTransaction tran)\r\n        {\r\n            MySqlCommand cmd = new MySqlCommand(\"INSERT INTO \" +\r\n            \"TerminalBattleVideoPokemon5 (video_id, Slot, Species) VALUES \" +\r\n            \"(@key, @slot, @species)\", tran.Connection, tran);\r\n            cmd.Parameters.Add(\"@key\", MySqlDbType.UInt64).Value = key;\r\n            cmd.Parameters.Add(\"@slot\", MySqlDbType.UByte);\r\n            cmd.Parameters.Add(\"@species\", MySqlDbType.UInt16);\r\n\r\n            ushort[] party = header.Party;\r\n            for (byte x = 0; x < 12; x++)\r\n            {\r\n                ushort species = party[x];\r\n                if (species == 0) continue;\r\n                cmd.Parameters[\"@slot\"].Value = x;\r\n                cmd.Parameters[\"@species\"].Value = species;\r\n                cmd.ExecuteNonQuery();\r\n            }\r\n        }\r\n\r\n        private void BattleVideoUpdateHypeTimes5(MySqlTransaction tran, DateTime hypeTime)\r\n        {\r\n            BattleVideoUpdateHypeTimes(tran, \"TerminalBattleVideos5\", hypeTime);\r\n        }\r\n\r\n        public BattleVideoHeader5[] BattleVideoSearch5(MySqlTransaction tran, ushort species, BattleVideoRankings5 ranking, BattleVideoMetagames5 metagame, byte country, byte region, int count)\r\n        {\r\n            List<MySqlParameter> _params = new List<MySqlParameter>();\r\n            string where = \"\";\r\n            string sort = \"\";\r\n            bool hasSearch = false;\r\n\r\n            if (ranking == BattleVideoRankings5.None)\r\n            {\r\n                if (species != 0xffff)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") +\r\n                        \"EXISTS(SELECT * FROM TerminalBattleVideoPokemon5 \" +\r\n                        \"WHERE video_id = TerminalBattleVideos5.id AND Species = @species)\";\r\n                    _params.Add(new MySqlParameter(\"@species\", species));\r\n                    hasSearch = true;\r\n                }\r\n\r\n                if (metagame == BattleVideoMetagames5.RandomMatchupSingle)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame IN (40, 104)\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame == BattleVideoMetagames5.RandomMatchupDouble)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame IN (41, 105)\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame == BattleVideoMetagames5.RandomMatchupTriple)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame IN (42, 106)\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame == BattleVideoMetagames5.RandomMatchupRotation)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame IN (43, 107)\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame == BattleVideoMetagames5.SearchBattleCompetition)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame BETWEEN 56 AND 59\";\r\n                    hasSearch = true;\r\n                }\r\n                else if (metagame != BattleVideoMetagames5.SearchNone)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Metagame = @metagame\";\r\n                    _params.Add(new MySqlParameter(\"@metagame\", (byte)metagame));\r\n                    hasSearch = true;\r\n                }\r\n\r\n                if (country != 0xff)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Country = @country\";\r\n                    _params.Add(new MySqlParameter(\"@country\", country));\r\n                    hasSearch = true;\r\n                }\r\n\r\n                if (region != 0xff)\r\n                {\r\n                    where += (hasSearch ? \" AND \" : \" WHERE \") + \"Region = @region\";\r\n                    _params.Add(new MySqlParameter(\"@region\", region));\r\n                }\r\n\r\n                sort = \" ORDER BY TimeAdded DESC, id DESC\";\r\n            }\r\n            else if (ranking == BattleVideoRankings5.LinkBattles)\r\n            {\r\n                where = \" WHERE NOT (Metagame BETWEEN 0 AND 4)\";\r\n                sort = \" ORDER BY Hype DESC, TimeAdded DESC, id DESC\";\r\n            }\r\n            else if (ranking == BattleVideoRankings5.SubwayBattles)\r\n            {\r\n                where = \" WHERE Metagame BETWEEN 0 AND 4\";\r\n                sort = \" ORDER BY Hype DESC, TimeAdded DESC, id DESC\";\r\n            }\r\n            else\r\n            {\r\n                sort = \" ORDER BY TimeAdded DESC, id DESC\";\r\n            }\r\n\r\n            _params.Add(new MySqlParameter(\"@count\", count));\r\n\r\n            List<BattleVideoHeader5> results = new List<BattleVideoHeader5>(count);\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT pid, \" +\r\n                \"SerialNumber, Header FROM TerminalBattleVideos5\" + where +\r\n                sort + \" LIMIT @count\",\r\n                _params.ToArray()))\r\n            {\r\n                while (reader.Read())\r\n                    results.Add(BattleVideoHeader5FromReader(reader));\r\n\r\n                reader.Close();\r\n            }\r\n            return results.ToArray();\r\n        }\r\n\r\n        public override BattleVideoHeader5[] BattleVideoSearch5(ushort species, BattleVideoRankings5 ranking, BattleVideoMetagames5 metagame, byte country, byte region, int count)\r\n        {\r\n            return WithTransaction(tran => BattleVideoSearch5(tran, species, ranking, metagame, country, region, count));\r\n        }\r\n\r\n        private BattleVideoHeader5 BattleVideoHeader5FromReader(MySqlDataReader reader)\r\n        {\r\n            byte[] data = new byte[196];\r\n            reader.GetBytes(2, 0, data, 0, 196);\r\n\r\n            return new BattleVideoHeader5(reader.GetInt32(0), reader.GetUInt64(1), data);\r\n        }\r\n\r\n        public BattleVideoRecord5 BattleVideoGet5(MySqlTransaction tran, ulong serial, bool incrementViews = false)\r\n        {\r\n            BattleVideoRecord5 result = null;\r\n            using (var reader = BattleVideoGet(tran, \"TerminalBattleVideos5\", serial, incrementViews))\r\n            {\r\n                if (reader.Read())\r\n                    result = BattleVideo5FromReader(reader);\r\n            }\r\n            return result;\r\n        }\r\n\r\n        public override BattleVideoRecord5 BattleVideoGet5(ulong serial, bool incrementViews = false)\r\n        {\r\n            return WithTransaction(tran => BattleVideoGet5(tran, serial, incrementViews));\r\n        }\r\n\r\n        private BattleVideoRecord5 BattleVideo5FromReader(MySqlDataReader reader)\r\n        {\r\n            byte[] data = new byte[6112];\r\n            reader.GetBytes(3, 0, data, 0, 6112);\r\n            BattleVideoHeader5 header = BattleVideoHeader5FromReader(reader);\r\n\r\n            return new BattleVideoRecord5(header.PID, header.SerialNumber, header, data);\r\n        }\r\n\r\n        public bool BattleVideoFlagSaved5(MySqlTransaction tran, ulong serial)\r\n        {\r\n            DateTime now = DateTime.UtcNow;\r\n            DateTime hypeTime = GetActiveHypeDate(now);\r\n            double hype = HypeDecay(HYPE_SAVED_VIDEO, now, hypeTime);\r\n\r\n            BattleVideoUpdateHypeTimes5(tran, hypeTime);\r\n\r\n            int results = tran.ExecuteNonQuery(\"UPDATE TerminalBattleVideos5 \" +\r\n                \"SET Saves = Saves + 1, Hype = Hype + @hype WHERE SerialNumber = @serial\",\r\n                new MySqlParameter(\"@hype\", hype),\r\n                new MySqlParameter(\"@hype_timestamp\", hypeTime),\r\n                new MySqlParameter(\"@serial\", serial));\r\n\r\n            return results > 0;\r\n        }\r\n\r\n        public override bool BattleVideoFlagSaved5(ulong serial)\r\n        {\r\n            return WithTransaction(tran => BattleVideoFlagSaved5(tran, serial));\r\n        }\r\n\r\n        public ulong BattleVideoCount5(MySqlTransaction tran)\r\n        {\r\n            return Convert.ToUInt64(tran.ExecuteScalar(\"SELECT Count(*) FROM TerminalBattleVideos5\"));\r\n        }\r\n\r\n        public override ulong BattleVideoCount5()\r\n        {\r\n            return WithTransaction(tran => BattleVideoCount5(tran));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Pokedex creation\r\n        private const string INSERT_COLUMNS = \"Name_JA, Name_EN, Name_FR, Name_IT, Name_DE, Name_ES, Name_KO\";\r\n        private const string INSERT_VALUES = \"@name_ja, @name_en, @name_fr, @name_it, @name_de, @name_es, @name_ko\";\r\n        private static string[] m_query_langs = new string[] { \"JA\", \"EN\", \"FR\", \"IT\", \"DE\", \"ES\", \"KO\" };\r\n\r\n        private static void CreateLocalizedStringQueryPieces(LocalizedString s, \r\n            List<MySqlParameter> insertParams, string prefix = \"@name_\")\r\n        {\r\n            foreach (string lang in m_query_langs)\r\n            {\r\n                MySqlParameter param = new MySqlParameter(prefix + lang.ToLowerInvariant(), s.ContainsKey(lang) ? s[lang] : (object)DBNull.Value);\r\n                insertParams.Add(param);\r\n            }\r\n        }\r\n\r\n        private static string CreateLocalizedInsertColumns(string prefix)\r\n        {\r\n            return String.Join(\", \", m_query_langs.Select(lang => prefix + lang).ToArray());\r\n        }\r\n\r\n        private static string CreateLocalizedInsertValues(string prefix)\r\n        {\r\n            return String.Join(\", \", m_query_langs.Select(lang => prefix + lang.ToLowerInvariant()).ToArray());\r\n        }\r\n\r\n        public override void PokedexInsertSpecies(Species s)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n                insertParams.Add(new MySqlParameter(\"@national_dex\", s.NationalDex));\r\n                insertParams.Add(new MySqlParameter(\"@family_id\", s.FamilyID));\r\n                insertParams.Add(new MySqlParameter(\"@growth_rate\", (int)s.GrowthRate));\r\n                insertParams.Add(new MySqlParameter(\"@gender_ratio\", s.GenderRatio));\r\n                insertParams.Add(new MySqlParameter(\"@egg_group_1\", (byte)s.EggGroup1));\r\n                insertParams.Add(new MySqlParameter(\"@egg_group_2\", (byte)s.EggGroup2));\r\n                insertParams.Add(new MySqlParameter(\"@egg_steps\", s.EggSteps));\r\n                insertParams.Add(new MySqlParameter(\"@gender_variations\", s.GenderVariations));\r\n                CreateLocalizedStringQueryPieces(s.Name, insertParams);\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_pokemon (NationalDex, family_id, \" +\r\n                    INSERT_COLUMNS + \", GrowthRate, GenderRatio, EggGroup1, EggGroup2, EggSteps, \" +\r\n                    \"GenderVariations) VALUES (@national_dex, @family_id, \" +\r\n                    INSERT_VALUES + \", @growth_rate, @gender_ratio, @egg_group_1, @egg_group_2, \" +\r\n                    \"@egg_steps, @gender_variations)\", insertParams.ToArray());\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertForm(Form f)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n                insertParams.Add(new MySqlParameter(\"@id\", f.ID));\r\n                insertParams.Add(new MySqlParameter(\"@national_dex\", f.SpeciesID));\r\n                insertParams.Add(new MySqlParameter(\"@form_value\", f.Value));\r\n                insertParams.Add(new MySqlParameter(\"@form_suffix\", f.Suffix));\r\n                insertParams.Add(new MySqlParameter(\"@height\", f.Height));\r\n                insertParams.Add(new MySqlParameter(\"@weight\", f.Weight));\r\n                insertParams.Add(new MySqlParameter(\"@experience\", f.Experience));\r\n                CreateLocalizedStringQueryPieces(f.Name, insertParams);\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_pokemon_forms (id, NationalDex, \" +\r\n                    \"FormValue, \" +\r\n                    INSERT_COLUMNS + \", FormSuffix, Height, Weight, Experience) VALUES (\" +\r\n                    \"@id, @national_dex, @form_value, \" +\r\n                    INSERT_VALUES + \", @form_suffix, @height, @weight, @experience)\", insertParams.ToArray());\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertFormStats(FormStats f)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_pokemon_form_stats \" +\r\n                    \"(form_id, MinGeneration, Type1, Type2, \" +\r\n                    \"BaseHP, BaseAttack, BaseDefense, BaseSpeed, BaseSpAttack, BaseSpDefense, \" +\r\n                    \"RewardHP, RewardAttack, RewardDefense, RewardSpeed, RewardSpAttack, RewardSpDefense) \" +\r\n                    \"VALUES (@form_id, @min_generation, @type1, @type2, \" +\r\n                    \"@base_hp, @base_attack, @base_defense, @base_speed, @base_sp_attack, @base_sp_defense, \" +\r\n                    \"@reward_hp, @reward_attack, @reward_defense, @reward_speed, @reward_sp_attack, @reward_sp_defense)\",\r\n                    new MySqlParameter(\"@form_id\", f.FormID),\r\n                    new MySqlParameter(\"@min_generation\", (int)f.MinGeneration),\r\n                    new MySqlParameter(\"@type1\", f.Type1ID),\r\n                    new MySqlParameter(\"@type2\", f.Type2ID),\r\n                    new MySqlParameter(\"@base_hp\", f.BaseStats.Hp),\r\n                    new MySqlParameter(\"@base_attack\", f.BaseStats.Attack),\r\n                    new MySqlParameter(\"@base_defense\", f.BaseStats.Defense),\r\n                    new MySqlParameter(\"@base_speed\", f.BaseStats.Speed),\r\n                    new MySqlParameter(\"@base_sp_attack\", f.BaseStats.SpecialAttack),\r\n                    new MySqlParameter(\"@base_sp_defense\", f.BaseStats.SpecialDefense),\r\n                    new MySqlParameter(\"@reward_hp\", (byte)f.RewardEvs.Hp),\r\n                    new MySqlParameter(\"@reward_attack\", (byte)f.RewardEvs.Attack),\r\n                    new MySqlParameter(\"@reward_defense\", (byte)f.RewardEvs.Defense),\r\n                    new MySqlParameter(\"@reward_speed\", (byte)f.RewardEvs.Speed),\r\n                    new MySqlParameter(\"@reward_sp_attack\", (byte)f.RewardEvs.SpecialAttack),\r\n                    new MySqlParameter(\"@reward_sp_defense\", (byte)f.RewardEvs.SpecialDefense)\r\n                );\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertFormAbilities(FormAbilities f)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_pokemon_form_abilities \" +\r\n                    \"(form_id, MinGeneration, Ability1, Ability2, HiddenAbility1) \" +\r\n                    \"VALUES (@form_id, @min_generation, @ability1, @ability2, @hidden_ability1)\",\r\n                    new MySqlParameter(\"@form_id\", f.FormID),\r\n                    new MySqlParameter(\"@min_generation\", (int)f.MinGeneration),\r\n                    new MySqlParameter(\"@ability1\", f.Ability1ID == 0 ? (int?)null : f.Ability1ID),\r\n                    new MySqlParameter(\"@ability2\", f.Ability2ID == 0 ? (int?)null : f.Ability2ID),\r\n                    new MySqlParameter(\"@hidden_ability1\", f.HiddenAbility1ID == 0 ? (int?)null : f.HiddenAbility1ID)\r\n                );\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertFamily(Family f)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_pokemon_families \" +\r\n                    \"(id, BasicMale, BasicFemale, BabyMale, BabyFemale, \" +\r\n                    \"Incense, GenderRatio) VALUES (@id, @basic_male, \" +\r\n                    \"@basic_female, @baby_male, @baby_female, @incense, \" +\r\n                    \"@gender_ratio)\",\r\n                    // todo: collapse 0 to null sometimes\r\n                    new MySqlParameter(\"@id\", f.ID),\r\n                    new MySqlParameter(\"@basic_male\", f.BasicMaleID),\r\n                    new MySqlParameter(\"@basic_female\", f.BasicFemaleID),\r\n                    new MySqlParameter(\"@baby_male\", f.BabyMaleID),\r\n                    new MySqlParameter(\"@baby_female\", f.BabyFemaleID),\r\n                    new MySqlParameter(\"@incense\", f.IncenseID),\r\n                    new MySqlParameter(\"@gender_ratio\", f.GenderRatio)\r\n                    );\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertEvolution(Evolution f)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public override void PokedexInsertType(Pokedex.Type t)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n                insertParams.Add(new MySqlParameter(\"@id\", t.ID));\r\n                insertParams.Add(new MySqlParameter(\"@damage_class\", (byte)t.DamageClass));\r\n                CreateLocalizedStringQueryPieces(t.Name, insertParams);\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_types (id, \" +\r\n                    INSERT_COLUMNS + \", DamageClass) VALUES (@id, \" +\r\n                    INSERT_VALUES + \", @damage_class)\", insertParams.ToArray());\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertItem(Item i)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n                insertParams.Add(new MySqlParameter(\"@id\", i.ID));\r\n                insertParams.Add(new MySqlParameter(\"@value3\", i.Value3));\r\n                insertParams.Add(new MySqlParameter(\"@value4\", i.Value4));\r\n                insertParams.Add(new MySqlParameter(\"@value5\", i.Value5));\r\n                insertParams.Add(new MySqlParameter(\"@value6\", i.Value6));\r\n                insertParams.Add(new MySqlParameter(\"@pokeball_value\", i.PokeballValue));\r\n                insertParams.Add(new MySqlParameter(\"@price\", i.Price));\r\n                CreateLocalizedStringQueryPieces(i.Name, insertParams);\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_items (id, Value3, \" +\r\n                    \"Value4, Value5, Value6, PokeballValue, \" + INSERT_COLUMNS + \", Price) VALUES (\" +\r\n                    \"@id, @value3, @value4, @value5, @value6, @pokeball_value, \" + INSERT_VALUES +\r\n                    \", @price)\", insertParams.ToArray());\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertMove(Move m)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n                insertParams.Add(new MySqlParameter(\"@value\", m.ID));\r\n                insertParams.Add(new MySqlParameter(\"@type_id\", m.TypeID));\r\n                insertParams.Add(new MySqlParameter(\"@damage_class\", (int)m.DamageClass));\r\n                insertParams.Add(new MySqlParameter(\"@damage\", m.Damage));\r\n                insertParams.Add(new MySqlParameter(\"@pp\", m.PP));\r\n                insertParams.Add(new MySqlParameter(\"@accuracy\", m.Accuracy));\r\n                insertParams.Add(new MySqlParameter(\"@priority\", m.Priority));\r\n                insertParams.Add(new MySqlParameter(\"@target\", (int)m.Target));\r\n                CreateLocalizedStringQueryPieces(m.Name, insertParams);\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_moves (Value, type_id, \" +\r\n                    \"DamageClass, \" + INSERT_COLUMNS + \", Damage, PP, Accuracy, \" +\r\n                    \"Priority, Target) VALUES (@value, @type_id, @damage_class, \" + \r\n                    INSERT_VALUES + \", @damage, @pp, \" +\r\n                    \"@accuracy, @priority, @target)\", insertParams.ToArray());\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public override void PokedexInsertAbility(Ability a)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n                insertParams.Add(new MySqlParameter(\"@value\", a.Value));\r\n                CreateLocalizedStringQueryPieces(a.Name, insertParams);\r\n\r\n                db.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_abilities (Value, \" +\r\n                    INSERT_COLUMNS + \") VALUES (@value, \" + INSERT_VALUES + \")\",\r\n                    insertParams.ToArray());\r\n\r\n                db.Close();\r\n            }\r\n        }\r\n\r\n        public void PokedexInsertRibbon(MySqlTransaction tran, Ribbon r)\r\n        {\r\n            List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n            insertParams.Add(new MySqlParameter(\"@id\", r.ID));\r\n            insertParams.Add(new MySqlParameter(\"@position3\", r.Position3));\r\n            insertParams.Add(new MySqlParameter(\"@position4\", r.Position4));\r\n            insertParams.Add(new MySqlParameter(\"@position5\", r.Position5));\r\n            insertParams.Add(new MySqlParameter(\"@position6\", r.Position6));\r\n            insertParams.Add(new MySqlParameter(\"@value3\", r.Value3));\r\n            insertParams.Add(new MySqlParameter(\"@value4\", r.Value4));\r\n            insertParams.Add(new MySqlParameter(\"@value5\", r.Value5));\r\n            insertParams.Add(new MySqlParameter(\"@value6\", r.Value6));\r\n            CreateLocalizedStringQueryPieces(r.Name, insertParams);\r\n            CreateLocalizedStringQueryPieces(r.Name, insertParams, \"@description_\");\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_ribbons (ID, \" +\r\n                \"Position3, Position4, Position5, Position6, Value3, Value4, \" +\r\n                \"Value5, Value6, \" + INSERT_COLUMNS + \", \" +\r\n                CreateLocalizedInsertColumns(\"Description_\") + \") VALUES (@id, \" +\r\n                \"@position3, @position4, @position5, @position6, @value3, \" +\r\n                \"@value4, @value5, @value6, \" + INSERT_VALUES + \", \" +\r\n                CreateLocalizedInsertValues(\"@description_\") + \")\", insertParams.ToArray());\r\n        }\r\n\r\n        public override void PokedexInsertRibbon(Ribbon r)\r\n        {\r\n            WithTransaction(tran => PokedexInsertRibbon(tran, r));\r\n        }\r\n\r\n        public void PokedexInsertRegion(MySqlTransaction tran, Region r)\r\n        {\r\n            List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n            insertParams.Add(new MySqlParameter(\"@id\", r.ID));\r\n            CreateLocalizedStringQueryPieces(r.Name, insertParams);\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_regions (ID, \" +\r\n                INSERT_COLUMNS + \") VALUES (@id, \" + INSERT_VALUES + \")\",\r\n                insertParams.ToArray());\r\n        }\r\n\r\n        public override void PokedexInsertRegion(Region r)\r\n        {\r\n            WithTransaction(tran => PokedexInsertRegion(tran, r));\r\n        }\r\n\r\n        public void PokedexInsertLocation(MySqlTransaction tran, Location l)\r\n        {\r\n            List<MySqlParameter> insertParams = new List<MySqlParameter>();\r\n            insertParams.Add(new MySqlParameter(\"@id\", l.ID));\r\n            insertParams.Add(new MySqlParameter(\"@region_id\", l.RegionID));\r\n            insertParams.Add(new MySqlParameter(\"@value3\", l.Value3));\r\n            insertParams.Add(new MySqlParameter(\"@value_colo\", l.ValueColo));\r\n            insertParams.Add(new MySqlParameter(\"@value_xd\", l.ValueXd));\r\n            insertParams.Add(new MySqlParameter(\"@value4\", l.Value4));\r\n            insertParams.Add(new MySqlParameter(\"@value5\", l.Value5));\r\n            insertParams.Add(new MySqlParameter(\"@value6\", l.Value6));\r\n            CreateLocalizedStringQueryPieces(l.Name, insertParams);\r\n\r\n            tran.ExecuteNonQuery(\"INSERT INTO pkmncf_pokedex_locations (ID, region_id, \" +\r\n                \"Value3, Value_Colo, Value_XD, Value4, Value5, Value6, \" + INSERT_COLUMNS + \r\n                \") VALUES (@id, @region_id, @value3, @value_colo, @value_xd, @value4, @value5, @value6, \" +\r\n                INSERT_VALUES + \")\",\r\n                insertParams.ToArray());\r\n        }\r\n\r\n        public override void PokedexInsertLocation(Location l)\r\n        {\r\n            WithTransaction(tran => PokedexInsertLocation(tran, l));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Pokedex retrieval\r\n        private List<T> ReaderToList<T>(MySqlDataReader reader, Pokedex.Pokedex pokedex, Func<T> ctor) \r\n            where T : PokedexRecordBase\r\n        {\r\n            List<T> result = new List<T>();\r\n            while (reader.Read())\r\n            {\r\n                result.Add(ctor());\r\n            }\r\n            return result;\r\n        }\r\n\r\n        public override List<Species> PokedexGetAllSpecies(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"NationalDex, family_id, \" + INSERT_COLUMNS + \", GrowthRate, \" +\r\n                    \"GenderRatio, EggGroup1, EggGroup2, EggSteps, GenderVariations \" +\r\n                    \"FROM pkmncf_pokedex_pokemon\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Species(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Form> PokedexGetAllForms(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"id, NationalDex, FormValue, \" + INSERT_COLUMNS + \", FormSuffix, \" +\r\n                    \"Height, Weight, Experience \" +\r\n                    \"FROM pkmncf_pokedex_pokemon_forms\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Form(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<FormStats> PokedexGetAllFormStats(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"form_id, MinGeneration, Type1, Type2, BaseHP, BaseAttack, \" +\r\n                    \"BaseDefense, BaseSpeed, BaseSpAttack, BaseSpDefense, RewardHP, \" +\r\n                    \"RewardAttack, RewardDefense, RewardSpeed, RewardSpAttack, RewardSpDefense \" +\r\n                    \"FROM pkmncf_pokedex_pokemon_form_stats\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new FormStats(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<FormAbilities> PokedexGetAllFormAbilities(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"form_id, MinGeneration, Ability1, Ability2, HiddenAbility1 \" +\r\n                    \"FROM pkmncf_pokedex_pokemon_form_abilities\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new FormAbilities(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Family> PokedexGetAllFamilies(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"id, BasicMale, BasicFemale, BabyMale, BabyFemale, Incense, GenderRatio \" +\r\n                    \"FROM pkmncf_pokedex_pokemon_families\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Family(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Evolution> PokedexGetAllEvolutions(Pokedex.Pokedex pokedex)\r\n        {\r\n            // todo\r\n            throw new NotImplementedException();\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"id \" +\r\n                    \"FROM pkmncf_pokedex_pokemon_evolutions\"))\r\n                {\r\n                    //return ReaderToList(reader, pokedex, () => new Evolution(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Pokedex.Type> PokedexGetAllTypes(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"id, \" + INSERT_COLUMNS + \", DamageClass \" +\r\n                    \"FROM pkmncf_pokedex_types\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Pokedex.Type(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Item> PokedexGetAllItems(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"id, Value3, Value4, Value5, Value6, PokeballValue, \" + INSERT_COLUMNS +\r\n                    \", Price \" +\r\n                    \"FROM pkmncf_pokedex_items\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Item(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Move> PokedexGetAllMoves(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"Value, type_id, DamageClass, \" + INSERT_COLUMNS + \", Damage, \" +\r\n                    \"PP, Accuracy, Priority, Target \" +\r\n                    \"FROM pkmncf_pokedex_moves\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Move(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public override List<Ability> PokedexGetAllAbilities(Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlConnection db = CreateConnection())\r\n            {\r\n                db.Open();\r\n\r\n                using (MySqlDataReader reader = (MySqlDataReader)db.ExecuteReader(\"SELECT \" +\r\n                    \"Value, \" + INSERT_COLUMNS + \r\n                    \" FROM pkmncf_pokedex_abilities\"))\r\n                {\r\n                    return ReaderToList(reader, pokedex, () => new Ability(pokedex, reader));\r\n                }\r\n            }\r\n        }\r\n\r\n        public List<Ribbon> PokedexGetAllRibbons(MySqlTransaction tran, Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT \" +\r\n                \"ID, Position3, Position4, Position5, Position6, Value3, \" +\r\n                \"Value4, Value5, Value6, \" + INSERT_COLUMNS + \", \" + \r\n                CreateLocalizedInsertColumns(\"Description_\") + \" FROM pkmncf_pokedex_ribbons\"))\r\n            {\r\n                return ReaderToList(reader, pokedex, () => new Ribbon(pokedex, reader));\r\n            }\r\n        }\r\n\r\n        public override List<Ribbon> PokedexGetAllRibbons(Pokedex.Pokedex pokedex)\r\n        {\r\n            return WithTransaction(tran => PokedexGetAllRibbons(tran, pokedex));\r\n        }\r\n\r\n        public List<Region> PokedexGetAllRegions(MySqlTransaction tran, Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT \" +\r\n                \"ID, \" + INSERT_COLUMNS + \" FROM pkmncf_pokedex_regions\"))\r\n            {\r\n                return ReaderToList(reader, pokedex, () => new Region(pokedex, reader));\r\n            }\r\n        }\r\n\r\n        public override List<Region> PokedexGetAllRegions(Pokedex.Pokedex pokedex)\r\n        {\r\n            return WithTransaction(tran => PokedexGetAllRegions(tran, pokedex));\r\n        }\r\n\r\n        public List<Location> PokedexGetAllLocations(MySqlTransaction tran, Pokedex.Pokedex pokedex)\r\n        {\r\n            using (MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader(\"SELECT \" +\r\n                \"id, region_id, Value3, Value_Colo, Value_XD, Value4, Value5, Value6, \" +\r\n                INSERT_COLUMNS + \" FROM pkmncf_pokedex_locations\"))\r\n            {\r\n                return ReaderToList(reader, pokedex, () => new Location(pokedex, reader));\r\n            }\r\n        }\r\n\r\n        public override List<Location> PokedexGetAllLocations(Pokedex.Pokedex pokedex)\r\n        {\r\n            return WithTransaction(tran => PokedexGetAllLocations(tran, pokedex));\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "library/Data/DataSqlite.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Data;\r\nusing System.Data.SQLite;\r\n\r\nnamespace PkmnFoundations.Data\r\n{\r\n    // todo\r\n    public class DataSqlite// : DataAbstract\r\n    {\r\n        public SQLiteConnection CreateConnection()\r\n        {\r\n            return CreateConnection(DefaultFilename);\r\n        }\r\n\r\n        public SQLiteConnection CreateConnection(string filename)\r\n        {\r\n            if (filename.Contains('\\\"')) throw new ArgumentException();\r\n            return new SQLiteConnection(\"Data Source=\" + filename + \";Version=3;\");\r\n        }\r\n\r\n        public string DefaultFilename = \"pokedex.sqlite\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "library/Data/Database.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Data;\nusing PkmnFoundations.Structures;\nusing System.Configuration;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.Data\n{\n    public abstract class Database\n    {\n        #region Initialization\n        private static Database m_instance;\n\n        public static Database Instance\n        {\n            get\n            {\n                // fixme: this is not thread safe\n                if (m_instance == null)\n                {\n                    m_instance = CreateInstance();\n                }\n                return m_instance;\n            }\n        }\n\n        public static Database CreateInstance()\n        {\n            ConnectionStringSettings connStr = ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"];\n            if (connStr == null) throw new NotSupportedException(\"No database connection string provided. Please add one in web.config or app.config.\");\n\n            return CreateInstance(connStr);\n        }\n\n        public static Database CreateInstance(ConnectionStringSettings connStr)\n        {\n            if (connStr == null) throw new ArgumentNullException(\"connStr\");\n\n            return CreateInstance(connStr.ConnectionString, connStr.ProviderName);\n        }\n\n        public static Database CreateInstance(string connStr, string provider)\n        {\n            if (connStr == null) throw new ArgumentNullException(\"connStr\");\n            if (provider == null) throw new ArgumentNullException(\"provider\");\n\n            switch (provider)\n            {\n                case \"MySql.Data.MySqlClient\":\n                    return new DataMysql(connStr);\n                default:\n                    throw new NotSupportedException(\"Database provider not supported.\");\n            }\n        }\n        #endregion\n\n        #region Utility\n\n        internal static DateTime DateLerp(DateTime first, DateTime second, double weight)\n        {\n            TimeSpan diff = second - first;\n            return first + new TimeSpan((long)(diff.Ticks * weight));\n        }\n\n        internal const double HYPE_DECAY_DAYS = 7.0d;\n        internal const double HYPE_DECAY_RATE = -0.09902102579427790134531887449403; // -ln(2)/HYPE_DECAY_DAYS\n        internal const double HYPE_NEW_VIDEO = 5.0d;\n        internal const double HYPE_WATCHED_VIDEO = 1.0d;\n        internal const double HYPE_SAVED_VIDEO = 1.0d; // Note that when the client wants to save, it will call both Get and FlagSaved\n\n        /// <summary>\n        /// Calculates how much Hype has changed between two times. This could be \n        /// </summary>\n        /// <param name=\"oldHype\"></param>\n        /// <param name=\"oldDate\"></param>\n        /// <param name=\"newDate\"></param>\n        /// <returns></returns>\n        internal static double HypeDecay(double oldHype, DateTime oldDate, DateTime newDate)\n        {\n            TimeSpan ts = newDate - oldDate;\n            double decays = HYPE_DECAY_RATE * ts.Ticks / TimeSpan.FromDays(1).Ticks;\n            return Math.Exp(decays) * oldHype; // e^(days*-ln(2)/7), should decay by half each week.\n        }\n\n        /// <summary>\n        /// Gets the desired date to use for hype ratings. Changes exactly once a week.\n        /// </summary>\n        /// <param name=\"now\"></param>\n        /// <returns></returns>\n        internal static DateTime GetActiveHypeDate(DateTime now)\n        {\n            DateTime dateNow = now.Date;\n            return dateNow.AddDays(-(int)dateNow.DayOfWeek);\n        }\n\n        internal const double GTS_LOCK_DURATION = 60.0d;\n\n        #endregion\n\n        #region GTS 4\n        public const int GTS_VERSION_4 = 0;\n\n        public abstract GtsRecord4 GtsDataForUser4(Pokedex.Pokedex pokedex, int pid);\n        public abstract GtsRecord4 GtsGetRecord4(Pokedex.Pokedex pokedex, long tradeId, bool isExchanged, bool allowHistory);\n\n        public abstract bool GtsDepositPokemon4(GtsRecord4 record);\n\n        public abstract bool GtsDeletePokemon4(int pid);\n\n        public abstract bool GtsLockPokemon4(ulong tradeId, int partner_pid);\n        public abstract bool GtsCheckLockStatus4(ulong tradeId, int partner_pid);\n\n        public abstract bool GtsTradePokemon4(int pidSrc, int pidDest);\n        public abstract bool GtsTradePokemon4(GtsRecord4 upload, GtsRecord4 result, int partner_pid);\n\n        public abstract GtsRecord4[] GtsSearch4(Pokedex.Pokedex pokedex, int pid, ushort species, Genders gender, byte minLevel, byte maxLevel, byte country, int count);\n        public abstract int GtsAvailablePokemon4();\n\n        public abstract void GtsSetLastSearch4(int pid);\n        public abstract DateTime? GtsGetLastSearch4(int pid);\n        #endregion\n\n        #region Battle Tower 4\n        public abstract ulong BattleTowerUpdateRecord4(BattleTowerRecord4 record);\n        public abstract ulong BattleTowerAddLeader4(BattleTowerRecord4 record);\n        public abstract BattleTowerRecord4[] BattleTowerGetOpponents4(Pokedex.Pokedex pokedex, int pid, byte rank, byte roomNum);\n        public abstract BattleTowerProfile4[] BattleTowerGetLeaders4(Pokedex.Pokedex pokedex, byte rank, byte roomNum);\n        #endregion\n\n        #region Wi-fi Plaza\n        public abstract TrainerProfilePlaza PlazaGetProfile(int pid);\n        public abstract bool PlazaSetProfile(TrainerProfilePlaza profile);\n        #endregion\n\n        #region Other Gamestats 4\n        public abstract bool GamestatsBumpProfile4(int pid, string ip_address);\n        public abstract bool GamestatsSetProfile4(TrainerProfile4 profile);\n        public abstract TrainerProfile4 GamestatsGetProfile4(int pid);\n        #endregion\n\n        #region Bans\n        public abstract BanStatus CheckBanStatus(int pid);\n        public abstract BanStatus CheckBanStatus(byte[] mac_address);\n        public abstract BanStatus CheckBanStatus(string ip_address);\n        public abstract BanStatus CheckBanStatus(TrainerProfileBase profile);\n        public abstract BanStatus CheckBanStatus(uint ip_address);\n\n        public abstract void AddBan(int pid, BanStatus status);\n        public abstract void AddBan(byte[] mac_address, BanStatus status);\n        public abstract void AddBan(string ip_address, BanStatus status);\n        #endregion\n\n        #region GTS 5\n        public const int GTS_VERSION_5 = 0;\n\n        public abstract GtsRecord5 GtsDataForUser5(Pokedex.Pokedex pokedex, int pid);\n        public abstract GtsRecord5 GtsGetRecord5(Pokedex.Pokedex pokedex, long tradeId, bool isExchanged, bool allowHistory);\n\n        public abstract bool GtsDepositPokemon5(GtsRecord5 record);\n\n        public abstract bool GtsDeletePokemon5(int pid);\n\n        public abstract bool GtsLockPokemon5(ulong tradeId, int partner_pid);\n        public abstract bool GtsCheckLockStatus5(ulong tradeId, int partner_pid);\n\n        public abstract bool GtsTradePokemon5(int pidSrc, int pidDest);\n        public abstract bool GtsTradePokemon5(GtsRecord5 upload, GtsRecord5 result, int partner_pid);\n\n        public abstract GtsRecord5[] GtsSearch5(Pokedex.Pokedex pokedex, int pid, ushort species, Genders gender, byte minLevel, byte maxLevel, byte country, int count);\n        public abstract int GtsAvailablePokemon5();\n\n        public abstract void GtsSetLastSearch5(int pid);\n        public abstract DateTime ? GtsGetLastSearch5(int pid);\n        #endregion\n\n        #region Other Gamestats 5\n        public abstract bool GamestatsSetProfile5(TrainerProfile5 profile);\n        public abstract TrainerProfile5 GamestatsGetProfile5(int pid);\n        #endregion\n\n        #region Battle Subway 5\n        public abstract ulong BattleSubwayUpdateRecord5(BattleSubwayRecord5 record);\n        public abstract ulong BattleSubwayAddLeader5(BattleSubwayRecord5 record);\n        public abstract BattleSubwayRecord5[] BattleSubwayGetOpponents5(Pokedex.Pokedex pokedex, int pid, byte rank, byte roomNum);\n        public abstract BattleSubwayProfile5[] BattleSubwayGetLeaders5(Pokedex.Pokedex pokedex, byte rank, byte roomNum);\n        #endregion\n\n        #region Global Terminal 4\n        public const int DRESSUP_VERSION_4 = 1;\n        public const int BOX_VERSION_4 = 1;\n        public const int BATTLEVIDEO_VERSION_4 = 1;\n\n        public abstract ulong DressupUpload4(DressupRecord4 record);\n        public abstract DressupRecord4[] DressupSearch4(ushort species, int count);\n\n        public abstract ulong BoxUpload4(BoxRecord4 record);\n        public abstract BoxRecord4[] BoxSearch4(BoxLabels4 label, int count);\n\n        public abstract ulong BattleVideoUpload4(BattleVideoRecord4 record);\n        public abstract BattleVideoHeader4[] BattleVideoSearch4(ushort species, BattleVideoRankings4 ranking, BattleVideoMetagames4 metagame, byte country, byte region, int count);\n        public abstract BattleVideoRecord4 BattleVideoGet4(ulong serial, bool incrementViews = false);\n        public abstract bool BattleVideoFlagSaved4(ulong serial);\n\n        public abstract ulong BattleVideoCount4();\n\n        /// <summary>\n        /// Instructs the database that the provided datetime is now active.\n        /// If the new datetime is outside the active leaderboard's datetime\n        /// range, a new leaderboard should be initialized.\n        /// </summary>\n        /// <param name=\"date\"></param>\n        /// <returns>True if it began a new leaderboard</returns>\n        public abstract bool TrainerRankingsPerformRollover();\n\n        /// <summary>\n        /// Gets the three record types being collected for the active leaderboard.\n        /// </summary>\n        /// <returns>RecordTypes</returns>\n        public abstract IList<TrainerRankingsRecordTypes> TrainerRankingsGetActiveRecordTypes();\n\n        /// <summary>\n        /// Submits trainer rankings data for one player and populates the active leaderboard with it.\n        /// </summary>\n        /// <param name=\"submission\"></param>\n        public abstract void TrainerRankingsSubmit(TrainerRankingsSubmission submission);\n\n        /// <summary>\n        /// Gets past reports, sorted descending, falling within a specified date range.\n        /// </summary>\n        /// <param name=\"start\">Datetime during which the oldest returned leaderboard was active</param>\n        /// <param name=\"end\">Datetime during which the newest returned leaderboard was active</param>\n        /// <param name=\"limit\">Limit on the number of results or less than 1 for unlimited</param>\n        /// <returns>Reports</returns>\n        public abstract TrainerRankingsReport[] TrainerRankingsGetReport(DateTime start, DateTime end, int limit);\n\n        /// <summary>\n        /// Gets past reports, sorted descending, falling within a specified date range.\n        /// </summary>\n        /// <param name=\"start\">Datetime during which the oldest returned leaderboard was active</param>\n        /// <param name=\"end\">Datetime during which the newest returned leaderboard was active</param>\n        /// <returns>Reports</returns>\n        public TrainerRankingsReport[] TrainerRankingsGetReport(DateTime start, DateTime end)\n        {\n            return TrainerRankingsGetReport(start, end, 0);\n        }\n\n        /// <summary>\n        /// Gets the single report which was active during the specified date.\n        /// </summary>\n        /// <param name=\"during\"></param>\n        /// <returns>Report</returns>\n        public TrainerRankingsReport TrainerRankingsGetReport(DateTime during)\n        {\n            return TrainerRankingsGetReport(during, during, 1).FirstOrDefault();\n        }\n\n        /// <summary>\n        /// Gets the most recently finished report\n        /// </summary>\n        /// <returns>Report</returns>\n        public TrainerRankingsReport TrainerRankingsGetReport()\n        {\n            return TrainerRankingsGetReport(DateTime.MinValue, DateTime.UtcNow, 1).FirstOrDefault();\n        }\n\n        /// <summary>\n        /// Gets the currently active, incomplete report.\n        /// </summary>\n        /// <returns></returns>\n        public abstract TrainerRankingsReport TrainerRankingsGetPendingReport();\n\n        #endregion\n\n        #region Global Terminal 5\n        public const int MUSICAL_VERSION_5 = 1;\n        public const int BATTLEVIDEO_VERSION_5 = 1;\n\n        public abstract ulong MusicalUpload5(MusicalRecord5 record);\n        public abstract MusicalRecord5[] MusicalSearch5(ushort species, int count);\n\n        public abstract ulong BattleVideoUpload5(BattleVideoRecord5 record);\n        public abstract BattleVideoHeader5[] BattleVideoSearch5(ushort species, BattleVideoRankings5 ranking, BattleVideoMetagames5 metagame, byte country, byte region, int count);\n        public abstract BattleVideoRecord5 BattleVideoGet5(ulong serial, bool incrementViews = false);\n        public abstract bool BattleVideoFlagSaved5(ulong serial);\n\n        public abstract ulong BattleVideoCount5();\n        #endregion\n\n        #region Pokedex creation\n        public abstract void PokedexInsertSpecies(Species s);\n        public abstract void PokedexInsertForm(Form f);\n        public abstract void PokedexInsertFormStats(FormStats f);\n        public abstract void PokedexInsertFormAbilities(FormAbilities f);\n        public abstract void PokedexInsertFamily(Family f);\n        public abstract void PokedexInsertEvolution(Evolution f);\n\n        public abstract void PokedexInsertType(PkmnFoundations.Pokedex.Type t);\n        public abstract void PokedexInsertItem(Item i);\n        public abstract void PokedexInsertMove(Move m);\n        public abstract void PokedexInsertAbility(Ability a);\n        public abstract void PokedexInsertRibbon(Ribbon r);\n\n        public abstract void PokedexInsertRegion(Region r);\n        public abstract void PokedexInsertLocation(Location l);\n\n        #endregion\n\n        #region Pokedex retrieval\n        public abstract List<Species> PokedexGetAllSpecies(Pokedex.Pokedex pokedex);\n        public abstract List<Form> PokedexGetAllForms(Pokedex.Pokedex pokedex);\n        public abstract List<FormStats> PokedexGetAllFormStats(Pokedex.Pokedex pokedex);\n        public abstract List<FormAbilities> PokedexGetAllFormAbilities(Pokedex.Pokedex pokedex);\n        public abstract List<Family> PokedexGetAllFamilies(Pokedex.Pokedex pokedex);\n        public abstract List<Evolution> PokedexGetAllEvolutions(Pokedex.Pokedex pokedex);\n\n        public abstract List<Pokedex.Type> PokedexGetAllTypes(Pokedex.Pokedex pokedex);\n        public abstract List<Item> PokedexGetAllItems(Pokedex.Pokedex pokedex);\n        public abstract List<Move> PokedexGetAllMoves(Pokedex.Pokedex pokedex);\n        public abstract List<Ability> PokedexGetAllAbilities(Pokedex.Pokedex pokedex);\n        public abstract List<Ribbon> PokedexGetAllRibbons(Pokedex.Pokedex pokedex);\n\n        public abstract List<Region> PokedexGetAllRegions(Pokedex.Pokedex pokedex);\n        public abstract List<Location> PokedexGetAllLocations(Pokedex.Pokedex pokedex);\n        #endregion\n    }\n}\n"
  },
  {
    "path": "library/Data/DatabaseExtender.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Data;\r\nusing System.Data.Common;\r\nusing System.IO;\r\n\r\nnamespace PkmnFoundations.Data\r\n{\r\n    /// <summary>\r\n    /// Provides extension and convenience methods for working with ADO.NET databases.\r\n    /// </summary>\r\n    public static class DatabaseExtender\r\n    {\r\n        #region Command Execution\r\n        /// <summary>\r\n        /// Runs a command and returns a DataTable containing its results.\r\n        /// </summary>\r\n        /// <param name=\"cmd\">Command already initialized with an open connection</param>\r\n        public static DataTable ExecuteDataTable(this DbCommand cmd)\r\n        {\r\n            IDataReader reader = cmd.ExecuteReader();\r\n            DataTable result = new DataTable();\r\n            result.Load(reader);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a DataTable containing its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static DataTable ExecuteDataTable(this DbConnection db, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            IDataReader reader = db.ExecuteReader(sqlstr, _params);\r\n            DataTable result = new DataTable();\r\n            result.Load(reader);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a DataTable containing its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static DataTable ExecuteDataTable(this DbConnection db, string sqlstr, IEnumerable<IDataParameter> _params)\r\n        {\r\n            IDataReader reader = db.ExecuteReader(sqlstr, _params.ToArray());\r\n            DataTable result = new DataTable();\r\n            result.Load(reader);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a DataTable containing its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static DataTable ExecuteDataTable(this DbTransaction tran, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            IDataReader reader = tran.ExecuteReader(sqlstr, _params);\r\n            DataTable result = new DataTable();\r\n            result.Load(reader);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a DataTable containing its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static DataTable ExecuteDataTable(this DbTransaction tran, string sqlstr, IEnumerable<IDataParameter> _params)\r\n        {\r\n            IDataReader reader = tran.ExecuteReader(sqlstr, _params.ToArray());\r\n            DataTable result = new DataTable();\r\n            result.Load(reader);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a reader that iterates its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static IDataReader ExecuteReader(this DbConnection db, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            // hooray DbConnection provides a command factory\r\n            DbCommand cmd = db.CreateCommand();\r\n            cmd.CommandText = sqlstr;\r\n            // fixme: catch \"System.ArgumentException: The SqlParameter is already contained \r\n            // by another SqlParameterCollection.\" and add a clone instead\r\n            cmd.Parameters.AddRange(_params);\r\n            return cmd.ExecuteReader();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a reader that iterates its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static IDataReader ExecuteReader(this DbConnection db, string sqlstr, IEnumerable<IDataParameter> _params)\r\n        {\r\n            return db.ExecuteReader(sqlstr, _params.ToArray());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a reader that iterates its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static IDataReader ExecuteReader(this DbTransaction tran, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            // hooray DbConnection provides a command factory\r\n            DbCommand cmd = tran.Connection.CreateCommand();\r\n            cmd.CommandText = sqlstr;\r\n            cmd.Transaction = tran;\r\n            cmd.Parameters.AddRange(_params);\r\n            return cmd.ExecuteReader();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns a reader that iterates its results.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static IDataReader ExecuteReader(this DbTransaction tran, string sqlstr, IEnumerable<IDataParameter> _params)\r\n        {\r\n            return tran.ExecuteReader(sqlstr, _params.ToArray());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns the first column of the first row in the query.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static object ExecuteScalar(this DbConnection db, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            DbCommand cmd = db.CreateCommand();\r\n            cmd.CommandText = sqlstr;\r\n            cmd.Parameters.AddRange(_params);\r\n            return cmd.ExecuteScalar();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns the number of rows affected, subject to the usual quirkiness of ExecuteNonQuery.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static int ExecuteNonQuery(this DbConnection db, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            DbCommand cmd = db.CreateCommand();\r\n            cmd.CommandText = sqlstr;\r\n            cmd.Parameters.AddRange(_params);\r\n            return cmd.ExecuteNonQuery();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns the first column of the first row in the query.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static object ExecuteScalar(this DbTransaction tran, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            DbCommand cmd = tran.Connection.CreateCommand();\r\n            cmd.CommandText = sqlstr;\r\n            cmd.Transaction = tran;\r\n            cmd.Parameters.AddRange(_params);\r\n            return cmd.ExecuteScalar();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Runs a command and returns the number of rows affected, subject to the usual quirkiness of ExecuteNonQuery.\r\n        /// </summary>\r\n        /// <param name=\"db\">Open data connection</param>\r\n        /// <param name=\"sqlstr\">SQL string</param>\r\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\r\n        public static int ExecuteNonQuery(this DbTransaction tran, string sqlstr, params IDataParameter[] _params)\r\n        {\r\n            DbCommand cmd = tran.Connection.CreateCommand();\r\n            cmd.CommandText = sqlstr;\r\n            cmd.Transaction = tran;\r\n            cmd.Parameters.AddRange(_params);\r\n            return cmd.ExecuteNonQuery();\r\n        }\r\n        #endregion\r\n\r\n        #region DataReader convenience\r\n        /// <summary>\r\n        /// Obtains a string value or returns a default value if null.\r\n        /// </summary>\r\n        /// <param name=\"reader\">Active reader with data</param>\r\n        /// <param name=\"column\">Column ordinal</param>\r\n        /// <param name=\"_default\">Default value</param>\r\n        /// <returns></returns>\r\n        public static string GetStringOrDefault(this IDataReader reader, int column, string _default)\r\n        {\r\n            return reader.IsDBNull(column) ? _default : reader.GetString(column);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Obtains a string value or returns an empty string if null.\r\n        /// </summary>\r\n        /// <param name=\"reader\">Active reader with data</param>\r\n        /// <param name=\"column\">Column ordinal</param>\r\n        /// <returns></returns>\r\n        public static string GetStringOrDefault(this IDataReader reader, int column)\r\n        {\r\n            return reader.IsDBNull(column) ? \"\" : reader.GetString(column);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Obtains a string value or returns a default value if null.\r\n        /// </summary>\r\n        /// <param name=\"reader\">Active reader with data</param>\r\n        /// <param name=\"column\">Column name</param>\r\n        /// <param name=\"_default\">Default value</param>\r\n        /// <returns></returns>\r\n        public static string GetStringOrDefault(this IDataReader reader, string column, string _default)\r\n        {\r\n            return (reader[column] is DBNull) ? _default : (string)reader[column];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Obtains a string value or returns an empty string if null.\r\n        /// </summary>\r\n        /// <param name=\"reader\">Active reader with data</param>\r\n        /// <param name=\"column\">Column name</param>\r\n        /// <returns></returns>\r\n        public static string GetStringOrDefault(this IDataReader reader, string column)\r\n        {\r\n            return (reader[column] is DBNull) ? \"\" : (string)reader[column];\r\n        }\r\n\r\n        public static void GetBytes(this IDataReader reader, string column, long fieldOffset, byte[] buffer, int bufferOffset, int length)\r\n        {\r\n            reader.GetBytes(reader.GetOrdinal(column), fieldOffset, buffer, bufferOffset, length);\r\n        }\r\n\r\n        public static byte[] GetByteArray(this IDataReader reader, int column)\r\n        {\r\n            // optimized version of http://msdn.microsoft.com/en-us/library/87z0hy49%28v=vs.110%29.aspx\r\n\r\n            MemoryStream m = new MemoryStream();\r\n            const int BUFFER_LENGTH = 256;\r\n            byte[] buffer = new byte[BUFFER_LENGTH];\r\n\r\n            long progress = 0;\r\n            long lastProgress;\r\n\r\n            do\r\n            {\r\n                lastProgress = reader.GetBytes(column, progress, buffer, 0, BUFFER_LENGTH);\r\n                m.Write(buffer, 0, (int)lastProgress);\r\n                progress += lastProgress;\r\n\r\n            } while (lastProgress == BUFFER_LENGTH);\r\n\r\n            m.Flush();\r\n            return m.GetBuffer();\r\n        }\r\n\r\n        public static byte[] GetByteArray(this IDataReader reader, int column, int length)\r\n        {\r\n            byte[] result = new byte[length];\r\n            reader.GetBytes(column, 0, result, 0, length);\r\n            return result;\r\n        }\r\n\r\n        public static byte[] GetByteArray(this IDataReader reader, string column)\r\n        {\r\n            return GetByteArray(reader, reader.GetOrdinal(column));\r\n        }\r\n\r\n        public static byte[] GetByteArray(this IDataReader reader, string column, int length)\r\n        {\r\n            return GetByteArray(reader, reader.GetOrdinal(column), length);\r\n        }\r\n\r\n        public static bool IsDBNull(this IDataReader reader, string column)\r\n        {\r\n            return reader.IsDBNull(reader.GetOrdinal(column));\r\n        }\r\n        #endregion\r\n\r\n        public static T Cast<T>(object value)\r\n        {\r\n            if (value is DBNull) value = null;\r\n            return (T)value; // Allow InvalidCastException to escape.\r\n        }\r\n\r\n        public static List<T> Collect<T>(this IDataReader reader, Func<IDataRecord, T> collector)\r\n        {\r\n            List<T> result = new List<T>();\r\n\r\n            while (reader.Read())\r\n            {\r\n                result.Add(collector(reader));\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        public static List<T> ExecuteCollection<T>(this DbConnection conn, string sqlstr, Func<IDataRecord, T> collector, params IDataParameter[] _params)\r\n        {\r\n            return conn.ExecuteReader(sqlstr, _params).Collect(collector);\r\n        }\r\n\r\n        public static List<T> ExecuteCollection<T>(this DbTransaction tran, string sqlstr, Func<IDataRecord, T> collector, params IDataParameter[] _params)\r\n        {\r\n            return tran.ExecuteReader(sqlstr, _params).Collect(collector);\r\n        }\r\n\r\n        public static List<T> ExecuteCollection<T>(this DbCommand cmd, Func<IDataRecord, T> collector)\r\n        {\r\n            return cmd.ExecuteReader().Collect(collector);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "library/Data/MySqlDatabaseExtender.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing MySql.Data.MySqlClient;\n\nnamespace PkmnFoundations.Data\n{\n    public static class MySqlDatabaseExtender\n    {\n        // I can't find anything like a \"parameter factory\" in ADO.NET nor a virutal clone method,\n        // so we need an implementation of these for each database engine.\n\n        /// <summary>\n        /// Creates a clone of the SqlParameter collection\n        /// </summary>\n        /// <param name=\"collection\">Collection to be cloned</param>\n        public static MySqlParameter[] CloneParameters(this IEnumerable<MySqlParameter> collection)\n        {\n            int count = collection.Count();\n            MySqlParameter[] result = new MySqlParameter[count];\n\n            int x = 0;\n            foreach (MySqlParameter p in collection)\n            {\n                result[x] = p.CloneParameter();\n                x++;\n            }\n\n            return result;\n        }\n\n        public static MySqlParameter CloneParameter(this MySqlParameter param)\n        {\n            MySqlParameter result = new MySqlParameter(param.ParameterName, \n                (MySqlDbType)param.DbType, param.Size, param.Direction, \n                param.IsNullable, param.Precision, param.Scale, \n                param.SourceColumn, param.SourceVersion, param.Value);\n            result.DbType = param.DbType;\n            return result;\n        }\n\n        /// <summary>\n        /// Runs a proc and returns its return value.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"return_type\">Return value's expected type</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static object ExecuteProcedure(this MySqlConnection db, string name, MySqlDbType return_type, params MySqlParameter[] _params)\n        {\n            return ExecuteProcedureInternal(db.CreateCommand(), name, return_type, _params);\n        }\n\n        /// <summary>\n        /// Runs a proc.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static int ExecuteProcedure(this MySqlConnection db, string name, params MySqlParameter[] _params)\n        {\n            MySqlCommand cmd = db.CreateCommand();\n            cmd.CommandText = name;\n            cmd.CommandType = CommandType.StoredProcedure;\n            cmd.Parameters.AddRange(_params);\n            return cmd.ExecuteNonQuery();\n        }\n\n        /// <summary>\n        /// Runs a proc and returns its return value.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"return_type\">Return value's expected type</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static object ExecuteProcedure(this MySqlTransaction tran, string name, MySqlDbType return_type, params MySqlParameter[] _params)\n        {\n            MySqlCommand cmd = tran.Connection.CreateCommand();\n            cmd.Transaction = tran;\n            return ExecuteProcedureInternal(cmd, name, return_type, _params);\n        }\n\n        /// <summary>\n        /// Runs a proc.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static int ExecuteProcedure(this MySqlTransaction tran, string name, params MySqlParameter[] _params)\n        {\n            MySqlCommand cmd = tran.Connection.CreateCommand();\n            cmd.CommandText = name;\n            cmd.Transaction = tran;\n            cmd.CommandType = CommandType.StoredProcedure;\n            cmd.Parameters.AddRange(_params);\n            return cmd.ExecuteNonQuery();\n        }\n\n        private static object ExecuteProcedureInternal(MySqlCommand cmd, string name, MySqlDbType return_type, MySqlParameter[] _params)\n        {\n            cmd.CommandText = name;\n            cmd.CommandType = CommandType.StoredProcedure;\n            cmd.Parameters.AddRange(_params);\n            string pname = \"result\";\n            while (cmd.Parameters.Contains(\"@\" + pname)) pname = \"x\" + pname;\n            pname = \"@\" + pname;\n            MySqlParameter p = new MySqlParameter(pname, return_type);\n            p.Direction = ParameterDirection.ReturnValue;\n            cmd.Parameters.Add(p);\n            cmd.ExecuteNonQuery();\n            return cmd.Parameters[pname].Value;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Data/SqlDatabaseExtender.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Data\n{\n    public static class SqlDatabaseExtender\n    {\n        // I can't find anything like a \"parameter factory\" in ADO.NET nor a virutal clone method,\n        // so we need an implementation of these for each database engine.\n\n        /// <summary>\n        /// Creates a clone of the SqlParameter collection\n        /// </summary>\n        /// <param name=\"collection\">Collection to be cloned</param>\n        public static SqlParameter[] CloneParameters(this IEnumerable<SqlParameter> collection)\n        {\n            int count = collection.Count();\n            SqlParameter[] result = new SqlParameter[count];\n\n            int x = 0;\n            foreach (SqlParameter p in collection)\n            {\n                SqlParameter param = new SqlParameter(p.ParameterName, (SqlDbType)p.DbType, p.Size, p.Direction, p.IsNullable, p.Precision, p.Scale, p.SourceColumn, p.SourceVersion, p.Value);\n                param.DbType = p.DbType;\n                result[x] = param;\n                x++;\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// Runs a proc and returns its return value.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"return_type\">Return value's expected type</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static object ExecuteProcedure(this SqlConnection db, string name, SqlDbType return_type, params SqlParameter[] _params)\n        {\n            return ExecuteProcedureInternal(db.CreateCommand(), name, return_type, _params);\n        }\n\n        /// <summary>\n        /// Runs a proc.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static int ExecuteProcedure(this SqlConnection db, string name, params SqlParameter[] _params)\n        {\n            SqlCommand cmd = db.CreateCommand();\n            cmd.CommandText = name;\n            cmd.CommandType = CommandType.StoredProcedure;\n            cmd.Parameters.AddRange(_params);\n            return cmd.ExecuteNonQuery();\n        }\n\n        /// <summary>\n        /// Runs a proc and returns its return value.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"return_type\">Return value's expected type</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static object ExecuteProcedure(this SqlTransaction tran, string name, SqlDbType return_type, params SqlParameter[] _params)\n        {\n            SqlCommand cmd = tran.Connection.CreateCommand();\n            cmd.Transaction = tran;\n            return ExecuteProcedureInternal(cmd, name, return_type, _params);\n        }\n\n        /// <summary>\n        /// Runs a proc.\n        /// </summary>\n        /// <param name=\"db\">Open data connection</param>\n        /// <param name=\"sqlstr\">SQL string</param>\n        /// <param name=\"_params\">List of parameters to use with the SQL</param>\n        public static int ExecuteProcedure(this SqlTransaction tran, string name, params SqlParameter[] _params)\n        {\n            SqlCommand cmd = tran.Connection.CreateCommand();\n            cmd.CommandText = name;\n            cmd.Transaction = tran;\n            cmd.CommandType = CommandType.StoredProcedure;\n            cmd.Parameters.AddRange(_params);\n            return cmd.ExecuteNonQuery();\n        }\n\n        private static object ExecuteProcedureInternal(SqlCommand cmd, string name, SqlDbType return_type, SqlParameter[] _params)\n        {\n            cmd.CommandText = name;\n            cmd.CommandType = CommandType.StoredProcedure;\n            cmd.Parameters.AddRange(_params);\n            string pname = \"result\";\n            while (cmd.Parameters.Contains(\"@\" + pname)) pname = \"x\" + pname;\n            pname = \"@\" + pname;\n            SqlParameter p = new SqlParameter(pname, return_type);\n            p.Direction = ParameterDirection.ReturnValue;\n            cmd.Parameters.Add(p);\n            cmd.ExecuteNonQuery();\n            return cmd.Parameters[pname].Value;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Library.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{408EFC7E-C6B0-4160-8628-2679E34385CE}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PkmnFoundations</RootNamespace>\r\n    <AssemblyName>PkmnFoundations.Library</AssemblyName>\r\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n    <NuGetPackageImportStamp>21c4ccbf</NuGetPackageImportStamp>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\MySql.Data.6.9.8\\lib\\net20\\MySql.Data.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\packages\\System.Data.SQLite.Core.1.0.94.0\\lib\\net20\\System.Data.SQLite.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System.Data.SQLite.Linq\">\r\n      <HintPath>..\\packages\\System.Data.SQLite.Linq.1.0.94.1\\lib\\net20\\System.Data.SQLite.Linq.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Data\\Database.cs\" />\r\n    <Compile Include=\"Data\\DatabaseExtender.cs\" />\r\n    <Compile Include=\"Data\\DataMysql.cs\" />\r\n    <Compile Include=\"Data\\DataSqlite.cs\" />\r\n    <Compile Include=\"Data\\MySqlDatabaseExtender.cs\" />\r\n    <Compile Include=\"Data\\SqlDatabaseExtender.cs\" />\r\n    <Compile Include=\"Pokedex\\Ability.cs\" />\r\n    <Compile Include=\"Pokedex\\Evolution.cs\" />\r\n    <Compile Include=\"Pokedex\\FormAbilities.cs\" />\r\n    <Compile Include=\"Pokedex\\FormStats.cs\" />\r\n    <Compile Include=\"Pokedex\\Item.cs\" />\r\n    <Compile Include=\"Pokedex\\Location.cs\" />\r\n    <Compile Include=\"Pokedex\\Move.cs\" />\r\n    <Compile Include=\"Pokedex\\Pokedex.cs\" />\r\n    <Compile Include=\"Pokedex\\PokedexRecordBase.cs\" />\r\n    <Compile Include=\"Pokedex\\Region.cs\" />\r\n    <Compile Include=\"Pokedex\\Ribbon.cs\" />\r\n    <Compile Include=\"Pokedex\\Species.cs\" />\r\n    <Compile Include=\"Pokedex\\Family.cs\" />\r\n    <Compile Include=\"Pokedex\\Form.cs\" />\r\n    <Compile Include=\"Pokedex\\Type.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Support\\AliasTable.cs\" />\r\n    <Compile Include=\"Wfc\\BanStatus.cs\" />\r\n    <Compile Include=\"Wfc\\BattleSubwayPokemon5.cs\" />\r\n    <Compile Include=\"Wfc\\BattleSubwayProfile5.cs\" />\r\n    <Compile Include=\"Wfc\\BattleSubwayRecord5.cs\" />\r\n    <Compile Include=\"Wfc\\BattleTowerPokemon4.cs\" />\r\n    <Compile Include=\"Wfc\\BattleTowerPokemonBase.cs\" />\r\n    <Compile Include=\"Wfc\\BattleTowerProfileBase.cs\" />\r\n    <Compile Include=\"Wfc\\BattleTowerRecord4.cs\" />\r\n    <Compile Include=\"Wfc\\BattleTowerProfile4.cs\" />\r\n    <Compile Include=\"Wfc\\BattleTowerRecordBase.cs\" />\r\n    <Compile Include=\"Wfc\\BattleVideoHeader4.cs\" />\r\n    <Compile Include=\"Wfc\\BattleVideoHeader5.cs\" />\r\n    <Compile Include=\"Wfc\\BattleVideoRecord4.cs\" />\r\n    <Compile Include=\"Wfc\\BattleVideoRecord5.cs\" />\r\n    <Compile Include=\"Support\\BinarySerializableBase.cs\" />\r\n    <Compile Include=\"Wfc\\BoxRecord4.cs\" />\r\n    <Compile Include=\"Structures\\ByteStatValues.cs\" />\r\n    <Compile Include=\"Structures\\ContestStatValues.cs\" />\r\n    <Compile Include=\"Wfc\\DressupRecord4.cs\" />\r\n    <Compile Include=\"Structures\\Format.cs\" />\r\n    <Compile Include=\"Wfc\\GtsRecord5.cs\" />\r\n    <Compile Include=\"Structures\\Enums.cs\" />\r\n    <Compile Include=\"Wfc\\GtsRecord4.cs\" />\r\n    <Compile Include=\"Wfc\\GtsRecordBase.cs\" />\r\n    <Compile Include=\"Structures\\IvStatValues.cs\" />\r\n    <Compile Include=\"Structures\\MoveSlot.cs\" />\r\n    <Compile Include=\"Wfc\\MusicalRecord5.cs\" />\r\n    <Compile Include=\"Structures\\Pokemon4.cs\" />\r\n    <Compile Include=\"Structures\\Pokemon5.cs\" />\r\n    <Compile Include=\"Structures\\PokemonBase.cs\" />\r\n    <Compile Include=\"Structures\\IntStatValues.cs\" />\r\n    <Compile Include=\"Structures\\PokemonParty4.cs\" />\r\n    <Compile Include=\"Structures\\PokemonParty5.cs\" />\r\n    <Compile Include=\"Structures\\PokemonPartyBase.cs\" />\r\n    <Compile Include=\"Structures\\StatValues.cs\" />\r\n    <Compile Include=\"Structures\\StatValuesBase.cs\" />\r\n    <Compile Include=\"Structures\\TrainerMemo.cs\" />\r\n    <Compile Include=\"Wfc\\PlazaQuestionnaire.cs\" />\r\n    <Compile Include=\"Wfc\\PlazaSchedule.cs\" />\r\n    <Compile Include=\"Wfc\\TrainerProfile4.cs\" />\r\n    <Compile Include=\"Wfc\\TrainerProfile5.cs\" />\r\n    <Compile Include=\"Wfc\\TrainerProfileBase.cs\" />\r\n    <Compile Include=\"Wfc\\TrainerProfilePlaza.cs\" />\r\n    <Compile Include=\"Wfc\\TrainerRankings.cs\" />\r\n    <Compile Include=\"Support\\AssertHelper.cs\" />\r\n    <Compile Include=\"Support\\EncodedString4.cs\" />\r\n    <Compile Include=\"Support\\EncodedString5.cs\" />\r\n    <Compile Include=\"Support\\EncodedStringBase.cs\" />\r\n    <Compile Include=\"Support\\EnumerableExtender.cs\" />\r\n    <Compile Include=\"Support\\GameSyncUtils.cs\" />\r\n    <Compile Include=\"Support\\Indexer1d.cs\" />\r\n    <Compile Include=\"Support\\LazyKeyValuePair.cs\" />\r\n    <Compile Include=\"Support\\LocalizedString.cs\" />\r\n    <Compile Include=\"Support\\LogHelper.cs\" />\r\n    <Compile Include=\"Support\\StreamExtender.cs\" />\r\n    <Compile Include=\"Support\\StringHelper.cs\" />\r\n    <Compile Include=\"Support\\TrendyPhrase4.cs\" />\r\n    <Compile Include=\"Support\\TrendyPhrase5.cs\" />\r\n    <Compile Include=\"Support\\TrendyPhraseBase.cs\" />\r\n    <Compile Include=\"Support\\ValidationSummary.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <Import Project=\"..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets\" Condition=\"Exists('..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets')\" />\r\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\r\n    <PropertyGroup>\r\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\r\n    </PropertyGroup>\r\n    <Error Condition=\"!Exists('..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\System.Data.SQLite.Core.1.0.94.0\\build\\net20\\System.Data.SQLite.Core.targets'))\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "library/Pokedex/Ability.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Ability : PokedexRecordBase\n    {\n        public Ability(Pokedex pokedex, int value, LocalizedString name)\n            : base(pokedex)\n        {\n            Value = value;\n            Name = name;\n            // todo: Nice description text\n        }\n\n        public Ability(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n            Convert.ToInt32(reader[\"Value\"]),\n            LocalizedStringFromReader(reader, \"Name_\")\n            )\n        {\n        }\n\n        public int Value { get; private set; }\n        public LocalizedString Name { get; private set; }\n\n        public static LazyKeyValuePair<int, Ability> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Ability>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Abilities[k]), \n                v => v == null ? 0 : v.Value);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Evolution.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Evolution //: PokedexRecordBase\n    {\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Family.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Family : PokedexRecordBase\n    {\n        public Family(Pokedex pokedex, int id, int basic_male_id, int basic_female_id,\n            int baby_male_id, int baby_female_id, int incense_id, byte gender_ratio)\n            : base(pokedex)\n        {\n            m_basic_male_pair = Species.CreatePair(m_pokedex);\n            m_basic_female_pair = Species.CreatePair(m_pokedex);\n            m_baby_male_pair = Species.CreatePair(m_pokedex);\n            m_baby_female_pair = Species.CreatePair(m_pokedex);\n            m_incense_pair = Item.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_basic_male_pair);\n            m_lazy_pairs.Add(m_basic_female_pair);\n            m_lazy_pairs.Add(m_baby_male_pair);\n            m_lazy_pairs.Add(m_baby_female_pair);\n            m_lazy_pairs.Add(m_incense_pair);\n\n            ID = id;\n            m_basic_male_pair.Key = basic_male_id;\n            m_basic_female_pair.Key = basic_female_id;\n            m_baby_male_pair.Key = baby_male_id;\n            m_baby_female_pair.Key = baby_female_id;\n            m_incense_pair.Key = incense_id;\n            GenderRatio = gender_ratio;\n        }\n\n        public Family(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n                Convert.ToInt32(reader[\"id\"]),\n                Convert.ToInt32(reader[\"BasicMale\"]),\n                Convert.ToInt32(reader[\"BasicFemale\"]),\n                Convert.ToInt32(reader[\"BabyMale\"]),\n                Convert.ToInt32(reader[\"BabyFemale\"]),\n                Convert.ToInt32(reader[\"Incense\"]),\n                Convert.ToByte(reader[\"GenderRatio\"])\n            )\n        {\n        }\n\n        public int ID { get; private set; }\n        public byte GenderRatio { get; private set; }\n\n        private LazyKeyValuePair<int, Species> m_basic_male_pair;\n        private LazyKeyValuePair<int, Species> m_basic_female_pair;\n        private LazyKeyValuePair<int, Species> m_baby_male_pair;\n        private LazyKeyValuePair<int, Species> m_baby_female_pair;\n        private LazyKeyValuePair<int, Item> m_incense_pair;\n\n        public int BasicMaleID \n        {\n            get { return m_basic_male_pair.Key; }\n        }\n        public Species BasicMale \n        {\n            get { return m_basic_male_pair.Value; }\n        }\n\n        public int BasicFemaleID \n        {\n            get { return m_basic_female_pair.Key; }\n        }\n        public Species BasicFemale\n        {\n            get { return m_basic_female_pair.Value; }\n        }\n\n        public int BabyMaleID \n        {\n            get { return m_baby_male_pair.Key; }\n        }\n        public Species BabyMale\n        {\n            get { return m_baby_male_pair.Value; }\n        }\n\n        public int BabyFemaleID \n        {\n            get { return m_baby_female_pair.Key; }\n        }\n        public Species BabyFemale\n        {\n            get { return m_baby_female_pair.Value; }\n        }\n\n        public int IncenseID \n        {\n            get { return m_incense_pair.Key; }\n        }\n        public Item Incense\n        {\n            get { return m_incense_pair.Value; }\n        }\n\n        public static LazyKeyValuePair<int, Family> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Family>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Families[k]), \n                v => v == null ? 0 : v.ID);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Form.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Form : PokedexRecordBase\n    {\n        public Form(Pokedex pokedex, int id, int species_id, byte value,\n            LocalizedString name, string suffix, int height, int weight, int experience)\n            : base(pokedex)\n        {\n            m_species_pair = Species.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_species_pair);\n\n            ID = id;\n            m_species_pair.Key = species_id;\n            Value = value;\n            Name = name;\n            Suffix = suffix;\n            Height = height;\n            Weight = weight;\n            Experience = experience;\n        }\n\n        public Form(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n                Convert.ToInt32(reader[\"id\"]),\n                Convert.ToInt32(reader[\"NationalDex\"]),\n                Convert.ToByte(reader[\"FormValue\"]),\n                LocalizedStringFromReader(reader, \"Name_\"),\n                reader[\"FormSuffix\"].ToString(),\n                Convert.ToInt32(reader[\"Height\"]),\n                Convert.ToInt32(reader[\"Weight\"]),\n                Convert.ToInt32(reader[\"Experience\"])\n                )\n        {\n        }\n\n        internal override void PrefetchRelations()\n        {\n            base.PrefetchRelations();\n            m_form_stats = m_pokedex.FormStats(ID);\n            m_form_abilities = m_pokedex.FormAbilities(ID);\n        }\n\n        public int ID { get; private set; }\n        public byte Value { get; private set; }\n        public LocalizedString Name { get; private set; }\n        public string Suffix { get; private set; }\n        public int Height { get; private set; }\n        public int Weight { get; private set; }\n        public int Experience { get; private set; }\n\n        private LazyKeyValuePair<int, Species> m_species_pair;\n\n        public int SpeciesID\n        {\n            get { return m_species_pair.Key; }\n        }\n        public Species Species\n        {\n            get { return m_species_pair.Value; }\n        }\n\n        private SortedList<Generations, FormStats> m_form_stats;\n        public FormStats BaseStats(Generations generation)\n        {\n            if (m_form_stats == null) m_form_stats = m_pokedex.FormStats(ID);\n            // xxx: this is O(n) and we can do O(log n) but it requires rolling\n            // our own binary search and YAGNI for a list of at most 6 values.\n            // http://stackoverflow.com/questions/20474896/finding-nearest-value-in-a-sorteddictionary\n            return m_form_stats.Last(pair => (int)(pair.Key) <= (int)generation).Value;\n        }\n\n        private SortedList<Generations, FormAbilities> m_form_abilities;\n        public FormAbilities Abilities(Generations generation)\n        {\n            if (m_form_abilities == null) m_form_abilities = m_pokedex.FormAbilities(ID);\n            // xxx: above\n            return m_form_abilities.Last(pair => (int)(pair.Key) <= (int)generation).Value;\n        }\n\n        public static LazyKeyValuePair<int, Form> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Form>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Forms[k]),\n                v => v == null ? 0 : v.ID);\n        }\n\n        public static LazyKeyValuePair<byte, Form> CreatePairForSpecies(Pokedex pokedex, Func<Species> speciesGetter)\n        {\n            // 0 is a valid value here--don't map it to null!\n            return new LazyKeyValuePair<byte, Form>(\n                k => speciesGetter().Forms(k), \n                v => v.Value);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/FormAbilities.cs",
    "content": "﻿using PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class FormAbilities : PokedexRecordBase\n    {\n        public FormAbilities(Pokedex pokedex, int form_id, Generations min_generation,\n            int ability1, int ability2, int hiddenAbility1)\n            : base(pokedex)\n        {\n            m_form_pair = Form.CreatePair(m_pokedex);\n            m_ability1_pair = Ability.CreatePair(m_pokedex);\n            m_ability2_pair = Ability.CreatePair(m_pokedex);\n            m_hidden_ability1_pair = Ability.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_form_pair);\n            m_lazy_pairs.Add(m_ability1_pair);\n            m_lazy_pairs.Add(m_hidden_ability1_pair);\n\n            m_form_pair.Key = form_id;\n            MinGeneration = min_generation;\n            m_ability1_pair.Key = ability1;\n            m_ability2_pair.Key = ability2;\n            m_hidden_ability1_pair.Key = hiddenAbility1;\n        }\n\n        public FormAbilities(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n            Convert.ToInt32(reader[\"form_id\"]),\n            (Generations)Convert.ToInt32(reader[\"MinGeneration\"]),\n            (int)(DatabaseExtender.Cast<uint ?>(reader[\"Ability1\"]) ?? 0),\n            (int)(DatabaseExtender.Cast<uint ?>(reader[\"Ability2\"]) ?? 0),\n            (int)(DatabaseExtender.Cast<uint ?>(reader[\"HiddenAbility1\"]) ?? 0)\n            )\n        {\n        }\n\n        public Generations MinGeneration { get; private set; }\n        private LazyKeyValuePair<int, Form> m_form_pair;\n        private LazyKeyValuePair<int, Ability> m_ability1_pair;\n        private LazyKeyValuePair<int, Ability> m_ability2_pair;\n        private LazyKeyValuePair<int, Ability> m_hidden_ability1_pair;\n\n        public int FormID\n        {\n            get { return m_form_pair.Key; }\n        }\n        public Form Form\n        {\n            get { return m_form_pair.Value; }\n        }\n\n        public int Ability1ID\n        {\n            get { return m_ability1_pair.Key; }\n        }\n        public Ability Ability1\n        {\n            get { return m_ability1_pair.Value; }\n        }\n\n        public int Ability2ID\n        {\n            get { return m_ability2_pair.Key; }\n        }\n        public Ability Ability2\n        {\n            get { return m_ability2_pair.Value; }\n        }\n\n        public int HiddenAbility1ID\n        {\n            get { return m_hidden_ability1_pair.Key; }\n        }\n        public Ability HiddenAbility1\n        {\n            get { return m_hidden_ability1_pair.Value; }\n        }\n\n        public Ability[] Abilities\n        { \n            get \n            {\n                // xxx: We probably want the actual data to be stored in a collection to avoid this silly if-else.\n                if (Ability1 != null && Ability2 != null)\n                    return new Ability[] { Ability1, Ability2 };\n                else if (Ability1 != null)\n                    return new Ability[] { Ability1 };\n                else if (Ability2 != null)\n                    return new Ability[] { Ability2 };\n                else\n                    return new Ability[] { };\n            } \n        }\n\n        public Ability[] HiddenAbilities\n        {\n            get\n            {\n                if (HiddenAbility1 != null)\n                    return new Ability[] { HiddenAbility1 };\n                else\n                    return new Ability[] { };\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/FormStats.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class FormStats : PokedexRecordBase\n    {\n        public FormStats(Pokedex pokedex, int form_id, Generations min_generation, \n            int type1, int type2, IntStatValues base_stats, ByteStatValues reward_evs)\n            : base(pokedex)\n        {\n            m_form_pair = Form.CreatePair(m_pokedex);\n            // xxx: Do we maybe want to expose types as some sort of collection maybe?\n            m_type1_pair = Type.CreatePair(m_pokedex);\n            m_type2_pair = Type.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_form_pair);\n            m_lazy_pairs.Add(m_type1_pair);\n            m_lazy_pairs.Add(m_type2_pair);\n\n            m_form_pair.Key = form_id;\n            MinGeneration = min_generation;\n            m_type1_pair.Key = type1;\n            m_type2_pair.Key = type2;\n            BaseStats = base_stats;\n            RewardEvs = reward_evs;\n        }\n\n        public FormStats(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n            Convert.ToInt32(reader[\"form_id\"]),\n            (Generations)Convert.ToInt32(reader[\"MinGeneration\"]),\n            Convert.ToInt32(reader[\"Type1\"]),\n            Convert.ToInt32(reader[\"Type2\"]),\n            new IntStatValues(\n                Convert.ToInt32(reader[\"BaseHP\"]),\n                Convert.ToInt32(reader[\"BaseAttack\"]),\n                Convert.ToInt32(reader[\"BaseDefense\"]),\n                Convert.ToInt32(reader[\"BaseSpeed\"]),\n                Convert.ToInt32(reader[\"BaseSpAttack\"]),\n                Convert.ToInt32(reader[\"BaseSpDefense\"])\n                ),\n            new ByteStatValues(\n                Convert.ToByte(reader[\"RewardHP\"]),\n                Convert.ToByte(reader[\"RewardAttack\"]),\n                Convert.ToByte(reader[\"RewardDefense\"]),\n                Convert.ToByte(reader[\"RewardSpeed\"]),\n                Convert.ToByte(reader[\"RewardSpAttack\"]),\n                Convert.ToByte(reader[\"RewardSpDefense\"])\n                )\n            )\n        {\n        }\n\n        public Generations MinGeneration { get; private set; }\n        public IntStatValues BaseStats { get; private set; }\n        public ByteStatValues RewardEvs { get; private set; }\n\n        private LazyKeyValuePair<int, Form> m_form_pair;\n        private LazyKeyValuePair<int, PkmnFoundations.Pokedex.Type> m_type1_pair;\n        private LazyKeyValuePair<int, PkmnFoundations.Pokedex.Type> m_type2_pair;\n\n        public int FormID\n        {\n            get { return m_form_pair.Key; }\n        }\n        public Form Form\n        {\n            get { return m_form_pair.Value; }\n        }\n\n        public int Type1ID\n        {\n            get { return m_type1_pair.Key; }\n        }\n        public PkmnFoundations.Pokedex.Type Type1\n        {\n            get { return m_type1_pair.Value; }\n        }\n\n        public int Type2ID\n        {\n            get { return m_type2_pair.Key; }\n        }\n        public PkmnFoundations.Pokedex.Type Type2\n        {\n            get { return m_type2_pair.Value; }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Item.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Item : PokedexRecordBase\n    {\n        public Item(Pokedex pokedex, int id, int ? value3, int ? value4, \n            int ? value5, int ? value6, int ? pokeball_value, int price, LocalizedString name)\n            : base(pokedex)\n        {\n            ID = id;\n            // todo: Since ID numbers stopped moving around in Gen 4 -> 5, we\n            // only need to store value3, value4 and a minGenerationRequired field\n            Value3 = value3;\n            Value4 = value4;\n            Value5 = value5;\n            Value6 = value6;\n            PokeballValue = pokeball_value;\n            Price = price;\n            Name = name;\n        }\n\n        public Item(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n                Convert.ToInt32(reader[\"id\"]),\n                reader[\"Value3\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value3\"]),\n                reader[\"Value4\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value4\"]),\n                reader[\"Value5\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value5\"]),\n                reader[\"Value6\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value6\"]),\n                reader[\"PokeballValue\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"PokeballValue\"]),\n                Convert.ToInt32(reader[\"Price\"]),\n                LocalizedStringFromReader(reader, \"Name_\")\n            )\n        {\n        }\n\n        public int ID { get; private set; }\n        public int ? Value3 { get; private set; }\n        public int ? Value4 { get; private set; }\n        public int ? Value5 { get; private set; }\n        public int ? Value6 { get; private set; }\n        public int Price { get; private set; }\n        public LocalizedString Name { get; private set; }\n\n        public int ? Value(Generations generation)\n        {\n            switch (generation)\n            {\n                case Generations.Generation1:\n                case Generations.Generation2:\n                    throw new NotSupportedException();\n                case Generations.Generation3:\n                    return Value3;\n                case Generations.Generation4:\n                    return Value4;\n                case Generations.Generation5:\n                    return Value5;\n                case Generations.Generation6:\n                default:\n                    return Value6;\n            }\n        }\n\n        public int ? PokeballValue\n        {\n            get; private set;\n        }\n\n        public static LazyKeyValuePair<int, Item> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Item>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Items[k]), \n                v => v == null ? 0 : v.ID);\n        }\n\n        public static LazyKeyValuePair<int, Item> CreatePairForGeneration(Pokedex pokedex, Func<Generations> generationGetter)\n        {\n            return new LazyKeyValuePair<int, Item>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.ItemsByGeneration(generationGetter())[k]),\n                v => v == null ? 0 : (v.Value(generationGetter()) ?? -1));\n        }\n\n        public static LazyKeyValuePair<int, Item> CreatePairPokeball(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Item>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Pokeballs[k]),\n                v => v == null ? 0 : v.ID);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Location.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Location : PokedexRecordBase\n    {\n        public Location(Pokedex pokedex, int id, int region_id, int ? value3,\n            int ? value_colo, int ? value_xd, int ? value4, int ? value5,\n            int ? value6, LocalizedString name)\n            : base(pokedex)\n        {\n            m_region_pair = Region.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_region_pair);\n\n            ID = id;\n            m_region_pair.Key = region_id;\n            Value3 = value3;\n            ValueColo = value_colo;\n            ValueXd = value_xd;\n            Value4 = value4;\n            Value5 = value5;\n            Value6 = value6;\n            Name = name;\n        }\n\n        public Location(Pokedex pokedex, IDataReader reader)\n            : this(pokedex, \n            Convert.ToInt32(reader[\"id\"]), \n            Convert.ToInt32(reader[\"region_id\"]), \n            (int ?)DatabaseExtender.Cast<uint ?>(reader[\"Value3\"]),\n            (int?)DatabaseExtender.Cast<uint?>(reader[\"Value_Colo\"]),\n            (int?)DatabaseExtender.Cast<uint?>(reader[\"Value_XD\"]),\n            (int?)DatabaseExtender.Cast<uint?>(reader[\"Value4\"]),\n            (int?)DatabaseExtender.Cast<uint?>(reader[\"Value5\"]),\n            (int?)DatabaseExtender.Cast<uint?>(reader[\"Value6\"]),\n            LocalizedStringFromReader(reader, \"Name_\"))\n        {\n        }\n\n        public int ID { get; private set; }\n        public LocalizedString Name { get; private set; }\n\n        private LazyKeyValuePair<int, Region> m_region_pair;\n        public int RegionID\n        {\n            get { return m_region_pair.Key; }\n        }\n        public Region Region\n        {\n            get { return m_region_pair.Value; }\n        }\n\n        // xxx: All these 3/4/5/6 fields are repetitive.\n        // We need a GenerationField<T> helper which bottles them all up into\n        // one field. Basically Dictionary<Generations, T> but with a helper to\n        // pull out a T ?\n        public int? Value3 { get; private set; }\n        public int? ValueColo { get; private set; }\n        public int? ValueXd { get; private set; }\n        public int? Value4 { get; private set; }\n        public int? Value5 { get; private set; }\n        public int? Value6 { get; private set; }\n\n        public int? Value(Generations generation)\n        {\n            LocationNumbering numbering = GenerationToLocationNumbering(generation);\n            return Value(numbering);\n        }\n\n        public int ? Value(LocationNumbering numbering)\n        {\n            switch (numbering)\n            {\n                case LocationNumbering.Generation1:\n                case LocationNumbering.Generation2:\n                    throw new NotSupportedException();\n                case LocationNumbering.Generation3:\n                    return Value3;\n                case LocationNumbering.Colosseum:\n                    return ValueColo;\n                case LocationNumbering.XD:\n                    return ValueXd;\n                case LocationNumbering.Generation4:\n                    return Value4;\n                case LocationNumbering.Generation5:\n                    return Value5;\n                case LocationNumbering.Generation6:\n                    return Value6;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public static LocationNumbering GenerationToLocationNumbering(Generations generation)\n        {\n            switch (generation)\n            {\n                case Generations.Generation1:\n                    return LocationNumbering.Generation1;\n                case Generations.Generation2:\n                    return LocationNumbering.Generation2;\n                case Generations.Generation3:\n                    return LocationNumbering.Generation3;\n                case Generations.Generation4:\n                    return LocationNumbering.Generation4;\n                case Generations.Generation5:\n                    return LocationNumbering.Generation5;\n                case Generations.Generation6:\n                    return LocationNumbering.Generation6;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public static LazyKeyValuePair<int, Location> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Location>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Locations[k]),\n                v => v == null ? 0 : v.ID);\n        }\n\n        public static LazyKeyValuePair<int, Location> CreatePairForGeneration(Pokedex pokedex, Func<Generations> generationGetter)\n        {\n            return new LazyKeyValuePair<int, Location>(\n                k =>\n                {\n                    if (k == 0) return null;\n                    if (pokedex == null) return null;\n                    var locations = pokedex.LocationsByGeneration(GenerationToLocationNumbering(generationGetter()));\n                    if (locations == null) return null;\n                    if (!locations.ContainsKey(k)) return null;\n                    return locations[k];\n                },\n                v => v == null ? 0 : (v.Value(generationGetter()) ?? -1));\n        }\n\n        public static LazyKeyValuePair<int, Location> CreatePairForLocationNumbering(Pokedex pokedex, Func<LocationNumbering> generationGetter)\n        {\n            return new LazyKeyValuePair<int, Location>(\n                k =>\n                {\n                    if (k == 0) return null;\n                    if (pokedex == null) return null;\n                    var locations = pokedex.LocationsByGeneration(generationGetter());\n                    if (locations == null) return null;\n                    if (!locations.ContainsKey(k)) return null;\n                    return locations[k];\n                },\n                v => v == null ? 0 : (v.Value(generationGetter()) ?? -1));\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Move.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Move : PokedexRecordBase\n    {\n        public Move(Pokedex pokedex, int id, int type_id, LocalizedString name,\n            DamageClass damage_class, int damage, int pp, int accuracy, int priority,\n            BattleTargets target)\n            : base(pokedex)\n        {\n            m_type_pair = Type.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_type_pair);\n\n            ID = id;\n            m_type_pair.Key = type_id;\n            Name = name;\n            DamageClass = damage_class;\n            Damage = damage;\n            PP = pp;\n            Accuracy = accuracy;\n            Priority = priority;\n            Target = target;\n            // todo: Nice description text\n        }\n\n        public Move(Pokedex pokedex, IDataReader reader)\n            : this(\n            pokedex,\n            Convert.ToInt32(reader[\"Value\"]),\n            Convert.ToInt32(reader[\"type_id\"]),\n            LocalizedStringFromReader(reader, \"Name_\"),\n            (DamageClass)Convert.ToInt32(reader[\"DamageClass\"]),\n            Convert.ToInt32(reader[\"Damage\"]),\n            Convert.ToInt32(reader[\"PP\"]),\n            Convert.ToInt32(reader[\"Accuracy\"]),\n            Convert.ToInt32(reader[\"Priority\"]),\n            (BattleTargets)Convert.ToInt32(reader[\"Target\"])\n            )\n        {\n        }\n\n        public int ID { get; private set; }\n        public LocalizedString Name { get; private set; }\n        public DamageClass DamageClass { get; private set; }\n        public int Damage { get; private set; }\n        public int PP { get; private set; }\n        public int Accuracy { get; private set; }\n        public int Priority { get; private set; }\n        public BattleTargets Target { get; private set; }\n\n        private LazyKeyValuePair<int, PkmnFoundations.Pokedex.Type> m_type_pair;\n\n        public int TypeID \n        {\n            get { return m_type_pair.Key; }\n        }\n        public PkmnFoundations.Pokedex.Type Type\n        {\n            get { return m_type_pair.Value; }\n        }\n\n        public static LazyKeyValuePair<int, Move> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Move>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Moves[k]),\n                v => v == null ? 0 : v.ID);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Pokedex.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Pokedex\n    {\n        public Pokedex(Database db, bool lazy)\n        {\n            if (lazy) throw new NotImplementedException();\n\n            GetAllData(db);\n            BuildAdditionalIndexes();\n            PrefetchRelations();\n        }\n\n        private void GetAllData(Database db)\n        {\n            m_species = db.PokedexGetAllSpecies(this).ToDictionary(s => s.NationalDex, s => s);\n            m_families = db.PokedexGetAllFamilies(this).ToDictionary(f => f.ID, f => f);\n            m_forms = db.PokedexGetAllForms(this).ToDictionary(f => f.ID, f => f);\n            m_items = db.PokedexGetAllItems(this).ToDictionary(i => i.ID, i => i);\n            m_moves = db.PokedexGetAllMoves(this).ToDictionary(m => m.ID, m => m);\n            m_types = db.PokedexGetAllTypes(this).ToDictionary(t => t.ID, t => t);\n            m_abilities = db.PokedexGetAllAbilities(this).ToDictionary(a => a.Value, a => a);\n            m_ribbons = db.PokedexGetAllRibbons(this).ToDictionary(r => r.ID, r => r);\n            m_regions = db.PokedexGetAllRegions(this).ToDictionary(r => r.ID, r => r);\n            m_locations = db.PokedexGetAllLocations(this).ToDictionary(l => l.ID, l => l);\n\n            List<FormStats> form_stats = db.PokedexGetAllFormStats(this);\n            m_form_stats = ProcessGenerationalChangeset(form_stats, fs => fs.FormID, fs => fs.MinGeneration);\n\n            List<FormAbilities> form_abilities = db.PokedexGetAllFormAbilities(this);\n            m_form_abilities = ProcessGenerationalChangeset(form_abilities, fa => fa.FormID, fa => fa.MinGeneration);\n        }\n\n        private void BuildAdditionalIndexes()\n        {\n            m_forms_by_value = new Dictionary<int, Dictionary<byte, Form>>();\n            foreach (var pair in m_species)\n                m_forms_by_value.Add(pair.Key, new Dictionary<byte, Form>());\n\n            foreach (var pair in m_forms)\n            {\n#if !DEBUG\n                if (!m_forms_by_value[pair.Value.SpeciesID].ContainsKey(pair.Value.Value))\n#endif\n                    m_forms_by_value[pair.Value.SpeciesID].Add(pair.Value.Value, pair.Value);\n            }\n\n            Dictionary<int, Item> items3 = new Dictionary<int,Item>();\n            Dictionary<int, Item> items4 = new Dictionary<int,Item>();\n            Dictionary<int, Item> items5 = new Dictionary<int,Item>();\n            Dictionary<int, Item> items6 = new Dictionary<int,Item>();\n            m_items_generations = new Dictionary<Generations, Dictionary<int, Item>>();\n            m_items_generations.Add(Generations.Generation3, items3);\n            m_items_generations.Add(Generations.Generation4, items4);\n            m_items_generations.Add(Generations.Generation5, items5);\n            m_items_generations.Add(Generations.Generation6, items6);\n            m_pokeballs = new Dictionary<int, Item>();\n\n            foreach (var pair in m_items)\n            {\n                Item i = pair.Value;\n                if (i.Value3 != null) items3.Add((int)i.Value3, i);\n                if (i.Value4 != null) items4.Add((int)i.Value4, i);\n                if (i.Value5 != null) items5.Add((int)i.Value5, i);\n                if (i.Value6 != null) items6.Add((int)i.Value6, i);\n                if (i.PokeballValue != null) m_pokeballs.Add((int)i.PokeballValue, i);\n            }\n\n            m_ribbon_positions_generations = new Dictionary<Generations, Dictionary<int, Ribbon>>();\n            AddGeneration(m_ribbon_positions_generations, m_ribbons, Generations.Generation3, r => r.Position3);\n            AddGeneration(m_ribbon_positions_generations, m_ribbons, Generations.Generation4, r => r.Position4);\n            AddGeneration(m_ribbon_positions_generations, m_ribbons, Generations.Generation5, r => r.Position5);\n            AddGeneration(m_ribbon_positions_generations, m_ribbons, Generations.Generation6, r => r.Position6);\n\n            m_ribbon_values_generations = new Dictionary<Generations, Dictionary<int, Ribbon>>();\n            AddGeneration(m_ribbon_values_generations, m_ribbons, Generations.Generation3, r => r.Value3);\n            AddGeneration(m_ribbon_values_generations, m_ribbons, Generations.Generation4, r => r.Value4);\n            AddGeneration(m_ribbon_values_generations, m_ribbons, Generations.Generation5, r => r.Value5);\n            AddGeneration(m_ribbon_values_generations, m_ribbons, Generations.Generation6, r => r.Value6);\n\n            m_location_values_generations = new Dictionary<LocationNumbering, Dictionary<int, Location>>();\n            AddGeneration(m_location_values_generations, m_locations, LocationNumbering.Generation3, l => l.Value3);\n            AddGeneration(m_location_values_generations, m_locations, LocationNumbering.Generation4, l => l.Value4);\n            AddGeneration(m_location_values_generations, m_locations, LocationNumbering.Generation5, l => l.Value5);\n            AddGeneration(m_location_values_generations, m_locations, LocationNumbering.Generation6, l => l.Value6);\n        }\n\n        private Dictionary<int, SortedList<Generations, T>> ProcessGenerationalChangeset<T>(List<T> data, Func<T, int> idGetter, Func<T, Generations> minGenerationGetter)\n        {\n            // xxx: Instead of passing in these two lamdbas, we want an IGenerationalChangesetItem interface with corresponding properties.\n\n            var sorted = data.ToList();\n            sorted.Sort(delegate (T f, T other)\n            {\n                int idF = idGetter(f);\n                int idOther = idGetter(other);\n                if (idF != idOther) return idF.CompareTo(idOther);\n\n                Generations genF = minGenerationGetter(f);\n                Generations genOther = minGenerationGetter(other);\n                return genF.CompareTo(genOther);\n            });\n\n            Dictionary<int, SortedList<Generations, T>> resultFormStats = new Dictionary<int, SortedList<Generations, T>>();\n            SortedList<Generations, T> currFormStats = null;\n            int currFormId = 0;\n\n            foreach (T f in sorted)\n            {\n                int idF = idGetter(f);\n                if (currFormStats == null || currFormId != idF)\n                {\n                    if (currFormStats != null) resultFormStats.Add(currFormId, currFormStats);\n                    currFormStats = new SortedList<Generations, T>();\n                }\n                currFormStats.Add(minGenerationGetter(f), f);\n                currFormId = idF;\n            }\n            if (currFormStats != null) resultFormStats.Add(currFormId, currFormStats);\n\n            return resultFormStats;\n        }\n\n        private void AddGeneration<TGen, TKey, TValue>(Dictionary<TGen, Dictionary<TKey, TValue>> dest, Dictionary<TKey, TValue> src, TGen generation, Func<TValue, TKey?> keyGetter)\n            where TKey : struct\n        {\n            dest.Add(generation,\n                src.Where(pair => keyGetter(pair.Value) != null)\n                .ToDictionary(pair => (TKey)keyGetter(pair.Value), pair => pair.Value));\n        }\n\n        private void PrefetchRelations()\n        {\n            // xxx: clean this up\n            // todo: reflect these classes to decide whether or not prefetching\n            // is even needed\n            foreach (var k in m_species)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_families)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_forms)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_items)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_moves)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_types)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_abilities)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_ribbons)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_regions)\n                k.Value.PrefetchRelations();\n            foreach (var k in m_locations)\n                k.Value.PrefetchRelations();\n\n            foreach (var k in m_form_stats)\n            {\n                foreach (var j in k.Value)\n                    j.Value.PrefetchRelations();\n            }\n            foreach (var k in m_form_abilities)\n            {\n                foreach (var j in k.Value)\n                    j.Value.PrefetchRelations();\n            }\n        }\n\n        private Dictionary<int, Species> m_species;\n        private Dictionary<int, Family> m_families;\n        private Dictionary<int, Form> m_forms;\n        private Dictionary<int, Dictionary<byte, Form>> m_forms_by_value;\n        private Dictionary<int, SortedList<Generations, FormStats>> m_form_stats;\n        private Dictionary<int, SortedList<Generations, FormAbilities>> m_form_abilities;\n        //private Dictionary<int, Evolution> m_evolutions;\n\n        private Dictionary<int, Item> m_items;\n        private Dictionary<int, Move> m_moves;\n        private Dictionary<int, PkmnFoundations.Pokedex.Type> m_types;\n        private Dictionary<int, Ability> m_abilities;\n        private Dictionary<int, Ribbon> m_ribbons;\n\n        private Dictionary<Generations, Dictionary<int, Item>> m_items_generations;\n        private Dictionary<int, Item> m_pokeballs;\n        private Dictionary<Generations, Dictionary<int, Ribbon>> m_ribbon_positions_generations;\n        private Dictionary<Generations, Dictionary<int, Ribbon>> m_ribbon_values_generations;\n\n        private Dictionary<int, Region> m_regions;\n        private Dictionary<int, Location> m_locations;\n\n        private Dictionary<LocationNumbering, Dictionary<int, Location>> m_location_values_generations;\n\n        // todo: use readonly wrappers\n        public IDictionary<int, Species> Species\n        {\n            get\n            {\n                return m_species;\n            }\n        }\n\n        public IDictionary<int, Family> Families\n        {\n            get\n            {\n                return m_families;\n            }\n        }\n\n        public IDictionary<int, Form> Forms\n        {\n            get\n            {\n                return m_forms;\n            }\n        }\n\n        internal Dictionary<byte, Form> FormsByValue(int national_dex)\n        {\n            return m_forms_by_value[national_dex];\n        }\n\n        internal SortedList<Generations, FormStats> FormStats(int form_id)\n        {\n            return m_form_stats[form_id];\n        }\n\n        internal SortedList<Generations, FormAbilities> FormAbilities(int form_id)\n        {\n            return m_form_abilities[form_id];\n        }\n\n        public IDictionary<int, Item> Items\n        {\n            get\n            {\n                return m_items;\n            }\n        }\n\n        public IDictionary<int, Item> ItemsByGeneration(Generations generation)\n        {\n            return m_items_generations[generation];\n        }\n\n        public IDictionary<int, Item> Pokeballs\n        {\n            get\n            {\n                return m_pokeballs;\n            }\n        }\n\n        public IDictionary<int, Move> Moves\n        {\n            get\n            {\n                return m_moves;\n            }\n        }\n\n        public IDictionary<int, PkmnFoundations.Pokedex.Type> Types\n        {\n            get\n            {\n                return m_types;\n            }\n        }\n\n        public IDictionary<int, Ability> Abilities\n        {\n            get\n            {\n                return m_abilities;\n            }\n        }\n\n        public IDictionary<int, Ribbon> Ribbons\n        {\n            get\n            {\n                return m_ribbons;\n            }\n        }\n\n        public IDictionary<int, Ribbon> RibbonsByGeneration(Generations generation)\n        {\n            return m_ribbon_positions_generations[generation];\n        }\n\n        public IDictionary<int, Region> Regions\n        {\n            get\n            {\n                return m_regions;\n            }\n        }\n\n        public IDictionary<int, Location> Locations\n        {\n            get\n            {\n                return m_locations;\n            }\n        }\n\n        public IDictionary<int, Location> LocationsByGeneration(LocationNumbering generation)\n        {\n            return m_location_values_generations[generation];\n        }\n\n        public static int SpeciesAtGeneration(Generations generation)\n        {\n            // xxx: Pull from database\n            switch (generation)\n            {\n                case Generations.Generation1:\n                    return 151;\n                case Generations.Generation2:\n                    return 251;\n                case Generations.Generation3:\n                    return 386;\n                case Generations.Generation4:\n                    return 493;\n                case Generations.Generation5:\n                    return 649;\n                case Generations.Generation6:\n                    return 721;\n                case Generations.Generation7:\n                    return 807; // Sorry, LGPE is Gen8\n                case Generations.Generation8:\n                    return 905;\n                default:\n                    throw new NotSupportedException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/PokedexRecordBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class PokedexRecordBase\n    {\n        internal PokedexRecordBase(Pokedex pokedex)\n        {\n            m_pokedex = pokedex;\n            m_lazy_pairs = new List<ILazyKeyValuePair<int, object>>();\n        }\n\n        protected Pokedex m_pokedex;\n        protected List<ILazyKeyValuePair<int, object>> m_lazy_pairs;\n\n        internal virtual void PrefetchRelations()\n        {\n            foreach (ILazyKeyValuePair<int, object> p in m_lazy_pairs)\n                p.Evaluate();\n        }\n\n        public static LocalizedString LocalizedStringFromReader(IDataReader reader, string prefix)\n        {\n            // fixme: share this field with CreateLocalizedStringQueryPieces\n            string[] langs = new string[] { \"JA\", \"EN\", \"FR\", \"IT\", \"DE\", \"ES\", \"KO\" };\n            LocalizedString result = new LocalizedString();\n            foreach (string lang in langs)\n            {\n                try\n                {\n                    int ordinal = reader.GetOrdinal(prefix + lang);\n                    if (reader.IsDBNull(ordinal)) continue;\n                    result.Add(lang, reader.GetString(ordinal));\n                }\n                catch (IndexOutOfRangeException)\n                {\n                    continue;\n                }\n            }\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Region.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Region : PokedexRecordBase\n    {\n        public Region(Pokedex pokedex, int id, LocalizedString name) : base(pokedex)\n        {\n            ID = id;\n            Name = name;\n        }\n\n        public Region(Pokedex pokedex, IDataReader reader)\n            : this(pokedex, Convert.ToInt32(reader[\"id\"]), LocalizedStringFromReader(reader, \"Name_\"))\n        {\n        }\n\n        public int ID { get; private set; }\n        public LocalizedString Name { get; private set; }\n\n        public static LazyKeyValuePair<int, Region> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Region>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Regions[k]),\n                v => v == null ? 0 : v.ID);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Ribbon.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Ribbon : PokedexRecordBase\n    {\n        public Ribbon(Pokedex pokedex, int id, LocalizedString name, \n            LocalizedString description,\n            int ? position3, int ? position4, int ? position5, int ? position6,\n            int ? value3, int ? value4, int ? value5, int ? value6) \n            : base(pokedex)\n        {\n            ID = id;\n            Name = name;\n            Description = description;\n            Position3 = position3;\n            Position4 = position4;\n            Position5 = position5;\n            Position6 = position6;\n            Value3 = value3;\n            Value4 = value4;\n            Value5 = value5;\n            Value6 = value6;\n        }\n\n        public Ribbon(Pokedex pokedex, IDataReader reader) :\n            this(pokedex, Convert.ToInt32(reader[\"id\"]),\n                LocalizedStringFromReader(reader, \"Name_\"),\n                LocalizedStringFromReader(reader, \"Description_\"),\n                reader[\"Position3\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Position3\"]),\n                reader[\"Position4\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Position4\"]),\n                reader[\"Position5\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Position5\"]),\n                reader[\"Position6\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Position6\"]),\n                reader[\"Value3\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value3\"]),\n                reader[\"Value4\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value4\"]),\n                reader[\"Value5\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value5\"]),\n                reader[\"Value6\"] is DBNull ? null : (int?)Convert.ToInt32(reader[\"Value6\"])\n            )\n        {\n        }\n\n        public int ID { get; private set; }\n        public LocalizedString Name { get; private set; }\n        public LocalizedString Description { get; private set; }\n        public int? Position3 { get; private set; }\n        public int? Position4 { get; private set; }\n        public int? Position5 { get; private set; }\n        public int? Position6 { get; private set; }\n        public int? Value3 { get; private set; }\n        public int? Value4 { get; private set; }\n        public int? Value5 { get; private set; }\n        public int? Value6 { get; private set; }\n\n        public int? Position(Generations generation)\n        {\n            switch (generation)\n            {\n                case Generations.Generation1:\n                case Generations.Generation2:\n                    throw new NotSupportedException();\n                case Generations.Generation3:\n                    return Position3;\n                case Generations.Generation4:\n                    return Position4;\n                case Generations.Generation5:\n                    return Position5;\n                case Generations.Generation6:\n                default:\n                    return Position6;\n            }\n        }\n\n        public int? Value(Generations generation)\n        {\n            switch (generation)\n            {\n                case Generations.Generation1:\n                case Generations.Generation2:\n                    throw new NotSupportedException();\n                case Generations.Generation3:\n                    return Value3;\n                case Generations.Generation4:\n                    return Value4;\n                case Generations.Generation5:\n                    return Value5;\n                case Generations.Generation6:\n                default:\n                    return Value6;\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Species.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Species : PokedexRecordBase\n    {\n        public Species(Pokedex pokedex, int national_dex, int family_id, LocalizedString name, \n            GrowthRates growth_rate, byte gender_ratio, EggGroups egg_group_1, \n            EggGroups egg_group_2, int egg_steps, bool gender_variations)\n            : base(pokedex)\n        {\n            m_family_pair = Family.CreatePair(m_pokedex);\n            m_lazy_pairs.Add(m_family_pair);\n\n            NationalDex = national_dex;\n            m_family_pair.Key = family_id;\n            Name = name;\n            GrowthRate = growth_rate;\n            GenderRatio = gender_ratio;\n            EggGroup1 = egg_group_1;\n            EggGroup2 = egg_group_2;\n            EggSteps = egg_steps;\n            GenderVariations = gender_variations;\n        }\n\n        // xxx: We shouldn't have column names hardcoded like this since they might change.\n        // there should be const strings instead and they should be reused by the Database classes.\n        public Species(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n                Convert.ToInt32(reader[\"NationalDex\"]),\n                Convert.ToInt32(reader[\"family_id\"]),\n                LocalizedStringFromReader(reader, \"Name_\"),\n                (GrowthRates)Convert.ToInt32(reader[\"GrowthRate\"]),\n                Convert.ToByte(reader[\"GenderRatio\"]),\n                (EggGroups)Convert.ToByte(reader[\"EggGroup1\"]),\n                (EggGroups)Convert.ToByte(reader[\"EggGroup2\"]),\n                Convert.ToInt32(reader[\"EggSteps\"]),\n                Convert.ToBoolean(reader[\"GenderVariations\"])\n            )\n        {\n        }\n\n        internal override void PrefetchRelations()\n        {\n            base.PrefetchRelations();\n            m_forms = m_pokedex.FormsByValue(NationalDex);\n        }\n\n        // todo: Implement IEquitable and compare against NationalDex\n        // Same goes for all these pokedex classes.\n\n        public int NationalDex { get; private set; }\n        public LocalizedString Name { get; private set; }\n        public GrowthRates GrowthRate { get; private set; }\n        /// <summary>\n        /// Represents the odds, out of 8, of the Pokémon being female. 255 is reserved for genderless Pokémon.\n        /// </summary>\n        public byte GenderRatio { get; private set; }\n        public EggGroups EggGroup1 { get; private set; }\n        public EggGroups EggGroup2 { get; private set; }\n        public int EggSteps { get; private set; }\n        public bool GenderVariations { get; private set; }\n\n        private LazyKeyValuePair<int, Family> m_family_pair;\n\n        public int FamilyID \n        { \n            get { return m_family_pair.Key; }\n        }\n        public Family Family\n        {\n            get { return m_family_pair.Value; }\n        }\n\n        private Dictionary<byte, Form> m_forms;\n        public Form Forms(byte value)\n        {\n            if (m_forms == null)\n                m_forms = m_pokedex.FormsByValue(NationalDex);\n            return m_forms[value];\n        }\n\n        public static LazyKeyValuePair<int, Species> CreatePair(Pokedex pokedex)\n        {\n            // xxx: we need to return null when there's a KeyNotFoundException\n            // since we want the Pokemon4/5 ctor to succeed regardless of how\n            // broken the underlying data is.\n            return new LazyKeyValuePair<int, Species>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Species[k]),\n                v => v == null ? 0 : v.NationalDex);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Pokedex/Type.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Pokedex\n{\n    public class Type : PokedexRecordBase\n    {\n        public Type(Pokedex pokedex, int id, LocalizedString name, DamageClass damage_class)\n            : base(pokedex)\n        {\n            ID = id;\n            Name = name;\n            DamageClass = damage_class;\n        }\n\n        public Type(Pokedex pokedex, IDataReader reader)\n            : this(\n                pokedex,\n                Convert.ToInt32(reader[\"id\"]),\n                LocalizedStringFromReader(reader, \"Name_\"),\n                (DamageClass)Convert.ToInt32(reader[\"DamageClass\"])\n            )\n        {\n        }\n\n        public int ID { get; private set; }\n        public LocalizedString Name { get; private set; }\n        public DamageClass DamageClass { get; private set; }\n\n        public static LazyKeyValuePair<int, Type> CreatePair(Pokedex pokedex)\n        {\n            return new LazyKeyValuePair<int, Type>(\n                k => k == 0 ? null : (pokedex == null ? null : pokedex.Types[k]),\n                v => v == null ? 0 : v.ID);\n        }\n\n        public String Identifier\n        {\n            get\n            {\n                // xxx: this is a hack. Should database this field instead.\n                return Name[\"EN\"].ToLowerInvariant();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"library\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Microsoft\")]\r\n[assembly: AssemblyProduct(\"library\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2011\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"eae0bffb-742f-472f-8490-75c4bd769a39\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "library/Structures/ByteStatValues.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class ByteStatValues : StatValues<byte>\n    {\n        public ByteStatValues(byte hp, byte attack, byte defense, byte speed, byte special_attack, byte special_defense)\n            : base(hp, attack, defense, speed, special_attack, special_defense)\n        {\n        }\n\n        public ByteStatValues(IEnumerable<byte> s) : base(s)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/ContestStatValues.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class ConditionValues : StatValuesBase<byte>\n    {\n        public ConditionValues(byte cool, byte beauty, byte cute, byte smart, byte tough, byte sheen)\n            : base(cool, beauty, cute, smart, tough, sheen)\n        {\n\n        }\n\n        public byte Cool { get { return Stats[0]; } set { Stats[0] = value; } }\n        public byte Beauty { get { return Stats[1]; } set { Stats[1] = value; } }\n        public byte Cute { get { return Stats[2]; } set { Stats[2] = value; } }\n        public byte Smart { get { return Stats[3]; } set { Stats[3] = value; } }\n        public byte Tough { get { return Stats[4]; } set { Stats[4] = value; } }\n        public byte Sheen { get { return Stats[5]; } set { Stats[5] = value; } }\n\n        public static int ConditionsIndex(Conditions condition)\n        {\n            return (int)condition - 1;\n        }\n\n        public virtual byte this[Conditions stat]\n        {\n            get\n            {\n                int index = ConditionsIndex(stat);\n                if (index < 0 || index >= 6) throw new ArgumentException();\n                return Stats[index];\n            }\n            set\n            {\n                int index = ConditionsIndex(stat);\n                if (index < 0 || index >= 6) throw new ArgumentException();\n                Stats[index] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/Enums.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PkmnFoundations.Structures\r\n{\r\n    public enum Generations\r\n    {\r\n        Generation1 = 1,\r\n        Generation2 = 2,\r\n        Generation3 = 3,\r\n        Generation4 = 4,\r\n        Generation5 = 5,\r\n        Generation6 = 6,\r\n        Generation7 = 7,\r\n        Generation8 = 8\r\n    }\r\n\r\n    [Flags]\r\n    public enum GenerationFlags\r\n    {\r\n        Generation1 = 1,\r\n        Generation2 = 2,\r\n        Generation3 = 4,\r\n        Generation4 = 8,\r\n        Generation5 = 16,\r\n        Generation6 = 32,\r\n        Generation7 = 64,\r\n        Generation8 = 128\r\n    }\r\n\r\n    public enum LocationNumbering\r\n    {\r\n        Generation1,\r\n        Generation2,\r\n        Generation3,\r\n        Colosseum,\r\n        XD,\r\n        Generation4,\r\n        Generation5,\r\n        Generation6\r\n    }\r\n\r\n    public enum Versions : byte\r\n    {\r\n        // todo: fact check that these GenIII values\r\n        // are retained as-is through pal park.\r\n        FatefulEncounter = 0x00,\r\n        Sapphire = 0x01,\r\n        Ruby = 0x02,\r\n        Emerald = 0x03,\r\n        FireRed = 0x04,\r\n        LeafGreen = 0x05,\r\n        Colosseum = 0x0f,\r\n\r\n        Diamond = 0x0a,\r\n        Pearl = 0x0b,\r\n        Platinum = 0x0c,\r\n        HeartGold = 0x07,\r\n        SoulSilver = 0x08,\r\n\r\n        White = 0x14,\r\n        Black = 0x15,\r\n        White2 = 0x16,\r\n        Black2 = 0x17,\r\n\r\n        X = 0x18,\r\n        Y = 0x19,\r\n        AlphaSapphire = 0x1a,\r\n        OmegaRuby = 0x1b,\r\n    }\r\n\r\n    public enum Languages : byte\r\n    {\r\n        Japanese = 0x01,\r\n        English = 0x02,\r\n        French = 0x03,\r\n        Italian = 0x04,\r\n        German = 0x05,\r\n        Spanish = 0x07,\r\n        Korean = 0x08,\r\n    }\r\n\r\n    public enum EvolutionTriggers\r\n    {\r\n        Level = 1,\r\n        Item = 2,\r\n        Trade = 3,\r\n        Shed = 4\r\n    }\r\n\r\n    public enum TimeOfDay\r\n    {\r\n        Morning = 1,\r\n        Day = 2,\r\n        Night = 3\r\n    }\r\n\r\n    public enum Stats\r\n    {\r\n        Hp = 1,\r\n        Attack = 2,\r\n        Defense = 3,\r\n        Speed = 4,\r\n        SpecialAttack = 5,\r\n        SpecialDefense = 6\r\n    }\r\n\r\n    [Flags]\r\n    public enum StatFlags\r\n    {\r\n        None = 0,\r\n        Hp = 1,\r\n        Attack = 2,\r\n        Defense = 4,\r\n        Speed = 8,\r\n        SpecialAttack = 16,\r\n        SpecialDefense = 32\r\n    }\r\n\r\n    public enum Potential\r\n    {\r\n        Decent,\r\n        AboveAverage,\r\n        RelativelySuperior,\r\n        Outstanding\r\n    }\r\n\r\n    public enum Conditions\r\n    {\r\n        Cool = 1,\r\n        Beauty = 2,\r\n        Cute = 3,\r\n        Smart = 4,\r\n        Tough = 5,\r\n        Sheen = 6,\r\n    }\r\n\r\n    public enum DamageClass\r\n    {\r\n        None = 0,\r\n        Physical = 1,\r\n        Special = 2,\r\n        Support = 3\r\n    }\r\n\r\n    public enum GrowthRates\r\n    {\r\n        Slow = 1,\r\n        Medium = 2,\r\n        Fast = 3,\r\n        MediumSlow = 4,\r\n        Erratic = 5,\r\n        Fluctuating = 6\r\n    }\r\n\r\n    public enum Genders : byte\r\n    {\r\n        Male = 1,\r\n        Female = 2,\r\n        None = 3,\r\n        Either = 3\r\n    }\r\n\r\n    public enum TrainerGenders : byte\r\n    {\r\n        Male = 0,\r\n        Female = 1\r\n    }\r\n\r\n    [Flags]\r\n    public enum Markings : byte\r\n    {\r\n        Circle = 0x01,\r\n        Triangle = 0x02,\r\n        Square = 0x04,\r\n        Heart = 0x08,\r\n        Star = 0x10,\r\n        Diamond = 0x20\r\n    }\r\n\r\n    public enum EggGroups : byte\r\n    {\r\n        None = 0,\r\n        Monster = 1,\r\n        Water1 = 2,\r\n        Bug = 3,\r\n        Flying = 4,\r\n        Ground = 5,\r\n        Fairy = 6,\r\n        Plant = 7,\r\n        HumanShape = 8,\r\n        Water3 = 9,\r\n        Mineral = 10,\r\n        Indeterminate = 11,\r\n        Water2 = 12,\r\n        Ditto = 13,\r\n        Dragon = 14,\r\n        NoEggs = 15\r\n    }\r\n\r\n    public enum BattleTargets : byte\r\n    {\r\n        // Pasted straight from veekun.\r\n        // todo: Review and maybe clarify these names\r\n        SpecificMove = 1,\r\n        SelectedPokemonMeFirst = 2,\r\n        Ally = 3,\r\n        UsersField = 4,\r\n        UserOrAlly = 5,\r\n        OpponentsField = 6,\r\n        User = 7,\r\n        RandomOpponent = 8,\r\n        AllOtherPokemon = 9,\r\n        SelectedPokemon = 10,\r\n        AllOpponents = 11,\r\n        EntireField = 12,\r\n        UserAndAllies = 13,\r\n        AllPokemon = 14\r\n    }\r\n\r\n    public enum Natures : uint\r\n    {\r\n        Hardy = 0, Lonely = 1, Brave = 2, Adamant = 3, Naughty = 4,\r\n        Bold = 5, Docile = 6, Relaxed = 7, Impish = 8, Lax = 9,\r\n        Timid = 10, Hasty = 11, Serious = 12, Jolly = 13, Naive = 14,\r\n        Modest = 15, Mild = 16, Quiet = 17, Bashful = 18, Rash = 19,\r\n        Calm = 20, Gentle = 21, Sassy = 22, Careful = 23, Quirky = 24\r\n    }\r\n\r\n    public enum Pokerus\r\n    {\r\n        None,\r\n        Infected,\r\n        Cured\r\n    }\r\n\r\n    [Flags]\r\n    public enum ShinyLeaves : byte\r\n    {\r\n        LeafA = 1,\r\n        LeafB = 2,\r\n        LeafC = 4,\r\n        LeafD = 8,\r\n        LeafE = 16,\r\n        Crown = 32\r\n    }\r\n}\r\n"
  },
  {
    "path": "library/Structures/Format.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public static class Format\n    {\n        private static string[] m_marks = new string[] { \"●\", \"▲\", \"■\", \"♥\", \"★\", \"♦\" };\n\n        public static string Markings(Markings markings, string trueFormat, string falseFormat, string delimiter)\n        {\n            StringBuilder result = new StringBuilder();\n            int marking = 1;\n            for (int value = 0; value < 6; value++)\n            {\n                if (marking > 1) result.Append(delimiter);\n                string format = (((int)markings & marking) != 0) ? trueFormat : falseFormat;\n                result.Append(String.Format(format, m_marks[value]));\n\n                marking <<= 1;\n            }\n\n            return result.ToString();\n        }\n\n        public static string GenderSymbol(Genders gender)\n        {\n            switch (gender)\n            {\n                case Genders.Male:\n                    return \"♂\";\n                case Genders.Female:\n                    return \"♀\";\n                default:\n                    return \"\";\n            }\n        }\n\n        public static string ToIso639_1(Languages lang)\n        {\n            switch (lang)\n            {\n                case Languages.Japanese:\n                    return \"JA\";\n                case Languages.English:\n                    return \"EN\";\n                case Languages.French:\n                    return \"FR\";\n                case Languages.Italian:\n                    return \"IT\";\n                case Languages.German:\n                    return \"DE\";\n                case Languages.Spanish:\n                    return \"ES\";\n                case Languages.Korean:\n                    return \"KO\";\n                default:\n                    throw new ArgumentException();\n            }\n        }\n\n        public static Languages FromIso639_1(string lang)\n        {\n            switch (lang.ToUpperInvariant())\n            {\n                case \"JA\":\n                    return Languages.Japanese;\n                case \"EN\":\n                    return Languages.English;\n                case \"FR\":\n                    return Languages.French;\n                case \"IT\":\n                    return Languages.Italian;\n                case \"DE\":\n                    return Languages.German;\n                case \"ES\":\n                    return Languages.Spanish;\n                case \"KO\":\n                    return Languages.Korean;\n                default:\n                    throw new ArgumentException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/IntStatValues.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class IntStatValues : StatValues<int>\n    {\n        public IntStatValues(int hp, int attack, int defense, int speed, int special_attack, int special_defense)\n            : base(hp, attack, defense, speed, special_attack, special_defense)\n        {\n        }\n\n        public IntStatValues(IEnumerable<int> s) : base(s)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/IvStatValues.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class IvStatValues : ByteStatValues\n    {\n        public IvStatValues(byte hp, byte attack, byte defense, byte speed, byte special_attack, byte special_defense)\n            : base(hp, attack, defense, speed, special_attack, special_defense)\n        {\n        }\n\n        public IvStatValues(IEnumerable<byte> s) : base(s)\n        {\n            foreach (byte b in s)\n            {\n                if (b > 31) throw new ArgumentOutOfRangeException();\n            }\n        }\n\n        public IvStatValues(int ivs) : base(new byte[6])\n        {\n            for (int x = 0; x < 6; x++)\n            {\n                Stats[x] = (byte)(ivs & 31);\n                ivs >>= 5;\n            }\n        }\n\n        public override byte this[Stats stat]\n        {\n            get\n            {\n                return base[stat];\n            }\n            set\n            {\n                if (value > 31) throw new ArgumentOutOfRangeException();\n                base[stat] = value;\n            }\n        }\n\n        public int ToInt32()\n        {\n            int shift = 0;\n            int result = 0;\n            foreach (byte iv in Stats)\n            {\n                result |= iv << shift;\n                shift += 5;\n            }\n            return result;\n        }\n\n        public static byte UnpackIV(uint ivs, Stats stat)\n        {\n            int shift = (int)stat * 5 - 5;\n            return (byte)(ivs << shift & 0x1f);\n        }\n\n        public static uint PackIVs(byte HP, byte Attack, byte Defense, byte Speed, byte SpAttack, byte SpDefense)\n        {\n            return (uint)((HP & 31) |\n                ((Attack & 31) << 5) |\n                ((Defense & 31) << 10) |\n                ((Speed & 31) << 15) |\n                ((SpAttack & 31) << 20) |\n                ((SpDefense & 31) << 25));\n        }\n\n        public JudgeSummary JudgeSummary\n        {\n            get\n            {\n                Potential overall = Potential.Decent;\n                int overallInt = Stats.Sum(s => (int)s);\n                if (overallInt > 90) overall = Potential.AboveAverage;\n                if (overallInt > 120) overall = Potential.RelativelySuperior;\n                if (overallInt > 150) overall = Potential.Outstanding;\n\n                byte bestIvValue = 0;\n                StatFlags bestIvs = StatFlags.None;\n                StatFlags zeroIvs = StatFlags.None;\n                int current = 1;\n                for (int x = 0; x < Stats.Length; x++)\n                {\n                    if (Stats[x] > bestIvValue)\n                    {\n                        bestIvValue = Stats[x];\n                        bestIvs = (StatFlags)current;\n                    }\n                    else if (Stats[x] == bestIvValue)\n                    {\n                        bestIvs |= (StatFlags)current;\n                    }\n                    if (Stats[x] == 0)\n                    {\n                        zeroIvs |= (StatFlags)current;\n                    }\n                    current <<= 1;\n                }\n\n                Potential bestPotential = Potential.Decent;\n                if (bestIvValue > 15) bestPotential = Potential.AboveAverage;\n                if (bestIvValue > 25) bestPotential = Potential.RelativelySuperior;\n                if (bestIvValue > 30) bestPotential = Potential.Outstanding;\n\n                return new JudgeSummary(overall, bestIvs, bestPotential, zeroIvs);\n            }\n        }\n    }\n\n    public struct JudgeSummary\n    {\n        public Potential OverallPotential;\n        public StatFlags BestIvs;\n        public Potential BestPotential;\n        public StatFlags ZeroIvs;\n\n        public JudgeSummary(Potential overall_potential, StatFlags best_ivs, Potential best_potential, StatFlags zero_ivs)\n        {\n            OverallPotential = overall_potential;\n            BestIvs = best_ivs;\n            BestPotential = best_potential;\n            ZeroIvs = zero_ivs;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/MoveSlot.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Structures\n{\n    public class MoveSlot\n    {\n        public MoveSlot(Pokedex.Pokedex pokedex, int moveId, byte ppUps, byte remainingPp)\n        {\n            m_pokedex = pokedex;\n            Initialize();\n\n            MoveID = moveId;\n            PPUps = ppUps;\n            RemainingPP = remainingPp;\n        }\n\n        public void Initialize()\n        {\n            m_move_pair = Move.CreatePair(m_pokedex);\n        }\n\n        private Pokedex.Pokedex m_pokedex;\n\n        private LazyKeyValuePair<int, Move> m_move_pair;\n        public int MoveID \n        {\n            get { return m_move_pair.Key; }\n            set { m_move_pair.Key = value; }\n        }\n        public Move Move\n        {\n            get { return m_move_pair.Value; }\n            set { m_move_pair.Value = value; }\n        }\n\n        public byte PPUps { get; set; } // todo: validate range\n        public byte RemainingPP { get; set; } // todo: validate range (against pokedex data and pp ups)\n\n        public int PP \n        { \n            get \n            { \n                return Move == null ? 0 : Move.PP * (5 + PPUps) / 5; \n            } \n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/Pokemon4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.Structures\n{\n    public class Pokemon4 : PokemonPartyBase\n    {\n        public Pokemon4(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n            Initialize();\n        }\n\n        public Pokemon4(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public Pokemon4(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public Pokemon4(Pokedex.Pokedex pokedex, byte[] data, int offset) : base(pokedex)\n        {\n            Initialize();\n            Load(data, offset);\n        }\n\n        private void Initialize()\n        {\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            // header (unencrypted)\n            Personality = reader.ReadUInt32();                           // 0000\n            ushort zero = reader.ReadUInt16();                           // 0004\n            ushort checksum = reader.ReadUInt16();                       // 0006\n\n            // read out the main payload, apply xor decryption\n            byte[][] blocks = new byte[4][];\n            for (int x = 0; x < 4; x++)                                  // 0008\n                blocks[x] = reader.ReadBytes(32);\n\n            DecryptBlocks(blocks, checksum);\n            ShuffleBlocks(blocks, Personality, true);\n\n            IsBadEgg = ComputeChecksum(blocks) != checksum;\n\n            int ribbons1, ribbons2, ribbons3;\n\n            {\n                byte[] block = blocks[0];\n\n                SpeciesID = BitConverter.ToUInt16(block, 0);\n                HeldItemID = BitConverter.ToUInt16(block, 2);\n                TrainerID = BitConverter.ToUInt32(block, 4);\n                Experience = BitConverter.ToInt32(block, 8);\n                Happiness = block[12];\n                AbilityID = block[13];\n                Markings = (Markings)block[14];\n                Language = (Languages)block[15];\n                EVs = new ByteStatValues(block[16],\n                                         block[17],\n                                         block[18],\n                                         block[19],\n                                         block[20],\n                                         block[21]);\n                ContestStats = new ConditionValues(block[22],\n                                                   block[23], \n                                                   block[24], \n                                                   block[25], \n                                                   block[26], \n                                                   block[27]);\n\n                ribbons2 = BitConverter.ToInt32(block, 28);\n            }\n\n            {\n                byte[] block = blocks[1];\n\n                Moves[0] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 0), block[12], block[8]);\n                Moves[1] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 2), block[13], block[9]);\n                Moves[2] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 4), block[14], block[10]);\n                Moves[3] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 6), block[15], block[11]);\n\n                int ivs = BitConverter.ToInt32(block, 16);\n                IVs = new IvStatValues(ivs & 0x3fffffff);\n                IsEgg = (ivs & 0x40000000) != 0;\n                HasNickname = (ivs & 0x80000000) != 0;\n\n                ribbons1 = BitConverter.ToInt32(block, 20);\n\n                byte forme = block[24];\n                FatefulEncounter = (forme & 0x01) != 0;\n                m_female = (forme & 0x02) != 0;\n                m_genderless = (forme & 0x04) != 0;\n                FormID = (byte)(forme >> 3);\n\n                ShinyLeaves = (ShinyLeaves)block[25];\n                Unknown1 = BitConverter.ToUInt16(block, 26);\n\n                EggLocationID_Plat = BitConverter.ToUInt16(block, 28);\n                LocationID_Plat = BitConverter.ToUInt16(block, 30);\n            }\n\n            {\n                byte[] block = blocks[2];\n\n                NicknameEncoded = new EncodedString4(block, 0, 22);\n                Unknown2 = block[22];\n                Version = (Versions)block[23];\n                ribbons3 = BitConverter.ToInt32(block, 24);\n                Unknown3 = BitConverter.ToUInt32(block, 28);\n            }\n\n            {\n                byte[] block = blocks[3];\n\n                TrainerNameEncoded = new EncodedString4(block, 0, 16);\n\n                // todo: store as DateTime\n                EggDate = new byte[3];\n                Array.Copy(block, 16, EggDate, 0, 3);\n                Date = new byte[3];\n                Array.Copy(block, 19, Date, 0, 3);\n\n                EggLocationID = BitConverter.ToUInt16(block, 22);\n                LocationID = BitConverter.ToUInt16(block, 24);\n                byte pokerusStatus = block[26];\n                PokerusDaysLeft = (byte)(pokerusStatus & 0x0f);\n                PokerusStrain = (byte)(pokerusStatus >> 4);\n                PokeBallID = block[27];\n\n                byte encounter_level = block[28];\n                EncounterLevel = (byte)(encounter_level & 0x7f);\n                bool trainerFemale = (encounter_level & 0x80) != 0;\n                TrainerGender = trainerFemale ? TrainerGenders.Female : TrainerGenders.Male;\n\n                EncounterType = block[29];\n                PokeBallID_Hgss = block[30];\n                Unknown4 = block[31];\n            }\n\n            byte[] ribbons = new byte[12];\n            Array.Copy(BitConverter.GetBytes(ribbons1), 0, ribbons, 0, 4);\n            Array.Copy(BitConverter.GetBytes(ribbons2), 0, ribbons, 4, 4);\n            Array.Copy(BitConverter.GetBytes(ribbons3), 0, ribbons, 8, 4);\n\n            Ribbons.Clear();\n            UnknownRibbons.Clear();\n\n            IDictionary<int, Ribbon> allRibbons = m_pokedex.RibbonsByGeneration(Generations.Generation4);\n\n            for (int x = 0; x < 96; x++)\n            {\n                if (PokemonPartyBase.HasRibbon(ribbons, x))\n                {\n                    if (allRibbons.ContainsKey(x))\n                        Ribbons.Add(allRibbons[x]);\n                    else\n                        UnknownRibbons.Add(x);\n                }\n            }\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            // todo: implement save\n            throw new NotImplementedException();\n        }\n\n        public override Generations Generation\n        {\n            get { return Generations.Generation4; }\n        }\n\n        public ShinyLeaves ShinyLeaves { get; set; }\n        public ushort Unknown1 { get; set; } // appears just after a flags region storing gender, forme, shiny leaves, etc.\n\n        public EncodedString4 NicknameEncoded { get; set; } // public so trash bytes can be inspected/manipulated\n        public override string Nickname\n        {\n            get\n            {\n                return (NicknameEncoded == null) ? null : NicknameEncoded.Text;\n            }\n            set\n            {\n                if (Nickname == value) return;\n                if (NicknameEncoded == null) NicknameEncoded = new EncodedString4(value, 22);\n                else NicknameEncoded.Text = value;\n            }\n        }\n\n        public byte Unknown2 { get; set; } // appears just before Version\n        public uint Unknown3 { get; set; } // appears just after the last ribbon block\n        public EncodedString4 TrainerNameEncoded { get; set; }\n        public override string TrainerName\n        {\n            get\n            {\n                return (TrainerNameEncoded == null) ? null : TrainerNameEncoded.Text;\n            }\n            set\n            {\n                if (TrainerName == value) return;\n                if (TrainerNameEncoded == null) TrainerNameEncoded = new EncodedString4(value, 16);\n                else TrainerNameEncoded.Text = value;\n            }\n        }\n\n        // Dates encoding seems to be 1 byte for year, starting in 2000,\n        // 1 byte for month (1-12), and 1 byte for day of month (1-31, depending)\n        // EggDate is all 0s if not hatched.\n        // Platinum locations are 0 on DP, egg locations are 0 if not hatched.\n        public byte[] EggDate { get; set; } // 3 bytes\n        public byte[] Date { get; set; } // 3 bytes\n        public ushort EggLocationID { get; set; }\n        public ushort LocationID { get; set; }\n        public ushort EggLocationID_Plat { get; set; }\n        public ushort LocationID_Plat { get; set; }\n        public byte EncounterLevel { get; set; }\n\n        public override TrainerMemo TrainerMemo\n        {\n            get\n            {\n                // fixme: Pal Park memos are just saying Pal Park. We should be able to get the region too.\n                ushort eggLocationId, locationId;\n                bool plat = IsPlatHgss();\n                eggLocationId = (plat && EggLocationID_Plat != 0) ? EggLocationID_Plat : EggLocationID;\n                locationId = (plat && LocationID_Plat != 0) ? LocationID_Plat : LocationID;\n\n                return new TrainerMemo(m_pokedex, LocationNumbering.Generation4, \n                    TrainerMemoDateTime(EggDate), TrainerMemoDateTime(Date), \n                    eggLocationId, locationId, EncounterLevel == 0, EncounterLevel);\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public byte Unknown4 { get; set; } // appears just after HGSS pokeball\n\n        // todo: obtain complete list of Pokeball IDs in HGSS\n        public byte PokeBallID { get; set; }\n        public byte PokeBallID_Hgss { get; set; }\n\n        private Item m_pokeball;\n        public override Pokedex.Item Pokeball\n        {\n            get \n            {\n                if (m_pokeball != null) return m_pokeball;\n                int pokeballId = IsHgss() ? PokeBallID_Hgss : PokeBallID;\n                if (!m_pokedex.Pokeballs.ContainsKey(pokeballId)) return null;\n                m_pokeball = m_pokedex.Pokeballs[pokeballId];\n                return m_pokeball;\n            }\n            set \n            {\n                if (m_pokeball == value) return;\n                if (value == null) throw new ArgumentNullException();\n\n                if (value.PokeballValue == null) throw new ArgumentException(\"Item is not a valid Pokeball.\");\n                if ((int)value.PokeballValue > 255 || (int)value.PokeballValue < 0)\n                    throw new ArgumentOutOfRangeException(\"Pokeball ID must be within the valid range for a byte.\");\n\n                int pokeballId = (int)value.PokeballValue;\n                bool is_hgss = IsHgss();\n                bool is_hgss_pokeball = IsHgssPokeball(pokeballId);\n                if (!is_hgss && is_hgss_pokeball) throw new NotSupportedException(\"Can't place an HGSS Pokeball on a DPPt Pokémon.\");\n                // xxx: we can probably allow an hgss pokeball on a dppt pokemon\n                // although the structure won't be valid\n                // todo: fact check how hgss responds in this situation.\n\n                // todo: fact check these 3 values:\n                // 1. a pokemon in an HGSS ball has a DPPt value of 4\n                // 2. any pokemon from DPPt has an HGSS value of 0\n                // 3. a pokemon from HGSS in a DPPt ball has equal HGSS and DPPt values? Or is its HGSS value 0?\n                // (investigating pokemon in the system should be enough)\n                PokeBallID = (byte)(is_hgss_pokeball ? 4 : pokeballId);\n                PokeBallID_Hgss = (byte)(is_hgss ? pokeballId : 0);\n            }\n        }\n\n        private bool IsPlatHgss()\n        {\n            return (Version == Versions.Platinum || Version == Versions.HeartGold || Version == Versions.SoulSilver);\n        }\n\n        private bool IsHgss()\n        {\n            return (Version == Versions.HeartGold || Version == Versions.SoulSilver);\n        }\n\n        private static bool IsHgssPokeball(int pokeballId)\n        {\n            return pokeballId > 16;\n        }\n\n        public override ushort HP\n        {\n            get\n            {\n                return (ushort)Stats[Structures.Stats.Hp];\n            }\n        }\n\n        public override int Size\n        {\n            get { return 136; }\n        }\n\n        public static ValidationSummary ValidateActual(PokemonBase thePokemon)\n        {\n            if (thePokemon.SpeciesID < 1 || thePokemon.SpeciesID > 493) return new ValidationSummary() { IsValid = false };\n\n            try\n            {\n                if (thePokemon.Form == null) return new ValidationSummary() { IsValid = false };\n            }\n            catch (KeyNotFoundException)\n            {\n                return new ValidationSummary() { IsValid = false }; // form not in pokedex\n            }\n            // todo: Hardcoded checks don't belong here, but in the database.\n            // We need a Form.Generation and Form.CompatibleGeneration field\n            // to denote which generation a form was introduced in, and which\n            // generation it's broadly compatible with for trading.\n            //if (thePokemon.Form.CompatibleGeneration > Generations.Generation4) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.SpeciesID == 479 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // rotoms\n            if (thePokemon.SpeciesID == 487 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // origin giratina\n            if (thePokemon.SpeciesID == 492 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // sky shaymin\n            if (thePokemon.Form.Suffix == \"spiky-eared\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"fairy\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"mega\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"mega-x\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"mega-y\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"primal\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.SpeciesID == 25 && thePokemon.FormID > 0) return new ValidationSummary() { IsValid = false }; // cosplay pikachu\n\n            if (thePokemon.HeldItemID < 0) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 112 && thePokemon.HeldItemID <= 134) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 428) return new ValidationSummary() { IsValid = false };\n\n            if (thePokemon.AbilityID <= 0) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.AbilityID > 123) return new ValidationSummary() { IsValid = false };\n            if (!thePokemon.Form.Abilities(Generations.Generation4).Abilities.Contains(thePokemon.Ability))\n                return new ValidationSummary() { IsValid = false };\n\n            foreach (MoveSlot move in thePokemon.Moves)\n            {\n                if (move.MoveID < 0) return new ValidationSummary() { IsValid = false };\n                if (move.MoveID == 165) return new ValidationSummary() { IsValid = false }; // struggle\n                if (move.MoveID > 467) return new ValidationSummary() { IsValid = false };\n            }\n\n            if (thePokemon is Pokemon4)\n            {\n                var thePokemon4 = (Pokemon4)thePokemon;\n                if (!thePokemon4.NicknameEncoded.IsValid) return new ValidationSummary() { IsValid = false };\n                if (!thePokemon4.TrainerNameEncoded.IsValid) return new ValidationSummary() { IsValid = false };\n            }\n            else if (thePokemon is BattleTowerPokemon4)\n            {\n                var theBattleTowerPokemon4 = (BattleTowerPokemon4)thePokemon;\n                if (!theBattleTowerPokemon4.NicknameEncoded.IsValid) return new ValidationSummary() { IsValid = false };\n            }\n\n            return new ValidationSummary() { IsValid = true };\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/Pokemon5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.Structures\n{\n    public class Pokemon5 : PokemonPartyBase\n    {\n        public Pokemon5(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n            Initialize();\n        }\n\n        public Pokemon5(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public Pokemon5(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public Pokemon5(Pokedex.Pokedex pokedex, byte[] data, int offset)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data, offset);\n        }\n\n        private void Initialize()\n        {\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            // header (unencrypted)\n            Personality = reader.ReadUInt32();                           // 0000\n            ushort zero = reader.ReadUInt16();                           // 0004\n            ushort checksum = reader.ReadUInt16();                       // 0006\n\n            // read out the main payload, apply xor decryption\n            byte[][] blocks = new byte[4][];\n            for (int x = 0; x < 4; x++)                                  // 0008\n                blocks[x] = reader.ReadBytes(32);\n\n            DecryptBlocks(blocks, checksum);\n            ShuffleBlocks(blocks, Personality, true);\n\n            IsBadEgg = ComputeChecksum(blocks) != checksum;\n\n            int ribbons1, ribbons2, ribbons3;\n\n            {\n                byte[] block = blocks[0];\n\n                SpeciesID = BitConverter.ToUInt16(block, 0);\n                HeldItemID = BitConverter.ToUInt16(block, 2);\n                TrainerID = BitConverter.ToUInt32(block, 4);\n                Experience = BitConverter.ToInt32(block, 8);\n                Happiness = block[12];\n                AbilityID = block[13];\n                Markings = (Markings)block[14];\n                Language = (Languages)block[15];\n                EVs = new ByteStatValues(block[16],\n                                         block[17],\n                                         block[18],\n                                         block[19],\n                                         block[20],\n                                         block[21]);\n                ContestStats = new ConditionValues(block[22],\n                                                   block[23],\n                                                   block[24],\n                                                   block[25],\n                                                   block[26],\n                                                   block[27]);\n\n                ribbons2 = BitConverter.ToInt32(block, 28);\n            }\n\n            {\n                byte[] block = blocks[1];\n\n                Moves[0] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 0), block[12], block[8]);\n                Moves[1] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 2), block[13], block[9]);\n                Moves[2] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 4), block[14], block[10]);\n                Moves[3] = new MoveSlot(m_pokedex, BitConverter.ToUInt16(block, 6), block[15], block[11]);\n\n                int ivs = BitConverter.ToInt32(block, 16);\n                IVs = new IvStatValues(ivs & 0x3fffffff);\n                IsEgg = (ivs & 0x40000000) != 0;\n                HasNickname = (ivs & 0x80000000) != 0;\n\n                ribbons1 = BitConverter.ToInt32(block, 20);\n\n                byte forme = block[24];\n                FatefulEncounter = (forme & 0x01) != 0;\n                m_female = (forme & 0x02) != 0;\n                m_genderless = (forme & 0x04) != 0;\n                FormID = (byte)(forme >> 3);\n\n                m_nature = block[25]; // todo: which nature is real? Do they both need to match?\n                m_bw_flags = BitConverter.ToUInt16(block, 26);\n                HiddenAbility = (m_bw_flags & 0x01) != 0;\n                N = (m_bw_flags & 0x02) != 0;\n                Unknown1 = BitConverter.ToUInt32(block, 28);\n\n                EggLocationID_Plat = BitConverter.ToUInt16(block, 28);\n                LocationID_Plat = BitConverter.ToUInt16(block, 30);\n            }\n\n            {\n                byte[] block = blocks[2];\n\n                NicknameEncoded = new EncodedString5(block, 0, 22);\n                Unknown2 = block[22];\n                Version = (Versions)block[23];\n                ribbons3 = BitConverter.ToInt32(block, 24);\n                Unknown3 = BitConverter.ToUInt32(block, 28);\n            }\n\n            {\n                byte[] block = blocks[3];\n\n                TrainerNameEncoded = new EncodedString5(block, 0, 16);\n\n                EggDate = new byte[3];\n                Array.Copy(block, 16, EggDate, 0, 3);\n                Date = new byte[3];\n                Array.Copy(block, 19, Date, 0, 3);\n\n                EggLocationID = BitConverter.ToUInt16(block, 22);\n                LocationID = BitConverter.ToUInt16(block, 24);\n                byte pokerusStatus = block[26];\n                PokerusDaysLeft = (byte)(pokerusStatus & 0x0f);\n                PokerusStrain = (byte)(pokerusStatus >> 4);\n                PokeBallID = block[27];\n\n                byte encounter_level = block[28];\n                EncounterLevel = (byte)(encounter_level & 0x7f);\n                bool trainerFemale = (encounter_level & 0x80) != 0;\n                TrainerGender = trainerFemale ? TrainerGenders.Female : TrainerGenders.Male;\n\n                EncounterType = block[29];\n                Unknown4 = BitConverter.ToUInt16(block, 30);\n            }\n\n            byte[] ribbons = new byte[12];\n            Array.Copy(BitConverter.GetBytes(ribbons1), 0, ribbons, 0, 4);\n            Array.Copy(BitConverter.GetBytes(ribbons2), 0, ribbons, 4, 4);\n            Array.Copy(BitConverter.GetBytes(ribbons3), 0, ribbons, 8, 4);\n\n            Ribbons.Clear();\n            UnknownRibbons.Clear();\n\n            IDictionary<int, Ribbon> allRibbons = m_pokedex.RibbonsByGeneration(Generations.Generation5);\n\n            for (int x = 0; x < 96; x++)\n            {\n                if (PokemonPartyBase.HasRibbon(ribbons, x))\n                {\n                    if (allRibbons.ContainsKey(x))\n                        Ribbons.Add(allRibbons[x]);\n                    else\n                        UnknownRibbons.Add(x);\n                }\n            }\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            // todo: implement save\n            throw new NotImplementedException();\n        }\n\n        public override Generations Generation\n        {\n            get { return Generations.Generation5; }\n        }\n\n        private byte m_nature;\n        public override Natures Nature\n        {\n            get\n            {\n                return (Natures)(m_nature % 25u);\n            }\n        }\n\n        private ushort m_bw_flags;\n        public bool HiddenAbility { get; set; }\n        public bool N { get; set; }\n        public uint Unknown1 { get; set; } // appears just after a flags region storing DW ability and N ownership.\n\n        public EncodedString5 NicknameEncoded { get; set; } // public so trash bytes can be inspected/manipulated\n        public override string Nickname\n        {\n            get\n            {\n                return (NicknameEncoded == null) ? null : NicknameEncoded.Text;\n            }\n            set\n            {\n                if (Nickname == value) return;\n                if (NicknameEncoded == null) NicknameEncoded = new EncodedString5(value, 22);\n                else NicknameEncoded.Text = value;\n            }\n        }\n\n        public byte Unknown2 { get; set; } // appears just before Version\n        public uint Unknown3 { get; set; } // appears just after the last ribbon block\n        public EncodedString5 TrainerNameEncoded { get; set; }\n        public override string TrainerName\n        {\n            get\n            {\n                return (TrainerNameEncoded == null) ? null : TrainerNameEncoded.Text;\n            }\n            set\n            {\n                if (TrainerName == value) return;\n                if (TrainerNameEncoded == null) TrainerNameEncoded = new EncodedString5(value, 16);\n                else TrainerNameEncoded.Text = value;\n            }\n        }\n\n        public byte[] EggDate { get; set; } // 3 bytes\n        public byte[] Date { get; set; } // 3 bytes\n        public ushort EggLocationID { get; set; }\n        public ushort LocationID { get; set; }\n        public ushort EggLocationID_Plat { get; set; }\n        public ushort LocationID_Plat { get; set; }\n        public byte EncounterLevel { get; set; }\n\n        public override TrainerMemo TrainerMemo\n        {\n            get\n            {\n                // todo: fact check how BW2 stores trainer memo locations not present in BW1\n                ushort eggLocationId, locationId;\n                bool plat = false;// IsBw2();\n                eggLocationId = (plat && EggLocationID_Plat != 0) ? EggLocationID_Plat : EggLocationID;\n                locationId = (plat && LocationID_Plat != 0) ? LocationID_Plat : LocationID;\n\n                return new TrainerMemo(m_pokedex, LocationNumbering.Generation5,\n                    TrainerMemoDateTime(EggDate), TrainerMemoDateTime(Date),\n                    eggLocationId, locationId, EncounterLevel == 0, EncounterLevel);\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public ushort Unknown4 { get; set; } // appears just after encounter type. (includes what was HGSS's pokeball field)\n\n        // todo: obtain complete list of Pokeball IDs in Gen5. (same issue as hgss)\n        public byte PokeBallID { get; set; }\n        private Item m_pokeball;\n        public override Pokedex.Item Pokeball\n        {\n            get\n            {\n                if (m_pokeball != null) return m_pokeball;\n                if (!m_pokedex.Pokeballs.ContainsKey(PokeBallID)) return null;\n                m_pokeball = m_pokedex.Pokeballs[PokeBallID];\n                return m_pokeball;\n            }\n            set\n            {\n                if (m_pokeball == value) return;\n                if (value == null) throw new ArgumentNullException();\n\n                if (value.PokeballValue == null) throw new ArgumentException(\"Item is not a valid Pokeball.\");\n                if ((int)value.PokeballValue > 255 || (int)value.PokeballValue < 0)\n                    throw new ArgumentOutOfRangeException(\"Pokeball ID must be within the valid range for a byte.\");\n\n                int pokeballId = (int)value.PokeballValue;\n                PokeBallID = (byte)(pokeballId);\n            }\n        }\n\n        public override ushort HP\n        {\n            get\n            {\n                return (ushort)Stats[Structures.Stats.Hp];\n            }\n        }\n\n        private bool IsBw2()\n        {\n            return (Version == Versions.Black2 || Version == Versions.White2);\n        }\n\n        public override int Size\n        {\n            get { return 136; }\n        }\n\n        public static ValidationSummary ValidateActual(PokemonBase thePokemon)\n        {\n            if (thePokemon.SpeciesID < 1 || thePokemon.SpeciesID > 649) return new ValidationSummary() { IsValid = false };\n\n            try\n            {\n                if (thePokemon.Form == null) return new ValidationSummary() { IsValid = false };\n            }\n            catch (KeyNotFoundException)\n            {\n                return new ValidationSummary() { IsValid = false }; // form not in pokedex\n            }\n            if (thePokemon.SpeciesID == 641 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // therian tornadus\n            if (thePokemon.SpeciesID == 642 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // therian thundrus\n            if (thePokemon.SpeciesID == 645 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // therian landorus\n            if (thePokemon.SpeciesID == 646 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // black/white kyurem\n            if (thePokemon.SpeciesID == 647 && thePokemon.FormID != 0) return new ValidationSummary() { IsValid = false }; // resolute keldeo\n            if (thePokemon.Form.Suffix == \"spiky-eared\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"fairy\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"mega\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"mega-x\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"mega-y\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.Form.Suffix == \"primal\") return new ValidationSummary() { IsValid = false };\n            if (thePokemon.SpeciesID == 25 && thePokemon.FormID > 0) return new ValidationSummary() { IsValid = false }; // cosplay pikachu\n\n            if (thePokemon.HeldItemID < 0) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 113 && thePokemon.HeldItemID <= 115) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 120 && thePokemon.HeldItemID <= 133) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 328 && thePokemon.HeldItemID <= 503) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 505 && thePokemon.HeldItemID <= 536) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID == 574) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID == 576) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 578 && thePokemon.HeldItemID <= 579) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.HeldItemID >= 592) return new ValidationSummary() { IsValid = false };\n\n            if (thePokemon.AbilityID <= 0) return new ValidationSummary() { IsValid = false };\n            if (thePokemon.AbilityID > 164) return new ValidationSummary() { IsValid = false };\n            if (!thePokemon.Form.Abilities(Generations.Generation5).Abilities.Contains(thePokemon.Ability) &&\n                !thePokemon.Form.Abilities(Generations.Generation5).HiddenAbilities.Contains(thePokemon.Ability) &&\n                // Allow Blue Basculin to have Reckless. https://bulbapedia.bulbagarden.net/wiki/Basculin_(Pok%C3%A9mon)#Trivia\n                !(thePokemon.Form.Suffix == \"blue-striped\" && thePokemon.AbilityID == 120))\n                return new ValidationSummary() { IsValid = false };\n\n            foreach (MoveSlot move in thePokemon.Moves)\n            {\n                if (move.MoveID < 0) return new ValidationSummary() { IsValid = false };\n                if (move.MoveID == 165) return new ValidationSummary() { IsValid = false }; // struggle\n                if (move.MoveID > 559) return new ValidationSummary() { IsValid = false };\n            }\n\n            if (thePokemon is Pokemon5)\n            {\n                var thePokemon5 = (Pokemon5)thePokemon;\n                if (!thePokemon5.NicknameEncoded.IsValid) return new ValidationSummary() { IsValid = false };\n                if (!thePokemon5.TrainerNameEncoded.IsValid) return new ValidationSummary() { IsValid = false };\n            }\n            else if (thePokemon is BattleSubwayPokemon5)\n            {\n                var theBattleSubwayPokemon5 = (BattleSubwayPokemon5)thePokemon;\n                if (!theBattleSubwayPokemon5.NicknameEncoded.IsValid) return new ValidationSummary() { IsValid = false };\n            }\n\n            return new ValidationSummary() { IsValid = true };\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/PokemonBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Structures\n{\n    public abstract class PokemonBase : BinarySerializableBase\n    {\n        public PokemonBase(Pokedex.Pokedex pokedex)\n            : base()\n        {\n            m_pokedex = pokedex;\n            Initialize();\n        }\n\n        private void Initialize()\n        {\n            m_species_pair = Species.CreatePair(m_pokedex);\n            m_form_pair = Form.CreatePairForSpecies(m_pokedex, () => Species);\n            m_item_pair = Item.CreatePairForGeneration(m_pokedex, () => Generation);\n            m_ability_pair = Ability.CreatePair(m_pokedex);\n        }\n\n        protected Pokedex.Pokedex m_pokedex;\n        private MoveSlot[] m_moves = new MoveSlot[4];\n\n        private LazyKeyValuePair<int, Species> m_species_pair;\n        public int SpeciesID\n        {\n            get { return m_species_pair.Key; }\n            set\n            {\n                // changing species will cause the looked up Form to be\n                // incorrect so null it out.\n                m_species_pair.Key = value;\n                m_form_pair.Invalidate();\n            }\n        }\n        public Species Species\n        {\n            get { return m_species_pair.Value; }\n            set\n            {\n                m_species_pair.Value = value;\n                m_form_pair.Invalidate();\n            }\n        }\n\n        private LazyKeyValuePair<byte, Form> m_form_pair;\n        public byte FormID\n        {\n            get { return m_form_pair.Key; }\n            set\n            {\n                m_form_pair.Key = value;\n            }\n        }\n        public Form Form\n        {\n            get { return m_form_pair.Value; }\n            set\n            {\n                SpeciesID = value.SpeciesID;\n                m_form_pair.Value = value;\n            }\n        }\n\n        public abstract Generations Generation { get; }\n\n        private LazyKeyValuePair<int, Item> m_item_pair;\n        public int HeldItemID\n        {\n            get { return m_item_pair.Key; }\n            set { m_item_pair.Key = value; }\n        }\n        public Item HeldItem\n        {\n            get { return m_item_pair.Value; }\n            set { m_item_pair.Value = value; }\n        }\n\n        private LazyKeyValuePair<int, Ability> m_ability_pair;\n        public int AbilityID\n        {\n            get { return m_ability_pair.Key; }\n            set { m_ability_pair.Key = value; }\n        }\n        public Ability Ability\n        {\n            get { return m_ability_pair.Value; }\n            set { m_ability_pair.Value = value; }\n        }\n\n        public IList<MoveSlot> Moves { get { return m_moves; } }\n        public uint TrainerID { get; set; }\n        public uint Personality { get; set; }\n        public virtual Natures Nature { get { return (Natures)(Personality % 25u); } }\n        public byte Happiness { get; set; }\n        public Languages Language { get; set; }\n        public IvStatValues IVs { get; set; }\n        public ByteStatValues EVs { get; set; }\n\n        public abstract byte Level { get; set; }\n        public virtual Genders Gender \n        { \n            get\n            {\n                // https://bulbapedia.bulbagarden.net/wiki/Gender#In_Generations_III_to_V\n                var ratio = Species.GenderRatio;\n                switch (ratio)\n                {\n                    case 0:\n                        return Genders.Male;\n                    case 8:\n                        return Genders.Female;\n                    case 255:\n                        return Genders.None;\n                    default:\n                    {\n                        // massage gender value into the corresponding value in bulbapedia table.\n                        // This is off-by-one in true Game Freak fashion, causing a slight bias towards male Pokémon.\n                        uint mangledRatio = ratio * 32u - 1;\n                        uint pGender = Personality & 0xffu;\n                        return pGender >= mangledRatio ? Genders.Male : Genders.Female;\n                    }\n                }\n            }\n            set\n            {\n                // xxx: we don't really want this setter at all but we need to be able to override and provide a setter\n                // https://github.com/dotnet/csharplang/issues/1568\n                throw new NotSupportedException();\n            }\n        }\n        public abstract string Nickname { get; set; }\n\n        public virtual bool IsShiny\n        {\n            get\n            {\n                // Gen3/4/5 formula. Gen6 must override.\n                return ShinyTest(Personality, TrainerID, 3);\n            }\n        }\n\n        public static bool ShinyTest(uint personality, uint trainerId, int trimBits)\n        {\n            uint step1 = personality ^ trainerId;\n            int step2 = (int)((step1 >> 16) ^ (step1 & 0xffffu));\n            return step2 >> trimBits == 0;\n        }\n\n        public Characteristic Characteristic\n        {\n            get\n            {\n                int toCheck = (int)(Personality % 6u);\n                Stats bestStat = (Structures.Stats)(toCheck + 1);\n                byte bestStatValue = 0;\n                for (int x = 0; x < 6; x++)\n                {\n                    if (IVs[(Structures.Stats)(x + 1)] > bestStatValue)\n                    {\n                        bestStat = (Structures.Stats)(toCheck + 1);\n                        bestStatValue = IVs[(Structures.Stats)(x + 1)];\n                    }\n\n                    toCheck++;\n                    toCheck %= 6;\n                }\n\n                return new Characteristic(bestStat, (byte)(bestStatValue % (byte)5));\n            }\n        }\n\n        public virtual ValidationSummary Validate()\n        {\n            // xxx: this is another one of those inheritance diamond things.\n            // Since we specialize by generation after specializing by\n            // structure type, we have to roll our own vtable here to be able\n            // to have generation-specific validation in each inheritance\n            // branch.\n            // todo: Move some cross-generational validation logic over to\n            // this base method.\n            switch (this.Generation)\n            {\n                case Generations.Generation4:\n                    return Pokemon4.ValidateActual(this);\n                case Generations.Generation5:\n                    return Pokemon5.ValidateActual(this);\n                default:\n                    return new ValidationSummary() { IsValid = true };\n            }\n        }\n\n        protected static List<int> BlockScramble(uint personality)\n        {\n            int x = 4; // todo: this can be an argument but YAGNI\n            int xFactorial = 24;\n\n            //if (x < 0) throw new ArgumentOutOfRangeException();\n            //if (x == 0) return new int[0];\n\n            int index;\n\n            List<int> remaining = Enumerable.Range(0, x).ToList();\n            List<int> result = new List<int>(x);\n\n            while (x > 0)\n            {\n                int xMinusOneFactorial = xFactorial / x;\n\n                index = (int)((personality % xFactorial) / xMinusOneFactorial);\n                result.Add(remaining[index]);\n                remaining.RemoveAt(index);\n\n                x--;\n                xFactorial = xMinusOneFactorial;\n            }\n\n            return result;\n        }\n\n        protected static List<int> Invert(List<int> arg)\n        {\n            // todo: this is of general utility and should go in a utility class.\n            int max = arg.Max();\n            List<int> result = new List<int>(max);\n\n            for (int x = 0; x <= max; x++)\n                result.Add(arg.IndexOf(x));\n\n            return result;\n        }\n\n        #region Experience formulas\n        public static int ExperienceAt(int level, GrowthRates gr)\n        {\n            if (level > 100 || level < 1) throw new ArgumentOutOfRangeException(\"level\");\n            if (level == 1) return 0;\n            switch (gr)\n            {\n                case GrowthRates.Slow:\n                    return ExperienceAt_Slow(level);\n                case GrowthRates.Medium:\n                    return ExperienceAt_Medium(level);\n                case GrowthRates.Fast:\n                    return ExperienceAt_Fast(level);\n                case GrowthRates.MediumSlow:\n                    return ExperienceAt_MediumSlow(level);\n                case GrowthRates.Erratic:\n                    return ExperienceAt_Erratic(level);\n                case GrowthRates.Fluctuating:\n                    return ExperienceAt_Fluctuating(level);\n            }\n            throw new ArgumentException(\"gr\");\n        }\n\n        public static byte LevelAt(int experience, GrowthRates gr)\n        {\n            if (experience < 0) throw new ArgumentOutOfRangeException(\"experience\");\n\n            int minLevel = 1, maxLevel = 100;\n            int minExp = ExperienceAt(1, gr), maxExp = ExperienceAt(100, gr);\n\n            while (1 < 2)\n            {\n                if (maxExp <= experience) return (byte)maxLevel;\n                if (minLevel + 1 >= maxLevel) return (byte)minLevel;\n\n                int midLevel = (minLevel + maxLevel) >> 1;\n                int midExp = ExperienceAt(midLevel, gr);\n\n                if (experience >= midExp)\n                {\n                    minLevel = midLevel;\n                    minExp = midExp;\n                }\n                else\n                {\n                    maxLevel = midLevel;\n                    maxExp = midExp;\n                }\n            }\n        }\n\n        private static int ExperienceAt_Slow(int level)\n        {\n            int cube = level * level * level;\n            return 5 * cube / 4;\n        }\n\n        private static int ExperienceAt_Medium(int level)\n        {\n            int cube = level * level * level;\n            return cube;\n        }\n\n        private static int ExperienceAt_Fast(int level)\n        {\n            int cube = level * level * level;\n            return 4 * cube / 5;\n        }\n\n        private static int ExperienceAt_MediumSlow(int level)\n        {\n            int square = level * level;\n            int cube = square * level;\n            return 6 * cube / 5 - 15 * square + 100 * level - 140;\n        }\n\n        private static int ExperienceAt_Erratic(int level)\n        {\n            int cube = level * level * level;\n\n            if (level < 50)\n                return (cube * (100 - level)) / 50;\n            else if (level < 68)\n                return (cube * (150 - level)) / 100;\n            else if (level < 98)\n                // note that there is intentional rounding error cause by /3 inside the formula.\n                return (cube * ((1911 - 10 * level) / 3)) / 500;\n            else\n                return (cube * (160 - level)) / 100;\n        }\n\n        private static int ExperienceAt_Fluctuating(int level)\n        {\n            int cube = level * level * level;\n\n            if (level < 15)\n                return cube * ((level + 1) / 3 + 24) / 50;\n            else if (level < 36)\n                return cube * (level + 14) / 50;\n            else\n                return cube * (level / 2 + 32) / 50;\n        }\n        #endregion\n    }\n\n    public struct Characteristic\n    {\n        public Stats BestIv;\n        public byte BestIvModulo;\n\n        public Characteristic(Stats best_iv, byte best_iv_modulo)\n        {\n            BestIv = best_iv;\n            BestIvModulo = best_iv_modulo;\n        }\n\n        private static String[,] m_phrases = new String[,]\n        {\n            { \"Loves to eat\", \"Takes plenty of siestas\", \"Nods off a lot\", \"Scatters things often\", \"Likes to relax\"},\n            { \"Proud of its power\", \"Likes to thrash about\", \"A little quick tempered\", \"Likes to fight\", \"Quick tempered\"},\n            { \"Sturdy body\", \"Capable of taking hits\", \"Highly persistent\", \"Good endurance\", \"Good perseverance\"},\n            { \"Likes to run\", \"Alert to sounds\", \"Impetuous and silly\", \"Somewhat of a clown\", \"Quick to flee\"},\n            { \"Highly curious\", \"Mischievous\", \"Thoroughly cunning\", \"Often lost in thought\", \"Very finicky\"},\n            { \"Strong willed\", \"Somewhat vain\", \"Strongly defiant\", \"Hates to lose\", \"Somewhat stubborn\"},\n        };\n\n        public override string ToString()\n        {\n            // http://bulbapedia.bulbagarden.net/wiki/Characteristic#List_of_Characteristics\n            // todo: i18n\n            if (BestIv < Stats.Hp || BestIv > Stats.SpecialDefense) throw new InvalidOperationException();\n            if (BestIvModulo > 4) throw new InvalidOperationException();\n            return m_phrases[(int)BestIv - 1, BestIvModulo];\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/PokemonParty4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class PokemonParty4 : Pokemon4\n    {\n        public PokemonParty4(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n            Initialize();\n        }\n\n        public PokemonParty4(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public PokemonParty4(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public PokemonParty4(Pokedex.Pokedex pokedex, byte[] data, int offset)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data, offset);\n        }\n\n        private void Initialize()\n        {\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            base.Load(reader);\n\n            {\n                int rand = (int)Personality;\n                byte[] block = reader.ReadBytes(100);\n                for (int pos = 0; pos < 100; pos += 2)\n                {\n                    rand = DecryptRNG(rand);\n                    block[pos] ^= (byte)(rand >> 16);\n                    block[pos + 1] ^= (byte)(rand >> 24);\n                }\n\n                StatusAffliction = block[0];\n                Unknown5 = block[1];\n                Unknown6 = BitConverter.ToUInt16(block, 2);\n                // todo: validate this against the computed level\n                //Level = block[4];\n                CapsuleIndex = block[5];\n                _HP = BitConverter.ToUInt16(block, 6);\n                m_stats = new IntStatValues(BitConverter.ToUInt16(block, 8),\n                    BitConverter.ToUInt16(block, 10),\n                    BitConverter.ToUInt16(block, 12),\n                    BitConverter.ToUInt16(block, 14),\n                    BitConverter.ToUInt16(block, 16),\n                    BitConverter.ToUInt16(block, 18));\n\n                HeldItemTrash = new byte[56];\n                Array.Copy(block, 20, HeldItemTrash, 0, 56);\n                Seals = new byte[24];\n                Array.Copy(block, 76, Seals, 0, 24);\n            }\n        }\n\n        // todo: parse status afflictions (enum + sleep turns)\n        public byte StatusAffliction { get; set; }\n        // todo: Parse ball seals\n        public byte Unknown5 { get; set; }\n        public ushort Unknown6 { get; set; }\n        public byte CapsuleIndex { get; set; }\n        public override ushort HP { get { return _HP; } } // remaining hp\n        public ushort _HP { get; set; }\n        public byte[] HeldItemTrash { get; set; } // 56 bytes\n        public byte[] Seals { get; set; } // 24 bytes\n\n        // cached stats on the party structure. This gives rise to the\n        // \"box trick\" on Gens 1-4 whereby putting the pokemon into the box\n        // recalculates its stats.\n        private IntStatValues m_stats;\n        public override IntStatValues Stats\n        {\n            get { return m_stats; }\n        }\n\n        public override int Size\n        {\n            get { return 236; }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/PokemonParty5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class PokemonParty5 : Pokemon5\n    {\n        public PokemonParty5(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n            Initialize();\n        }\n\n        public PokemonParty5(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public PokemonParty5(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public PokemonParty5(Pokedex.Pokedex pokedex, byte[] data, int offset)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data, offset);\n        }\n\n        private void Initialize()\n        {\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            base.Load(reader);\n\n            {\n                int rand = (int)Personality;\n                byte[] block = reader.ReadBytes(100);\n                for (int pos = 0; pos < 100; pos += 2)\n                {\n                    rand = DecryptRNG(rand);\n                    block[pos] ^= (byte)(rand >> 16);\n                    block[pos + 1] ^= (byte)(rand >> 24);\n                }\n\n                StatusAffliction = block[0];\n                Unknown5 = block[1];\n                Unknown6 = BitConverter.ToUInt16(block, 2);\n                // todo: validate this against the computed level\n                //Level = block[4];\n                CapsuleIndex = block[5];\n                _HP = BitConverter.ToUInt16(block, 6);\n                // todo: validate this against computed stats\n                m_stats = new IntStatValues(BitConverter.ToUInt16(block, 8),\n                    BitConverter.ToUInt16(block, 10),\n                    BitConverter.ToUInt16(block, 12),\n                    BitConverter.ToUInt16(block, 14),\n                    BitConverter.ToUInt16(block, 16),\n                    BitConverter.ToUInt16(block, 18));\n\n                Mail = new byte[56];\n                Array.Copy(block, 20, Mail, 0, 56);\n                Unknown7 = new byte[8];\n                Array.Copy(block, 76, Unknown7, 0, 8);\n                Padding = new byte[16];\n                Array.Copy(block, 84, Padding, 0, 16);\n            }\n        }\n\n        // todo: parse status afflictions (enum + sleep turns)\n        public byte StatusAffliction { get; set; }\n        public byte Unknown5 { get; set; }\n        public ushort Unknown6 { get; set; }\n        public byte CapsuleIndex { get; set; }\n        public override ushort HP { get { return _HP; } } // remaining hp\n        public ushort _HP { get; set; }\n        public byte[] Mail { get; set; } // 56 bytes\n        public byte[] Unknown7 { get; set; } // 8 bytes\n        public byte[] Padding { get; set; } // 16 bytes. Pads the length to match the gen4 structure.\n\n        private IntStatValues m_stats;\n        public override IntStatValues Stats\n        {\n            get { return m_stats; }\n        }\n\n        public override int Size\n        {\n            get { return 236; }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/PokemonPartyBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Structures\n{\n    public abstract class PokemonPartyBase : PokemonBase\n    {\n        public PokemonPartyBase(Pokedex.Pokedex pokedex)\n            : base(pokedex)\n        {\n            Initialize();\n        }\n\n        private void Initialize()\n        {\n            Ribbons = new HashSet<Ribbon>();\n            UnknownRibbons = new HashSet<int>();\n        }\n\n        private int m_experience;\n        public int Experience \n        {\n            get\n            {\n                return m_experience;\n            }\n            set\n            {\n                if (m_experience == value) return;\n                m_experience = value;\n                m_level = null;\n                // xxx: if exp changes but level doesn't, this gets invalidated for no reason.\n                // (really needs observable)\n                m_stats = null;\n            }\n        }\n\n        private byte? m_level;\n        public override byte Level\n        {\n            get\n            {\n                if (m_level == null)\n                    m_level = LevelAt(m_experience, Species.GrowthRate);\n                return (byte)m_level;\n            }\n            set\n            {\n                if (m_level == value) return;\n                m_experience = ExperienceAt(value, Species.GrowthRate);\n                m_level = value;\n                m_stats = null;\n            }\n        }\n\n        protected bool m_female;\n        protected bool m_genderless;\n        public override Genders Gender\n        {\n            get\n            {\n                if (m_genderless) return Genders.None;\n                if (m_female) return Genders.Female;\n                return Genders.Male;\n            }\n            set\n            {\n                m_female = value == Genders.Female;\n                m_genderless = value == Genders.None;\n            }\n        }\n\n        public Markings Markings { get; set; }\n        public ConditionValues ContestStats { get; set; }\n        public bool IsEgg { get; set; }\n        public bool IsBadEgg { get; set; }\n\n        /// <summary>\n        /// this field decides whether or not its name gets reverted when it evolves.\n        /// </summary>\n        public bool HasNickname { get; set; }\n\n        /// <summary>\n        /// aka. obedience flag. A few pokemon, eg. Mew, are disobedient unless this is set.\n        /// </summary>\n        public bool FatefulEncounter { get; set; }\n\n        public Versions Version { get; set; }\n\n        public virtual TrainerMemo TrainerMemo { get; set; }\n        \n        // this is the notorious genIV encounter type flag, not used for much besides validation\n        public byte EncounterType { get; set; }\n\n        public abstract String TrainerName { get; set; }\n        public TrainerGenders TrainerGender { get; set; }\n\n        public abstract Item Pokeball { get; set; }\n\n        public HashSet<Ribbon> Ribbons { get; private set; }\n\n        /// <summary>\n        /// This allows preservation of unknown ribbon flags when saving.\n        /// </summary>\n        public HashSet<int> UnknownRibbons { get; private set; }\n\n        private IntStatValues m_stats = null;\n        public virtual IntStatValues Stats\n        {\n            get\n            {\n                if (m_stats == null)\n                {\n                    // todo: stat formula\n                    throw new NotImplementedException();\n                }\n                return m_stats;\n            }\n        }\n\n        private byte m_pokerus_days_left = 0;\n        public virtual byte PokerusDaysLeft\n        {\n            get\n            {\n                return m_pokerus_days_left;\n            }\n            set\n            {\n                if (value > 15) throw new ArgumentOutOfRangeException();\n                m_pokerus_days_left = value;\n            }\n        }\n\n        private byte m_pokerus_strain = 0;\n        public virtual byte PokerusStrain\n        {\n            get\n            {\n                return m_pokerus_strain;\n            }\n            set\n            {\n                if (value > 15) throw new ArgumentOutOfRangeException();\n                m_pokerus_strain = value;\n            }\n        }\n\n        public Pokerus Pokerus\n        {\n            get\n            {\n                // note: \"strain 0\" is invalid and will cause the pokemon to\n                // lose pokerus entirely once its days left hits 0.\n                if (PokerusDaysLeft > 0) return Pokerus.Infected;\n                if (PokerusStrain > 0) return Pokerus.Cured;\n                return Pokerus.None;\n            }\n        }\n\n        public abstract ushort HP { get; }\n\n        public static ushort ComputeChecksum(byte[] data)\n        {\n            ushort result = 0;\n            for (int x = 0; x < data.Length; x += 2)\n                result += BitConverter.ToUInt16(data, x);\n\n            return result;\n        }\n\n        public static ushort ComputeChecksum(byte[][] data)\n        {\n            return (ushort)data.Sum(inner => ComputeChecksum(inner));\n        }\n\n        protected static int DecryptRNG(int prev)\n        {\n            return prev * 0x41c64e6d + 0x6073;\n        }\n\n        protected static void DecryptBlocks(byte[][] blocks, ushort checksum)\n        {\n            int rand = (int)checksum;\n\n            for (int x = 0; x < 4; x++)\n            {\n                byte[] block = blocks[x];\n                for (int pos = 0; pos < 32; pos += 2)\n                {\n                    rand = DecryptRNG(rand);\n                    block[pos] ^= (byte)(rand >> 16);\n                    block[pos + 1] ^= (byte)(rand >> 24);\n                }\n            }\n        }\n\n        protected static void ShuffleBlocks(byte[][] blocks, uint personality, bool unshuffle)\n        {\n            // shuffle blocks to their correct order\n            List<int> blockSequence = BlockScramble((personality & 0x0003e000) >> 0x0d);\n            if (unshuffle) blockSequence = Invert(blockSequence);\n\n            AssertHelper.Equals(blockSequence.Count, 4);\n            {\n                byte[][] blocks2 = new byte[4][];\n                for (int x = 0; x < 4; x++)\n                    blocks2[x] = blocks[blockSequence[x]];\n                for (int x = 0; x < 4; x++)\n                    blocks[x] = blocks2[x];\n            }\n        }\n\n        public static bool HasRibbon(byte[] ribbons, int value)\n        {\n            if (value >= 96 || value < 0) throw new ArgumentOutOfRangeException();\n            int offset = value >> 3;\n            byte mask = (byte)(1 << (value & 0x07));\n            return (ribbons[offset] & mask) != 0;\n        }\n\n        protected static DateTime? TrainerMemoDateTime(byte[] data)\n        {\n            // todo: merge with GtsRecordBase datetime helper.\n            if (data.Length != 3) throw new ArgumentException();\n            if (data[1] == 0 && data[2] == 0 && data[0] == 0) return null;\n\n            try\n            {\n                return new DateTime(2000 + data[0], data[1], data[2]);\n            }\n            catch (ArgumentOutOfRangeException)\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/StatValues.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public class StatValues<T> : StatValuesBase<T> where T : struct\n    {\n        public StatValues(T hp, T attack, T defense, T speed, T special_attack, T special_defense)\n            : base(hp, attack, defense, speed, special_attack, special_defense)\n        {\n\n        }\n\n        public StatValues(IEnumerable<T> s) : base(s)\n        {\n        }\n\n        public T Hp { get { return Stats[0]; } set { Stats[0] = value; } }\n        public T Attack { get { return Stats[1]; } set { Stats[1] = value; } }\n        public T Defense { get { return Stats[2]; } set { Stats[2] = value; } }\n        public T Speed { get { return Stats[3]; } set { Stats[3] = value; } }\n        public T SpecialAttack { get { return Stats[4]; } set { Stats[4] = value; } }\n        public T SpecialDefense { get { return Stats[5]; } set { Stats[5] = value; } }\n\n        public static int StatsIndex(Stats stat)\n        {\n            return (int)stat - 1;\n        }\n\n        public virtual T this[Stats stat]\n        {\n            get\n            {\n                int index = StatsIndex(stat);\n                if (index < 0 || index >= 6) throw new ArgumentException();\n                return Stats[index];\n            }\n            set\n            {\n                int index = StatsIndex(stat);\n                if (index < 0 || index >= 6) throw new ArgumentException();\n                Stats[index] = value;\n            }\n        }\n\n        public override string ToString()\n        {\n            return String.Format(\"{0}/{1}/{2}/{4}/{5}/{3}\", Hp, Attack, Defense, Speed, SpecialAttack, SpecialDefense);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/StatValuesBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Structures\n{\n    public abstract class StatValuesBase<T> where T : struct\n    {\n        protected StatValuesBase(IEnumerable<T> s)\n        {\n            // fail without enumerating if possible\n            if (s is IList<T> && ((IList<T>)s).Count != 6) throw new ArgumentException(\"Collection must have exactly 6 elements.\", \"s\");\n            var arr = s.ToArray();\n            if (arr.Length != 6) throw new ArgumentException(\"Collection must have exactly 6 elements.\", \"s\");\n            Stats = arr;\n        }\n\n        protected StatValuesBase(T s0, T s1, T s2, T s3, T s4, T s5)\n            : this(new T[6] { s0, s1, s2, s3, s4, s5 })\n        {\n        }\n\n        protected T[] Stats { get; private set; }\n\n        public T[] ToArray()\n        {\n            return Stats.ToArray();\n        }\n    }\n}\n"
  },
  {
    "path": "library/Structures/TrainerMemo.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Structures\n{\n    public class TrainerMemo\n    {\n        public TrainerMemo(Pokedex.Pokedex pokedex, LocationNumbering numbering, \n            DateTime ? time_egg_obtained, DateTime ? time_encountered,\n            int location_egg_obtained_id, int location_encountered_id,\n            bool is_hatched, byte level_encountered)\n        {\n            m_pokedex = pokedex;\n            m_location_egg_obtained_pair = Location.CreatePairForLocationNumbering(m_pokedex, () => Numbering);\n            m_location_encountered_pair = Location.CreatePairForLocationNumbering(m_pokedex, () => Numbering);\n\n            Numbering = numbering;\n            TimeEggObtained = time_egg_obtained;\n            TimeEncountered = time_encountered;\n            m_location_egg_obtained_pair.Key = location_egg_obtained_id;\n            m_location_encountered_pair.Key = location_encountered_id;\n            IsHatched = is_hatched;\n            LevelEncountered = level_encountered;\n        }\n\n        private Pokedex.Pokedex m_pokedex;\n        public LocationNumbering Numbering { get; private set; }\n\n        public DateTime? TimeEggObtained { get; private set; }\n        public DateTime? TimeEncountered { get; private set; }\n\n        private LazyKeyValuePair<int, Location> m_location_egg_obtained_pair;\n        public int LocationEggObtainedID\n        {\n            get\n            {\n                return m_location_egg_obtained_pair.Key;\n            }\n        }\n        public Location LocationEggObtained\n        { \n            get\n            {\n                return m_location_egg_obtained_pair.Value;\n            }\n        }\n\n        private LazyKeyValuePair<int, Location> m_location_encountered_pair;\n        public int LocationEncounteredID\n        {\n            get\n            {\n                return m_location_encountered_pair.Key;\n            }\n        }\n        public Location LocationEncountered \n        { \n            get\n            {\n                return m_location_encountered_pair.Value;\n            }\n        }\n\n        public bool IsHatched { get; private set; }\n        public byte LevelEncountered { get; private set; }\n\n        public override String ToString()\n        {\n            if (IsHatched)\n            {\n                String timeEgg = TimeEggObtained == null ? \"???\" : ((DateTime)TimeEggObtained).ToString(\"D\");\n                String timeGiven = TimeEncountered == null ? \"???\" : ((DateTime)TimeEncountered).ToString(\"D\");\n                return String.Format(\"Egg obtained from {1} on {0:D}. Hatched in {3} on {2:D}.\", timeEgg, LocationToString(LocationEggObtained, LocationEggObtainedID), timeGiven, LocationToString(LocationEncountered, LocationEncounteredID));\n            }\n            else\n            {\n                String level = LevelEncountered.ToString();\n                String time = TimeEncountered == null ? \"???\" : ((DateTime)TimeEncountered).ToString(\"D\");\n                return String.Format(\"Met at Lv. {0} in {2} on {1:D}.\", level, time, LocationToString(LocationEncountered, LocationEncounteredID));\n            }\n        }\n\n        private String LocationToString(Location l, int id)\n        {\n            if (l == null || l.Name == null) return \"Mystery zone #\" + id.ToString();\n            return l.Name.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/AliasTable.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace PkmnFoundations.Support\n{\n  /// <summary>\n  /// Vose's implementation of the Alias method for choosing weighted randomly from a set.\n  ///\n  /// See: https://www.keithschwarz.com/darts-dice-coins/\n  /// </summary>\n  public class AliasTable<Type>\n  {\n    public static AliasTable<Type> NewWithWeights(Dictionary<Type, double> typesWithProbabilities)\n    {\n      List<Type> elements = new List<Type>();\n      foreach (var pair in typesWithProbabilities)\n      {\n        elements.Add(pair.Key);\n      }\n      Dictionary<Type, Type> table = new Dictionary<Type, Type>();\n      Dictionary<Type, double> probs = new Dictionary<Type, double>();\n\n      double size = (double)typesWithProbabilities.Count;\n      Stack<Type> smallTypes = new Stack<Type>();\n      Stack<Type> largeTypes = new Stack<Type>();\n      Dictionary<Type, double> scaledProbabilityMap = new Dictionary<Type, double>();\n\n      foreach (var pair in typesWithProbabilities)\n      {\n        double scaledProbability = pair.Value * size;\n        scaledProbabilityMap[pair.Key] = scaledProbability;\n\n        if (scaledProbability < 1.0)\n        {\n          smallTypes.Push(pair.Key);\n        }\n        else\n        {\n          largeTypes.Push(pair.Key);\n        }\n      }\n\n      while (smallTypes.Count != 0 && largeTypes.Count != 0)\n      {\n        Type smallElement = smallTypes.Pop();\n        Type largeElement = largeTypes.Pop();\n        table[smallElement] = largeElement;\n\n        double scaledSmall = scaledProbabilityMap[smallElement];\n        double scaledLarge = scaledProbabilityMap[largeElement];\n        probs[smallElement] = scaledSmall;\n        double newLarge = (scaledLarge + scaledSmall) - 1.0;\n        probs[largeElement] = newLarge;\n\n        if (newLarge < 1.0)\n        {\n          smallTypes.Push(largeElement);\n        }\n        else\n        {\n          largeTypes.Push(largeElement);\n        }\n      }\n\n      while (largeTypes.Count != 0)\n      {\n        Type largeElement = largeTypes.Pop();\n        probs[largeElement] = 1.0;\n      }\n\n      while (smallTypes.Count != 0)\n      {\n        Type smallElement = smallTypes.Pop();\n        probs[smallElement] = 1.0;\n      }\n\n      return new AliasTable<Type>(table, elements, probs);\n    }\n\n    public Type Sample()\n    {\n      Type element = elements[rng.Next(0, elements.Count)];\n      int number = rng.Next(0, 101);\n\n      double probability = probabilities[element];\n      if (number <= (probability * 100))\n      {\n        return element;\n      }\n      else\n      {\n        return underlyingTable[element];\n      }\n    }\n\n    private AliasTable(Dictionary<Type, Type> table, List<Type> elem, Dictionary<Type, double> probs)\n    {\n      underlyingTable = table;\n      elements = elem;\n      probabilities = probs;\n      rng = new Random();\n    }\n\n    private Dictionary<Type, Type> underlyingTable;\n    private List<Type> elements;\n    private Dictionary<Type, double> probabilities;\n    private Random rng;\n  }\n}\n"
  },
  {
    "path": "library/Support/AssertHelper.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\n\r\nnamespace PkmnFoundations.Support\r\n{\r\n    public class AssertHelper\r\n    {\r\n        public static void Assert(bool condition, String message)\r\n        {\r\n            if (!condition) LogHelper.Write(message, EventLogEntryType.Error);\r\n\r\n#if DEBUG\r\n            Debug.Assert(condition, message);\r\n#endif\r\n        }\r\n\r\n        public static void Assert(bool condition)\r\n        {\r\n            Assert(condition, \"Assert failed.\");\r\n        }\r\n\r\n        public static void Unreachable()\r\n        {\r\n            Assert(false, \"Assert failed: Unreachable code has been reached.\");\r\n        }\r\n\r\n        public static void Equals<T>(T first, T second) where T : IEquatable<T>\r\n        {\r\n            Assert(((IEquatable<T>)first).Equals((IEquatable<T>)second), \"Assert failed: Values are not equal.\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "library/Support/BinarySerializableBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    /// <summary>\n    /// Base class for objects which serialize using BinaryReader and BinaryWriter\n    /// </summary>\n    public abstract class BinarySerializableBase : ISerializable\n    {\n        // xxx: ISerializable may be useless or even non-idiomatic on this class.\n\n        public BinarySerializableBase()\n        {\n        }\n\n        public BinarySerializableBase(SerializationInfo info, StreamingContext context)\n        {\n            byte[] data = (byte[])info.GetValue(\"data\", typeof(byte[]));\n            Load(data, 0);\n        }\n\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\n        {\n            info.AddValue(\"data\", Save());\n        }\n\n        protected abstract void Save(BinaryWriter writer);\n        protected abstract void Load(BinaryReader reader);\n\n        /// <summary>\n        /// Size of the serialized structure in bytes\n        /// </summary>\n        public abstract int Size\n        {\n            get;\n        }\n\n        public byte[] Save()\n        {\n            byte[] data = new byte[Size];\n            Save(new BinaryWriter(new MemoryStream(data)));\n            return data;\n        }\n\n        public void Load(byte[] data, int offset)\n        {\n            if (offset + Size > data.Length) throw new ArgumentOutOfRangeException(\"offset\");\n            if (offset < 0) throw new ArgumentOutOfRangeException(\"offset\");\n            MemoryStream m = new MemoryStream(data, offset, Size);\n            Load(new BinaryReader(m));\n        }\n\n        public void Load(byte[] data)\n        {\n            if (Size > data.Length) throw new ArgumentException(\"Buffer is too small\");\n            Load(data, 0);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/EncodedString4.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\n\r\nnamespace PkmnFoundations.Support\r\n{\r\n\tpublic class EncodedString4 : EncodedStringBase\r\n    {\r\n        /// <summary>\r\n        /// Instances an EncodedString4 from its binary representation.\r\n        /// </summary>\r\n        /// <param name=\"data\">This buffer is copied.</param>\r\n        public EncodedString4(byte[] data) : base(data)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Instances an EncodedString4 from its binary representation.\r\n        /// </summary>\r\n        /// <param name=\"data\">Buffer to copy from</param>\r\n        /// <param name=\"start\">Offset in buffer</param>\r\n        /// <param name=\"length\">Number of bytes (not chars) to copy</param>\r\n        public EncodedString4(byte[] data, int start, int length) : base(data, start, length)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Instances an EncodedString4 from a Unicode string.\r\n        /// </summary>\r\n        /// <param name=\"text\">text</param>\r\n        /// <param name=\"length\">Length of encoded buffer in bytes (not chars)</param>\r\n        public EncodedString4(string text, int length) : base(text, length)\r\n        {\r\n        }\r\n\r\n        // todo: Use pointers for both of these\r\n\t\tpublic static string DecodeString_impl(byte[] data, int start, int count)\r\n\t\t{\r\n            if (data.Length < start + count) throw new ArgumentOutOfRangeException(\"count\");\r\n            if (count < 0) throw new ArgumentOutOfRangeException(\"count\");\r\n\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\r\n            for (int i = start; i < start + count * 2; i += 2)\r\n\t\t\t{\r\n\t\t\t\tushort gamecode = BitConverter.ToUInt16(data, i);\r\n\t\t\t\tif (gamecode == 0xffff) { break; }\r\n\t\t\t\tchar ch = Generation4TextLookupTable.ContainsKey(gamecode) ?\r\n                    Generation4TextLookupTable[gamecode] :\r\n                    '?';\r\n\r\n\t\t\t\tsb.Append(ch);\r\n\t\t\t}\r\n\r\n\t\t\treturn sb.ToString();\r\n\t\t}\r\n\r\n        public static string DecodeString_impl(byte[] data)\r\n        {\r\n            return DecodeString_impl(data, 0, data.Length >> 1);\r\n        }\r\n\r\n        public static byte[] EncodeString_impl(string str, int size)\r\n        {\r\n            int actualLength = (size >> 1) - 1;\r\n            if (str.Length > actualLength) throw new ArgumentOutOfRangeException(\"size\");\r\n\r\n            byte[] result = new byte[size];\r\n            MemoryStream m = new MemoryStream(result);\r\n\r\n            foreach (char c in str.ToCharArray())\r\n            {\r\n                m.Write(BitConverter.GetBytes(LookupReverse.ContainsKey(c) ? LookupReverse[c] : (ushort)0x01ac), 0, 2);\r\n            }\r\n\r\n            m.WriteByte(0xff);\r\n            m.WriteByte(0xff);\r\n            return result;\r\n        }\r\n\r\n        protected override string DecodeString(byte[] data, int start, int count)\r\n        {\r\n            return DecodeString_impl(data, start, count);\r\n        }\r\n\r\n        protected override byte[] EncodeString(string str, int size)\r\n        {\r\n            return EncodeString_impl(str, size);\r\n        }\r\n\r\n        public override bool IsValid\r\n        {\r\n            get\r\n            {\r\n                for (int i = 0; i < RawData.Length; i += 2)\r\n                {\r\n                    ushort gamecode = BitConverter.ToUInt16(RawData, i);\r\n                    if (gamecode == 0xffff) break;\r\n                    if (gamecode == 0x0000) return false;\r\n                }\r\n                return true;\r\n            }\r\n        }\r\n\r\n        public EncodedString4 Clone()\r\n        {\r\n            return new EncodedString4(RawData);\r\n        }\r\n\r\n        private static Dictionary<char, ushort> m_lookup_reverse = null;\r\n        private static Dictionary<char, ushort> LookupReverse\r\n        {\r\n            get\r\n            {\r\n                if (m_lookup_reverse == null)\r\n                {\r\n                    Dictionary<char, ushort> reverse = new Dictionary<char, ushort>(Generation4TextLookupTable.Count);\r\n\r\n                    foreach (KeyValuePair<ushort, char> pair in Generation4TextLookupTable)\r\n                    {\r\n                        if (!reverse.ContainsKey(pair.Value))\r\n                            reverse.Add(pair.Value, pair.Key);\r\n                    }\r\n\r\n                    m_lookup_reverse = reverse;\r\n                }\r\n                return m_lookup_reverse;\r\n            }\r\n        }\r\n\r\n        // Lookup table courtesy of Aqua\r\n        // https://github.com/projectpokemon/PPRE/blob/master/Table.tbl\r\n\t\tprivate static Dictionary<ushort, char> Generation4TextLookupTable = new Dictionary<ushort, char>\r\n\t\t{\r\n            {0x0001, '\\u3000'}, {0x0002, '\\u3041'}, {0x0003, '\\u3042'}, {0x0004, '\\u3043'},\r\n            {0x0005, '\\u3044'}, {0x0006, '\\u3045'}, {0x0007, '\\u3046'}, {0x0008, '\\u3047'},\r\n            {0x0009, '\\u3048'}, {0x000a, '\\u3049'}, {0x000b, '\\u304a'}, {0x000c, '\\u304b'},\r\n            {0x000d, '\\u304c'}, {0x000e, '\\u304d'}, {0x000f, '\\u304e'}, {0x0010, '\\u304f'},\r\n            {0x0011, '\\u3050'}, {0x0012, '\\u3051'}, {0x0013, '\\u3052'}, {0x0014, '\\u3053'},\r\n            {0x0015, '\\u3054'}, {0x0016, '\\u3055'}, {0x0017, '\\u3056'}, {0x0018, '\\u3057'},\r\n            {0x0019, '\\u3058'}, {0x001a, '\\u3059'}, {0x001b, '\\u305a'}, {0x001c, '\\u305b'},\r\n            {0x001d, '\\u305c'}, {0x001e, '\\u305d'}, {0x001f, '\\u305e'}, {0x0020, '\\u305f'},\r\n            {0x0021, '\\u3060'}, {0x0022, '\\u3061'}, {0x0023, '\\u3062'}, {0x0024, '\\u3063'},\r\n            {0x0025, '\\u3064'}, {0x0026, '\\u3065'}, {0x0027, '\\u3066'}, {0x0028, '\\u3067'},\r\n            {0x0029, '\\u3068'}, {0x002a, '\\u3069'}, {0x002b, '\\u306a'}, {0x002c, '\\u306b'},\r\n            {0x002d, '\\u306c'}, {0x002e, '\\u306d'}, {0x002f, '\\u306e'}, {0x0030, '\\u306f'},\r\n            {0x0031, '\\u3070'}, {0x0032, '\\u3071'}, {0x0033, '\\u3072'}, {0x0034, '\\u3073'},\r\n            {0x0035, '\\u3074'}, {0x0036, '\\u3075'}, {0x0037, '\\u3076'}, {0x0038, '\\u3077'},\r\n            {0x0039, '\\u3078'}, {0x003a, '\\u3079'}, {0x003b, '\\u307a'}, {0x003c, '\\u307b'},\r\n            {0x003d, '\\u307c'}, {0x003e, '\\u307d'}, {0x003f, '\\u307e'}, {0x0040, '\\u307f'},\r\n            {0x0041, '\\u3080'}, {0x0042, '\\u3081'}, {0x0043, '\\u3082'}, {0x0044, '\\u3083'},\r\n            {0x0045, '\\u3084'}, {0x0046, '\\u3085'}, {0x0047, '\\u3086'}, {0x0048, '\\u3087'},\r\n            {0x0049, '\\u3088'}, {0x004a, '\\u3089'}, {0x004b, '\\u308a'}, {0x004c, '\\u308b'},\r\n            {0x004d, '\\u308c'}, {0x004e, '\\u308d'}, {0x004f, '\\u308f'}, {0x0050, '\\u3092'},\r\n            {0x0051, '\\u3093'}, {0x0052, '\\u30a1'}, {0x0053, '\\u30a2'}, {0x0054, '\\u30a3'},\r\n            {0x0055, '\\u30a4'}, {0x0056, '\\u30a5'}, {0x0057, '\\u30a6'}, {0x0058, '\\u30a7'},\r\n            {0x0059, '\\u30a8'}, {0x005a, '\\u30a9'}, {0x005b, '\\u30aa'}, {0x005c, '\\u30ab'},\r\n            {0x005d, '\\u30ac'}, {0x005e, '\\u30ad'}, {0x005f, '\\u30ae'}, {0x0060, '\\u30af'},\r\n            {0x0061, '\\u30b0'}, {0x0062, '\\u30b1'}, {0x0063, '\\u30b2'}, {0x0064, '\\u30b3'},\r\n            {0x0065, '\\u30b4'}, {0x0066, '\\u30b5'}, {0x0067, '\\u30b6'}, {0x0068, '\\u30b7'},\r\n            {0x0069, '\\u30b8'}, {0x006a, '\\u30b9'}, {0x006b, '\\u30ba'}, {0x006c, '\\u30bb'},\r\n            {0x006d, '\\u30bc'}, {0x006e, '\\u30bd'}, {0x006f, '\\u30be'}, {0x0070, '\\u30bf'},\r\n            {0x0071, '\\u30c0'}, {0x0072, '\\u30c1'}, {0x0073, '\\u30c2'}, {0x0074, '\\u30c3'},\r\n            {0x0075, '\\u30c4'}, {0x0076, '\\u30c5'}, {0x0077, '\\u30c6'}, {0x0078, '\\u30c7'},\r\n            {0x0079, '\\u30c8'}, {0x007a, '\\u30c9'}, {0x007b, '\\u30ca'}, {0x007c, '\\u30cb'},\r\n            {0x007d, '\\u30cc'}, {0x007e, '\\u30cd'}, {0x007f, '\\u30ce'}, {0x0080, '\\u30cf'},\r\n            {0x0081, '\\u30d0'}, {0x0082, '\\u30d1'}, {0x0083, '\\u30d2'}, {0x0084, '\\u30d3'},\r\n            {0x0085, '\\u30d4'}, {0x0086, '\\u30d5'}, {0x0087, '\\u30d6'}, {0x0088, '\\u30d7'},\r\n            {0x0089, '\\u30d8'}, {0x008a, '\\u30d9'}, {0x008b, '\\u30da'}, {0x008c, '\\u30db'},\r\n            {0x008d, '\\u30dc'}, {0x008e, '\\u30dd'}, {0x008f, '\\u30de'}, {0x0090, '\\u30df'},\r\n            {0x0091, '\\u30e0'}, {0x0092, '\\u30e1'}, {0x0093, '\\u30e2'}, {0x0094, '\\u30e3'},\r\n            {0x0095, '\\u30e4'}, {0x0096, '\\u30e5'}, {0x0097, '\\u30e6'}, {0x0098, '\\u30e7'},\r\n            {0x0099, '\\u30e8'}, {0x009a, '\\u30e9'}, {0x009b, '\\u30ea'}, {0x009c, '\\u30eb'},\r\n            {0x009d, '\\u30ec'}, {0x009e, '\\u30ed'}, {0x009f, '\\u30ef'}, {0x00a0, '\\u30f2'},\r\n            {0x00a1, '\\u30f3'}, {0x00a2, '\\uff10'}, {0x00a3, '\\uff11'}, {0x00a4, '\\uff12'},\r\n            {0x00a5, '\\uff13'}, {0x00a6, '\\uff14'}, {0x00a7, '\\uff15'}, {0x00a8, '\\uff16'},\r\n            {0x00a9, '\\uff17'}, {0x00aa, '\\uff18'}, {0x00ab, '\\uff19'}, {0x00ac, '\\uff21'},\r\n            {0x00ad, '\\uff22'}, {0x00ae, '\\uff23'}, {0x00af, '\\uff24'}, {0x00b0, '\\uff25'},\r\n            {0x00b1, '\\uff26'}, {0x00b2, '\\uff27'}, {0x00b3, '\\uff28'}, {0x00b4, '\\uff29'},\r\n            {0x00b5, '\\uff2a'}, {0x00b6, '\\uff2b'}, {0x00b7, '\\uff2c'}, {0x00b8, '\\uff2d'},\r\n            {0x00b9, '\\uff2e'}, {0x00ba, '\\uff2f'}, {0x00bb, '\\uff30'}, {0x00bc, '\\uff31'},\r\n            {0x00bd, '\\uff32'}, {0x00be, '\\uff33'}, {0x00bf, '\\uff34'}, {0x00c0, '\\uff35'},\r\n            {0x00c1, '\\uff36'}, {0x00c2, '\\uff37'}, {0x00c3, '\\uff38'}, {0x00c4, '\\uff39'},\r\n            {0x00c5, '\\uff3a'}, {0x00c6, '\\uff41'}, {0x00c7, '\\uff42'}, {0x00c8, '\\uff43'},\r\n            {0x00c9, '\\uff44'}, {0x00ca, '\\uff45'}, {0x00cb, '\\uff46'}, {0x00cc, '\\uff47'},\r\n            {0x00cd, '\\uff48'}, {0x00ce, '\\uff49'}, {0x00cf, '\\uff4a'}, {0x00d0, '\\uff4b'},\r\n            {0x00d1, '\\uff4c'}, {0x00d2, '\\uff4d'}, {0x00d3, '\\uff4e'}, {0x00d4, '\\uff4f'},\r\n            {0x00d5, '\\uff50'}, {0x00d6, '\\uff51'}, {0x00d7, '\\uff52'}, {0x00d8, '\\uff53'},\r\n            {0x00d9, '\\uff54'}, {0x00da, '\\uff55'}, {0x00db, '\\uff56'}, {0x00dc, '\\uff57'},\r\n            {0x00dd, '\\uff58'}, {0x00de, '\\uff59'}, {0x00df, '\\uff5a'}, {0x00e1, '\\uff01'},\r\n            {0x00e2, '\\uff1f'}, {0x00e3, '\\u3001'}, {0x00e4, '\\u3002'}, {0x00e5, '\\u22ef'},\r\n            {0x00e6, '\\u30fb'}, {0x00e7, '\\uff0f'}, {0x00e8, '\\u300c'}, {0x00e9, '\\u300d'},\r\n            {0x00ea, '\\u300e'}, {0x00eb, '\\u300f'}, {0x00ec, '\\uff08'}, {0x00ed, '\\uff09'},\r\n            {0x00ee, '\\u2642'}, {0x00ef, '\\u2640'}, {0x00f0, '\\uff0b'}, {0x00f1, '\\uff0d'},\r\n            {0x00f2, '\\u00d7'}, {0x00f3, '\\u00f7'}, {0x00f4, '\\uff1d'}, {0x00f5, '\\uff5a'},\r\n            {0x00f6, '\\uff1a'}, {0x00f7, '\\uff1b'}, {0x00f8, '\\uff0e'}, {0x00f9, '\\uff0c'},\r\n            {0x00fa, '\\u2664'}, {0x00fb, '\\u2667'}, {0x00fc, '\\u2665'}, {0x00fd, '\\u2662'},\r\n            {0x00fe, '\\u2606'}, {0x00ff, '\\u25ce'}, {0x0100, '\\u25cb'}, {0x0101, '\\u25a1'},\r\n            {0x0102, '\\u25b3'}, {0x0103, '\\u25c7'}, {0x0104, '\\uff20'}, {0x0105, '\\u266a'},\r\n            {0x0106, '\\uff05'}, {0x0107, '\\u2600'}, {0x0108, '\\u2601'}, {0x0109, '\\u2602'},\r\n            {0x010a, '\\u2744'}, {0x010b, '\\u260b'}, {0x010c, '\\u2654'}, {0x010d, '\\u2655'},\r\n            {0x010e, '\\u260a'}, {0x010f, '\\u21d7'}, {0x0110, '\\u21d8'}, {0x0111, '\\u263e'},\r\n            {0x0112, '\\u00a5'}, {0x0113, '\\u2648'}, {0x0114, '\\u2649'}, {0x0115, '\\u264a'},\r\n            {0x0116, '\\u264b'}, {0x0117, '\\u264c'}, {0x0118, '\\u264d'}, {0x0119, '\\u264e'},\r\n            {0x011a, '\\u264f'}, {0x011b, '\\u2190'}, {0x011c, '\\u2191'}, {0x011d, '\\u2193'},\r\n            {0x011e, '\\u2192'}, {0x011f, '\\u2023'}, {0x0120, '\\uff06'}, {0x0121, '\\u0030'},\r\n            {0x0122, '\\u0031'}, {0x0123, '\\u0032'}, {0x0124, '\\u0033'}, {0x0125, '\\u0034'},\r\n            {0x0126, '\\u0035'}, {0x0127, '\\u0036'}, {0x0128, '\\u0037'}, {0x0129, '\\u0038'},\r\n            {0x012a, '\\u0039'}, {0x012b, '\\u0041'}, {0x012c, '\\u0042'}, {0x012d, '\\u0043'},\r\n            {0x012e, '\\u0044'}, {0x012f, '\\u0045'}, {0x0130, '\\u0046'}, {0x0131, '\\u0047'},\r\n            {0x0132, '\\u0048'}, {0x0133, '\\u0049'}, {0x0134, '\\u004a'}, {0x0135, '\\u004b'},\r\n            {0x0136, '\\u004c'}, {0x0137, '\\u004d'}, {0x0138, '\\u004e'}, {0x0139, '\\u004f'},\r\n            {0x013a, '\\u0050'}, {0x013b, '\\u0051'}, {0x013c, '\\u0052'}, {0x013d, '\\u0053'},\r\n            {0x013e, '\\u0054'}, {0x013f, '\\u0055'}, {0x0140, '\\u0056'}, {0x0141, '\\u0057'},\r\n            {0x0142, '\\u0058'}, {0x0143, '\\u0059'}, {0x0144, '\\u005a'}, {0x0145, '\\u0061'},\r\n            {0x0146, '\\u0062'}, {0x0147, '\\u0063'}, {0x0148, '\\u0064'}, {0x0149, '\\u0065'},\r\n            {0x014a, '\\u0066'}, {0x014b, '\\u0067'}, {0x014c, '\\u0068'}, {0x014d, '\\u0069'},\r\n            {0x014e, '\\u006a'}, {0x014f, '\\u006b'}, {0x0150, '\\u006c'}, {0x0151, '\\u006d'},\r\n            {0x0152, '\\u006e'}, {0x0153, '\\u006f'}, {0x0154, '\\u0070'}, {0x0155, '\\u0071'},\r\n            {0x0156, '\\u0072'}, {0x0157, '\\u0073'}, {0x0158, '\\u0074'}, {0x0159, '\\u0075'},\r\n            {0x015a, '\\u0076'}, {0x015b, '\\u0077'}, {0x015c, '\\u0078'}, {0x015d, '\\u0079'},\r\n            {0x015e, '\\u007a'}, {0x015f, '\\u00c0'}, {0x0160, '\\u00c1'}, {0x0161, '\\u00c2'},\r\n            {0x0162, '\\u00c3'}, {0x0163, '\\u00c4'}, {0x0164, '\\u00c5'}, {0x0165, '\\u00c6'},\r\n            {0x0166, '\\u00c7'}, {0x0167, '\\u00c8'}, {0x0168, '\\u00c9'}, {0x0169, '\\u00ca'},\r\n            {0x016a, '\\u00cb'}, {0x016b, '\\u00cc'}, {0x016c, '\\u00cd'}, {0x016d, '\\u00ce'},\r\n            {0x016e, '\\u00cf'}, {0x016f, '\\u00d0'}, {0x0170, '\\u00d1'}, {0x0171, '\\u00d2'},\r\n            {0x0172, '\\u00d3'}, {0x0173, '\\u00d4'}, {0x0174, '\\u00d5'}, {0x0175, '\\u00d6'},\r\n            {0x0176, '\\u00d7'}, {0x0177, '\\u00d8'}, {0x0178, '\\u00d9'}, {0x0179, '\\u00da'},\r\n            {0x017a, '\\u00db'}, {0x017b, '\\u00dc'}, {0x017c, '\\u00dd'}, {0x017d, '\\u00de'},\r\n            {0x017e, '\\u00df'}, {0x017f, '\\u00e0'}, {0x0180, '\\u00e1'}, {0x0181, '\\u00e2'},\r\n            {0x0182, '\\u00e3'}, {0x0183, '\\u00e4'}, {0x0184, '\\u00e5'}, {0x0185, '\\u00e6'},\r\n            {0x0186, '\\u00e7'}, {0x0187, '\\u00e8'}, {0x0188, '\\u00e9'}, {0x0189, '\\u00ea'},\r\n            {0x018a, '\\u00eb'}, {0x018b, '\\u00ec'}, {0x018c, '\\u00ed'}, {0x018d, '\\u00ee'},\r\n            {0x018e, '\\u00ef'}, {0x018f, '\\u00f0'}, {0x0190, '\\u00f1'}, {0x0191, '\\u00f2'},\r\n            {0x0192, '\\u00f3'}, {0x0193, '\\u00f4'}, {0x0194, '\\u00f5'}, {0x0195, '\\u00f6'},\r\n            {0x0196, '\\u00f7'}, {0x0197, '\\u00f8'}, {0x0198, '\\u00f9'}, {0x0199, '\\u00fa'},\r\n            {0x019a, '\\u00fb'}, {0x019b, '\\u00fc'}, {0x019c, '\\u00fd'}, {0x019d, '\\u00fe'},\r\n            {0x019e, '\\u00ff'}, {0x019f, '\\u0152'}, {0x01a0, '\\u0153'}, {0x01a1, '\\u015e'},\r\n            {0x01a2, '\\u015f'}, {0x01a3, '\\u00aa'}, {0x01a4, '\\u00ba'}, {0x01a5, '\\u00b9'},\r\n            {0x01a6, '\\u00b2'}, {0x01a7, '\\u00b3'}, {0x01a8, '\\u0024'}, {0x01a9, '\\u00a1'},\r\n            {0x01aa, '\\u00bf'}, {0x01ab, '\\u0021'}, {0x01ac, '\\u003f'}, {0x01ad, '\\u002c'},\r\n            {0x01ae, '\\u002e'}, {0x01af, '\\u2026'}, {0x01b0, '\\uff65'}, {0x01b1, '\\u002f'},\r\n            {0x01b2, '\\u2018'}, {0x01b3, '\\u2019'}, {0x01b4, '\\u201c'}, {0x01b5, '\\u201d'},\r\n            {0x01b6, '\\u201e'}, {0x01b7, '\\u300a'}, {0x01b8, '\\u300b'}, {0x01b9, '\\u0028'},\r\n            {0x01ba, '\\u0029'}, {0x01bb, '\\u2642'}, {0x01bc, '\\u2640'}, {0x01bd, '\\u002b'},\r\n            {0x01be, '\\u002d'}, {0x01bf, '\\u002a'}, {0x01c0, '\\u0023'}, {0x01c1, '\\u003d'},\r\n            {0x01c2, '\\u0026'}, {0x01c3, '\\u007e'}, {0x01c4, '\\u003a'}, {0x01c5, '\\u003b'},\r\n            {0x01c6, '\\u246f'}, {0x01c7, '\\u2470'}, {0x01c8, '\\u2471'}, {0x01c9, '\\u2472'},\r\n            {0x01ca, '\\u2473'}, {0x01cb, '\\u2474'}, {0x01cc, '\\u2475'}, {0x01cd, '\\u2476'},\r\n            {0x01ce, '\\u2477'}, {0x01cf, '\\u2478'}, {0x01d0, '\\u0040'}, {0x01d1, '\\u2479'},\r\n            {0x01d2, '\\u0025'}, {0x01d3, '\\u247a'}, {0x01d4, '\\u247b'}, {0x01d5, '\\u247c'},\r\n            {0x01d6, '\\u247d'}, {0x01d7, '\\u247e'}, {0x01d8, '\\u247f'}, {0x01d9, '\\u2480'},\r\n            {0x01da, '\\u2481'}, {0x01db, '\\u2482'}, {0x01dc, '\\u2483'}, {0x01dd, '\\u2484'},\r\n            {0x01de, '\\u0020'}, {0x01df, '\\u2485'}, {0x01e0, '\\u2486'}, {0x01e1, '\\u2487'},\r\n            {0x01e8, '\\u00b0'}, {0x01e9, '\\u005f'}, {0x01ea, '\\uff3f'}, {0x0400, '\\uac00'},\r\n            {0x0401, '\\uac01'}, {0x0402, '\\uac04'}, {0x0403, '\\uac07'}, {0x0404, '\\uac08'},\r\n            {0x0405, '\\uac09'}, {0x0406, '\\uac0a'}, {0x0407, '\\uac10'}, {0x0408, '\\uac11'},\r\n            {0x0409, '\\uac12'}, {0x040a, '\\uac13'}, {0x040b, '\\uac14'}, {0x040c, '\\uac15'},\r\n            {0x040d, '\\uac16'}, {0x040e, '\\uac17'}, {0x0410, '\\uac19'}, {0x0411, '\\uac1a'},\r\n            {0x0412, '\\uac1b'}, {0x0413, '\\uac1c'}, {0x0414, '\\uac1d'}, {0x0415, '\\uac20'},\r\n            {0x0416, '\\uac24'}, {0x0417, '\\uac2c'}, {0x0418, '\\uac2d'}, {0x0419, '\\uac2f'},\r\n            {0x041a, '\\uac30'}, {0x041b, '\\uac31'}, {0x041c, '\\uac38'}, {0x041d, '\\uac39'},\r\n            {0x041e, '\\uac3c'}, {0x041f, '\\uac40'}, {0x0420, '\\uac4b'}, {0x0421, '\\uac4d'},\r\n            {0x0422, '\\uac54'}, {0x0423, '\\uac58'}, {0x0424, '\\uac5c'}, {0x0425, '\\uac70'},\r\n            {0x0426, '\\uac71'}, {0x0427, '\\uac74'}, {0x0428, '\\uac77'}, {0x0429, '\\uac78'},\r\n            {0x042a, '\\uac7a'}, {0x042b, '\\uac80'}, {0x042c, '\\uac81'}, {0x042d, '\\uac83'},\r\n            {0x042e, '\\uac84'}, {0x042f, '\\uac85'}, {0x0430, '\\uac86'}, {0x0431, '\\uac89'},\r\n            {0x0432, '\\uac8a'}, {0x0433, '\\uac8b'}, {0x0434, '\\uac8c'}, {0x0435, '\\uac90'},\r\n            {0x0436, '\\uac94'}, {0x0437, '\\uac9c'}, {0x0438, '\\uac9d'}, {0x0439, '\\uac9f'},\r\n            {0x043a, '\\uaca0'}, {0x043b, '\\uaca1'}, {0x043c, '\\uaca8'}, {0x043d, '\\uaca9'},\r\n            {0x043e, '\\uacaa'}, {0x043f, '\\uacac'}, {0x0440, '\\uacaf'}, {0x0441, '\\uacb0'},\r\n            {0x0442, '\\uacb8'}, {0x0443, '\\uacb9'}, {0x0444, '\\uacbb'}, {0x0445, '\\uacbc'},\r\n            {0x0446, '\\uacbd'}, {0x0447, '\\uacc1'}, {0x0448, '\\uacc4'}, {0x0449, '\\uacc8'},\r\n            {0x044a, '\\uaccc'}, {0x044b, '\\uacd5'}, {0x044c, '\\uacd7'}, {0x044d, '\\uace0'},\r\n            {0x044e, '\\uace1'}, {0x044f, '\\uace4'}, {0x0450, '\\uace7'}, {0x0451, '\\uace8'},\r\n            {0x0452, '\\uacea'}, {0x0453, '\\uacec'}, {0x0454, '\\uacef'}, {0x0455, '\\uacf0'},\r\n            {0x0456, '\\uacf1'}, {0x0457, '\\uacf3'}, {0x0458, '\\uacf5'}, {0x0459, '\\uacf6'},\r\n            {0x045a, '\\uacfc'}, {0x045b, '\\uacfd'}, {0x045c, '\\uad00'}, {0x045d, '\\uad04'},\r\n            {0x045e, '\\uad06'}, {0x045f, '\\uad0c'}, {0x0460, '\\uad0d'}, {0x0461, '\\uad0f'},\r\n            {0x0462, '\\uad11'}, {0x0463, '\\uad18'}, {0x0464, '\\uad1c'}, {0x0465, '\\uad20'},\r\n            {0x0466, '\\uad29'}, {0x0467, '\\uad2c'}, {0x0468, '\\uad2d'}, {0x0469, '\\uad34'},\r\n            {0x046a, '\\uad35'}, {0x046b, '\\uad38'}, {0x046c, '\\uad3c'}, {0x046d, '\\uad44'},\r\n            {0x046e, '\\uad45'}, {0x046f, '\\uad47'}, {0x0470, '\\uad49'}, {0x0471, '\\uad50'},\r\n            {0x0472, '\\uad54'}, {0x0473, '\\uad58'}, {0x0474, '\\uad61'}, {0x0475, '\\uad63'},\r\n            {0x0476, '\\uad6c'}, {0x0477, '\\uad6d'}, {0x0478, '\\uad70'}, {0x0479, '\\uad73'},\r\n            {0x047a, '\\uad74'}, {0x047b, '\\uad75'}, {0x047c, '\\uad76'}, {0x047d, '\\uad7b'},\r\n            {0x047e, '\\uad7c'}, {0x047f, '\\uad7d'}, {0x0480, '\\uad7f'}, {0x0481, '\\uad81'},\r\n            {0x0482, '\\uad82'}, {0x0483, '\\uad88'}, {0x0484, '\\uad89'}, {0x0485, '\\uad8c'},\r\n            {0x0486, '\\uad90'}, {0x0487, '\\uad9c'}, {0x0488, '\\uad9d'}, {0x0489, '\\uada4'},\r\n            {0x048a, '\\uadb7'}, {0x048b, '\\uadc0'}, {0x048c, '\\uadc1'}, {0x048d, '\\uadc4'},\r\n            {0x048e, '\\uadc8'}, {0x048f, '\\uadd0'}, {0x0490, '\\uadd1'}, {0x0491, '\\uadd3'},\r\n            {0x0492, '\\uaddc'}, {0x0493, '\\uade0'}, {0x0494, '\\uade4'}, {0x0495, '\\uadf8'},\r\n            {0x0496, '\\uadf9'}, {0x0497, '\\uadfc'}, {0x0498, '\\uadff'}, {0x0499, '\\uae00'},\r\n            {0x049a, '\\uae01'}, {0x049b, '\\uae08'}, {0x049c, '\\uae09'}, {0x049d, '\\uae0b'},\r\n            {0x049e, '\\uae0d'}, {0x049f, '\\uae14'}, {0x04a0, '\\uae30'}, {0x04a1, '\\uae31'},\r\n            {0x04a2, '\\uae34'}, {0x04a3, '\\uae37'}, {0x04a4, '\\uae38'}, {0x04a5, '\\uae3a'},\r\n            {0x04a6, '\\uae40'}, {0x04a7, '\\uae41'}, {0x04a8, '\\uae43'}, {0x04a9, '\\uae45'},\r\n            {0x04aa, '\\uae46'}, {0x04ab, '\\uae4a'}, {0x04ac, '\\uae4c'}, {0x04ad, '\\uae4d'},\r\n            {0x04ae, '\\uae4e'}, {0x04af, '\\uae50'}, {0x04b0, '\\uae54'}, {0x04b1, '\\uae56'},\r\n            {0x04b2, '\\uae5c'}, {0x04b3, '\\uae5d'}, {0x04b4, '\\uae5f'}, {0x04b5, '\\uae60'},\r\n            {0x04b6, '\\uae61'}, {0x04b7, '\\uae65'}, {0x04b8, '\\uae68'}, {0x04b9, '\\uae69'},\r\n            {0x04ba, '\\uae6c'}, {0x04bb, '\\uae70'}, {0x04bc, '\\uae78'}, {0x04bd, '\\uae79'},\r\n            {0x04be, '\\uae7b'}, {0x04bf, '\\uae7c'}, {0x04c0, '\\uae7d'}, {0x04c1, '\\uae84'},\r\n            {0x04c2, '\\uae85'}, {0x04c3, '\\uae8c'}, {0x04c4, '\\uaebc'}, {0x04c5, '\\uaebd'},\r\n            {0x04c6, '\\uaebe'}, {0x04c7, '\\uaec0'}, {0x04c8, '\\uaec4'}, {0x04c9, '\\uaecc'},\r\n            {0x04ca, '\\uaecd'}, {0x04cb, '\\uaecf'}, {0x04cc, '\\uaed0'}, {0x04cd, '\\uaed1'},\r\n            {0x04ce, '\\uaed8'}, {0x04cf, '\\uaed9'}, {0x04d0, '\\uaedc'}, {0x04d1, '\\uaee8'},\r\n            {0x04d2, '\\uaeeb'}, {0x04d3, '\\uaeed'}, {0x04d4, '\\uaef4'}, {0x04d5, '\\uaef8'},\r\n            {0x04d6, '\\uaefc'}, {0x04d7, '\\uaf07'}, {0x04d8, '\\uaf08'}, {0x04d9, '\\uaf0d'},\r\n            {0x04da, '\\uaf10'}, {0x04db, '\\uaf2c'}, {0x04dc, '\\uaf2d'}, {0x04dd, '\\uaf30'},\r\n            {0x04de, '\\uaf32'}, {0x04df, '\\uaf34'}, {0x04e0, '\\uaf3c'}, {0x04e1, '\\uaf3d'},\r\n            {0x04e2, '\\uaf3f'}, {0x04e3, '\\uaf41'}, {0x04e4, '\\uaf42'}, {0x04e5, '\\uaf43'},\r\n            {0x04e6, '\\uaf48'}, {0x04e7, '\\uaf49'}, {0x04e8, '\\uaf50'}, {0x04e9, '\\uaf5c'},\r\n            {0x04ea, '\\uaf5d'}, {0x04eb, '\\uaf64'}, {0x04ec, '\\uaf65'}, {0x04ed, '\\uaf79'},\r\n            {0x04ee, '\\uaf80'}, {0x04ef, '\\uaf84'}, {0x04f0, '\\uaf88'}, {0x04f1, '\\uaf90'},\r\n            {0x04f2, '\\uaf91'}, {0x04f3, '\\uaf95'}, {0x04f4, '\\uaf9c'}, {0x04f5, '\\uafb8'},\r\n            {0x04f6, '\\uafb9'}, {0x04f7, '\\uafbc'}, {0x04f8, '\\uafc0'}, {0x04f9, '\\uafc7'},\r\n            {0x04fa, '\\uafc8'}, {0x04fb, '\\uafc9'}, {0x04fc, '\\uafcb'}, {0x04fd, '\\uafcd'},\r\n            {0x04fe, '\\uafce'}, {0x04ff, '\\uafd4'}, {0x0500, '\\uafdc'}, {0x0501, '\\uafe8'},\r\n            {0x0502, '\\uafe9'}, {0x0503, '\\uaff0'}, {0x0504, '\\uaff1'}, {0x0505, '\\uaff4'},\r\n            {0x0506, '\\uaff8'}, {0x0507, '\\ub000'}, {0x0508, '\\ub001'}, {0x0509, '\\ub004'},\r\n            {0x050a, '\\ub00c'}, {0x050b, '\\ub010'}, {0x050c, '\\ub014'}, {0x050d, '\\ub01c'},\r\n            {0x050e, '\\ub01d'}, {0x050f, '\\ub028'}, {0x0510, '\\ub044'}, {0x0511, '\\ub045'},\r\n            {0x0512, '\\ub048'}, {0x0513, '\\ub04a'}, {0x0514, '\\ub04c'}, {0x0515, '\\ub04e'},\r\n            {0x0516, '\\ub053'}, {0x0517, '\\ub054'}, {0x0518, '\\ub055'}, {0x0519, '\\ub057'},\r\n            {0x051a, '\\ub059'}, {0x051b, '\\ub05d'}, {0x051c, '\\ub07c'}, {0x051d, '\\ub07d'},\r\n            {0x051e, '\\ub080'}, {0x051f, '\\ub084'}, {0x0520, '\\ub08c'}, {0x0521, '\\ub08d'},\r\n            {0x0522, '\\ub08f'}, {0x0523, '\\ub091'}, {0x0524, '\\ub098'}, {0x0525, '\\ub099'},\r\n            {0x0526, '\\ub09a'}, {0x0527, '\\ub09c'}, {0x0528, '\\ub09f'}, {0x0529, '\\ub0a0'},\r\n            {0x052a, '\\ub0a1'}, {0x052b, '\\ub0a2'}, {0x052c, '\\ub0a8'}, {0x052d, '\\ub0a9'},\r\n            {0x052e, '\\ub0ab'}, {0x052f, '\\ub0ac'}, {0x0530, '\\ub0ad'}, {0x0531, '\\ub0ae'},\r\n            {0x0532, '\\ub0af'}, {0x0533, '\\ub0b1'}, {0x0534, '\\ub0b3'}, {0x0535, '\\ub0b4'},\r\n            {0x0536, '\\ub0b5'}, {0x0537, '\\ub0b8'}, {0x0538, '\\ub0bc'}, {0x0539, '\\ub0c4'},\r\n            {0x053a, '\\ub0c5'}, {0x053b, '\\ub0c7'}, {0x053c, '\\ub0c8'}, {0x053d, '\\ub0c9'},\r\n            {0x053e, '\\ub0d0'}, {0x053f, '\\ub0d1'}, {0x0540, '\\ub0d4'}, {0x0541, '\\ub0d8'},\r\n            {0x0542, '\\ub0e0'}, {0x0543, '\\ub0e5'}, {0x0544, '\\ub108'}, {0x0545, '\\ub109'},\r\n            {0x0546, '\\ub10b'}, {0x0547, '\\ub10c'}, {0x0548, '\\ub110'}, {0x0549, '\\ub112'},\r\n            {0x054a, '\\ub113'}, {0x054b, '\\ub118'}, {0x054c, '\\ub119'}, {0x054d, '\\ub11b'},\r\n            {0x054e, '\\ub11c'}, {0x054f, '\\ub11d'}, {0x0550, '\\ub123'}, {0x0551, '\\ub124'},\r\n            {0x0552, '\\ub125'}, {0x0553, '\\ub128'}, {0x0554, '\\ub12c'}, {0x0555, '\\ub134'},\r\n            {0x0556, '\\ub135'}, {0x0557, '\\ub137'}, {0x0558, '\\ub138'}, {0x0559, '\\ub139'},\r\n            {0x055a, '\\ub140'}, {0x055b, '\\ub141'}, {0x055c, '\\ub144'}, {0x055d, '\\ub148'},\r\n            {0x055e, '\\ub150'}, {0x055f, '\\ub151'}, {0x0560, '\\ub154'}, {0x0561, '\\ub155'},\r\n            {0x0562, '\\ub158'}, {0x0563, '\\ub15c'}, {0x0564, '\\ub160'}, {0x0565, '\\ub178'},\r\n            {0x0566, '\\ub179'}, {0x0567, '\\ub17c'}, {0x0568, '\\ub180'}, {0x0569, '\\ub182'},\r\n            {0x056a, '\\ub188'}, {0x056b, '\\ub189'}, {0x056c, '\\ub18b'}, {0x056d, '\\ub18d'},\r\n            {0x056e, '\\ub192'}, {0x056f, '\\ub193'}, {0x0570, '\\ub194'}, {0x0571, '\\ub198'},\r\n            {0x0572, '\\ub19c'}, {0x0573, '\\ub1a8'}, {0x0574, '\\ub1cc'}, {0x0575, '\\ub1d0'},\r\n            {0x0576, '\\ub1d4'}, {0x0577, '\\ub1dc'}, {0x0578, '\\ub1dd'}, {0x0579, '\\ub1df'},\r\n            {0x057a, '\\ub1e8'}, {0x057b, '\\ub1e9'}, {0x057c, '\\ub1ec'}, {0x057d, '\\ub1f0'},\r\n            {0x057e, '\\ub1f9'}, {0x057f, '\\ub1fb'}, {0x0580, '\\ub1fd'}, {0x0581, '\\ub204'},\r\n            {0x0582, '\\ub205'}, {0x0583, '\\ub208'}, {0x0584, '\\ub20b'}, {0x0585, '\\ub20c'},\r\n            {0x0586, '\\ub214'}, {0x0587, '\\ub215'}, {0x0588, '\\ub217'}, {0x0589, '\\ub219'},\r\n            {0x058a, '\\ub220'}, {0x058b, '\\ub234'}, {0x058c, '\\ub23c'}, {0x058d, '\\ub258'},\r\n            {0x058e, '\\ub25c'}, {0x058f, '\\ub260'}, {0x0590, '\\ub268'}, {0x0591, '\\ub269'},\r\n            {0x0592, '\\ub274'}, {0x0593, '\\ub275'}, {0x0594, '\\ub27c'}, {0x0595, '\\ub284'},\r\n            {0x0596, '\\ub285'}, {0x0597, '\\ub289'}, {0x0598, '\\ub290'}, {0x0599, '\\ub291'},\r\n            {0x059a, '\\ub294'}, {0x059b, '\\ub298'}, {0x059c, '\\ub299'}, {0x059d, '\\ub29a'},\r\n            {0x059e, '\\ub2a0'}, {0x059f, '\\ub2a1'}, {0x05a0, '\\ub2a3'}, {0x05a1, '\\ub2a5'},\r\n            {0x05a2, '\\ub2a6'}, {0x05a3, '\\ub2aa'}, {0x05a4, '\\ub2ac'}, {0x05a5, '\\ub2b0'},\r\n            {0x05a6, '\\ub2b4'}, {0x05a7, '\\ub2c8'}, {0x05a8, '\\ub2c9'}, {0x05a9, '\\ub2cc'},\r\n            {0x05aa, '\\ub2d0'}, {0x05ab, '\\ub2d2'}, {0x05ac, '\\ub2d8'}, {0x05ad, '\\ub2d9'},\r\n            {0x05ae, '\\ub2db'}, {0x05af, '\\ub2dd'}, {0x05b0, '\\ub2e2'}, {0x05b1, '\\ub2e4'},\r\n            {0x05b2, '\\ub2e5'}, {0x05b3, '\\ub2e6'}, {0x05b4, '\\ub2e8'}, {0x05b5, '\\ub2eb'},\r\n            {0x05b6, '\\ub2ec'}, {0x05b7, '\\ub2ed'}, {0x05b8, '\\ub2ee'}, {0x05b9, '\\ub2ef'},\r\n            {0x05ba, '\\ub2f3'}, {0x05bb, '\\ub2f4'}, {0x05bc, '\\ub2f5'}, {0x05bd, '\\ub2f7'},\r\n            {0x05be, '\\ub2f8'}, {0x05bf, '\\ub2f9'}, {0x05c0, '\\ub2fa'}, {0x05c1, '\\ub2fb'},\r\n            {0x05c2, '\\ub2ff'}, {0x05c3, '\\ub300'}, {0x05c4, '\\ub301'}, {0x05c5, '\\ub304'},\r\n            {0x05c6, '\\ub308'}, {0x05c7, '\\ub310'}, {0x05c8, '\\ub311'}, {0x05c9, '\\ub313'},\r\n            {0x05ca, '\\ub314'}, {0x05cb, '\\ub315'}, {0x05cc, '\\ub31c'}, {0x05cd, '\\ub354'},\r\n            {0x05ce, '\\ub355'}, {0x05cf, '\\ub356'}, {0x05d0, '\\ub358'}, {0x05d1, '\\ub35b'},\r\n            {0x05d2, '\\ub35c'}, {0x05d3, '\\ub35e'}, {0x05d4, '\\ub35f'}, {0x05d5, '\\ub364'},\r\n            {0x05d6, '\\ub365'}, {0x05d7, '\\ub367'}, {0x05d8, '\\ub369'}, {0x05d9, '\\ub36b'},\r\n            {0x05da, '\\ub36e'}, {0x05db, '\\ub370'}, {0x05dc, '\\ub371'}, {0x05dd, '\\ub374'},\r\n            {0x05de, '\\ub378'}, {0x05df, '\\ub380'}, {0x05e0, '\\ub381'}, {0x05e1, '\\ub383'},\r\n            {0x05e2, '\\ub384'}, {0x05e3, '\\ub385'}, {0x05e4, '\\ub38c'}, {0x05e5, '\\ub390'},\r\n            {0x05e6, '\\ub394'}, {0x05e7, '\\ub3a0'}, {0x05e8, '\\ub3a1'}, {0x05e9, '\\ub3a8'},\r\n            {0x05ea, '\\ub3ac'}, {0x05eb, '\\ub3c4'}, {0x05ec, '\\ub3c5'}, {0x05ed, '\\ub3c8'},\r\n            {0x05ee, '\\ub3cb'}, {0x05ef, '\\ub3cc'}, {0x05f0, '\\ub3ce'}, {0x05f1, '\\ub3d0'},\r\n            {0x05f2, '\\ub3d4'}, {0x05f3, '\\ub3d5'}, {0x05f4, '\\ub3d7'}, {0x05f5, '\\ub3d9'},\r\n            {0x05f6, '\\ub3db'}, {0x05f7, '\\ub3dd'}, {0x05f8, '\\ub3e0'}, {0x05f9, '\\ub3e4'},\r\n            {0x05fa, '\\ub3e8'}, {0x05fb, '\\ub3fc'}, {0x05fc, '\\ub410'}, {0x05fd, '\\ub418'},\r\n            {0x05fe, '\\ub41c'}, {0x05ff, '\\ub420'}, {0x0600, '\\ub428'}, {0x0601, '\\ub429'},\r\n            {0x0602, '\\ub42b'}, {0x0603, '\\ub434'}, {0x0604, '\\ub450'}, {0x0605, '\\ub451'},\r\n            {0x0606, '\\ub454'}, {0x0607, '\\ub458'}, {0x0608, '\\ub460'}, {0x0609, '\\ub461'},\r\n            {0x060a, '\\ub463'}, {0x060b, '\\ub465'}, {0x060c, '\\ub46c'}, {0x060d, '\\ub480'},\r\n            {0x060e, '\\ub488'}, {0x060f, '\\ub49d'}, {0x0610, '\\ub4a4'}, {0x0611, '\\ub4a8'},\r\n            {0x0612, '\\ub4ac'}, {0x0613, '\\ub4b5'}, {0x0614, '\\ub4b7'}, {0x0615, '\\ub4b9'},\r\n            {0x0616, '\\ub4c0'}, {0x0617, '\\ub4c4'}, {0x0618, '\\ub4c8'}, {0x0619, '\\ub4d0'},\r\n            {0x061a, '\\ub4d5'}, {0x061b, '\\ub4dc'}, {0x061c, '\\ub4dd'}, {0x061d, '\\ub4e0'},\r\n            {0x061e, '\\ub4e3'}, {0x061f, '\\ub4e4'}, {0x0620, '\\ub4e6'}, {0x0621, '\\ub4ec'},\r\n            {0x0622, '\\ub4ed'}, {0x0623, '\\ub4ef'}, {0x0624, '\\ub4f1'}, {0x0625, '\\ub4f8'},\r\n            {0x0626, '\\ub514'}, {0x0627, '\\ub515'}, {0x0628, '\\ub518'}, {0x0629, '\\ub51b'},\r\n            {0x062a, '\\ub51c'}, {0x062b, '\\ub524'}, {0x062c, '\\ub525'}, {0x062d, '\\ub527'},\r\n            {0x062e, '\\ub528'}, {0x062f, '\\ub529'}, {0x0630, '\\ub52a'}, {0x0631, '\\ub530'},\r\n            {0x0632, '\\ub531'}, {0x0633, '\\ub534'}, {0x0634, '\\ub538'}, {0x0635, '\\ub540'},\r\n            {0x0636, '\\ub541'}, {0x0637, '\\ub543'}, {0x0638, '\\ub544'}, {0x0639, '\\ub545'},\r\n            {0x063a, '\\ub54b'}, {0x063b, '\\ub54c'}, {0x063c, '\\ub54d'}, {0x063d, '\\ub550'},\r\n            {0x063e, '\\ub554'}, {0x063f, '\\ub55c'}, {0x0640, '\\ub55d'}, {0x0641, '\\ub55f'},\r\n            {0x0642, '\\ub560'}, {0x0643, '\\ub561'}, {0x0644, '\\ub5a0'}, {0x0645, '\\ub5a1'},\r\n            {0x0646, '\\ub5a4'}, {0x0647, '\\ub5a8'}, {0x0648, '\\ub5aa'}, {0x0649, '\\ub5ab'},\r\n            {0x064a, '\\ub5b0'}, {0x064b, '\\ub5b1'}, {0x064c, '\\ub5b3'}, {0x064d, '\\ub5b4'},\r\n            {0x064e, '\\ub5b5'}, {0x064f, '\\ub5bb'}, {0x0650, '\\ub5bc'}, {0x0651, '\\ub5bd'},\r\n            {0x0652, '\\ub5c0'}, {0x0653, '\\ub5c4'}, {0x0654, '\\ub5cc'}, {0x0655, '\\ub5cd'},\r\n            {0x0656, '\\ub5cf'}, {0x0657, '\\ub5d0'}, {0x0658, '\\ub5d1'}, {0x0659, '\\ub5d8'},\r\n            {0x065a, '\\ub5ec'}, {0x065b, '\\ub610'}, {0x065c, '\\ub611'}, {0x065d, '\\ub614'},\r\n            {0x065e, '\\ub618'}, {0x065f, '\\ub625'}, {0x0660, '\\ub62c'}, {0x0661, '\\ub634'},\r\n            {0x0662, '\\ub648'}, {0x0663, '\\ub664'}, {0x0664, '\\ub668'}, {0x0665, '\\ub69c'},\r\n            {0x0666, '\\ub69d'}, {0x0667, '\\ub6a0'}, {0x0668, '\\ub6a4'}, {0x0669, '\\ub6ab'},\r\n            {0x066a, '\\ub6ac'}, {0x066b, '\\ub6b1'}, {0x066c, '\\ub6d4'}, {0x066d, '\\ub6f0'},\r\n            {0x066e, '\\ub6f4'}, {0x066f, '\\ub6f8'}, {0x0670, '\\ub700'}, {0x0671, '\\ub701'},\r\n            {0x0672, '\\ub705'}, {0x0673, '\\ub728'}, {0x0674, '\\ub729'}, {0x0675, '\\ub72c'},\r\n            {0x0676, '\\ub72f'}, {0x0677, '\\ub730'}, {0x0678, '\\ub738'}, {0x0679, '\\ub739'},\r\n            {0x067a, '\\ub73b'}, {0x067b, '\\ub744'}, {0x067c, '\\ub748'}, {0x067d, '\\ub74c'},\r\n            {0x067e, '\\ub754'}, {0x067f, '\\ub755'}, {0x0680, '\\ub760'}, {0x0681, '\\ub764'},\r\n            {0x0682, '\\ub768'}, {0x0683, '\\ub770'}, {0x0684, '\\ub771'}, {0x0685, '\\ub773'},\r\n            {0x0686, '\\ub775'}, {0x0687, '\\ub77c'}, {0x0688, '\\ub77d'}, {0x0689, '\\ub780'},\r\n            {0x068a, '\\ub784'}, {0x068b, '\\ub78c'}, {0x068c, '\\ub78d'}, {0x068d, '\\ub78f'},\r\n            {0x068e, '\\ub790'}, {0x068f, '\\ub791'}, {0x0690, '\\ub792'}, {0x0691, '\\ub796'},\r\n            {0x0692, '\\ub797'}, {0x0693, '\\ub798'}, {0x0694, '\\ub799'}, {0x0695, '\\ub79c'},\r\n            {0x0696, '\\ub7a0'}, {0x0697, '\\ub7a8'}, {0x0698, '\\ub7a9'}, {0x0699, '\\ub7ab'},\r\n            {0x069a, '\\ub7ac'}, {0x069b, '\\ub7ad'}, {0x069c, '\\ub7b4'}, {0x069d, '\\ub7b5'},\r\n            {0x069e, '\\ub7b8'}, {0x069f, '\\ub7c7'}, {0x06a0, '\\ub7c9'}, {0x06a1, '\\ub7ec'},\r\n            {0x06a2, '\\ub7ed'}, {0x06a3, '\\ub7f0'}, {0x06a4, '\\ub7f4'}, {0x06a5, '\\ub7fc'},\r\n            {0x06a6, '\\ub7fd'}, {0x06a7, '\\ub7ff'}, {0x06a8, '\\ub800'}, {0x06a9, '\\ub801'},\r\n            {0x06aa, '\\ub807'}, {0x06ab, '\\ub808'}, {0x06ac, '\\ub809'}, {0x06ad, '\\ub80c'},\r\n            {0x06ae, '\\ub810'}, {0x06af, '\\ub818'}, {0x06b0, '\\ub819'}, {0x06b1, '\\ub81b'},\r\n            {0x06b2, '\\ub81d'}, {0x06b3, '\\ub824'}, {0x06b4, '\\ub825'}, {0x06b5, '\\ub828'},\r\n            {0x06b6, '\\ub82c'}, {0x06b7, '\\ub834'}, {0x06b8, '\\ub835'}, {0x06b9, '\\ub837'},\r\n            {0x06ba, '\\ub838'}, {0x06bb, '\\ub839'}, {0x06bc, '\\ub840'}, {0x06bd, '\\ub844'},\r\n            {0x06be, '\\ub851'}, {0x06bf, '\\ub853'}, {0x06c0, '\\ub85c'}, {0x06c1, '\\ub85d'},\r\n            {0x06c2, '\\ub860'}, {0x06c3, '\\ub864'}, {0x06c4, '\\ub86c'}, {0x06c5, '\\ub86d'},\r\n            {0x06c6, '\\ub86f'}, {0x06c7, '\\ub871'}, {0x06c8, '\\ub878'}, {0x06c9, '\\ub87c'},\r\n            {0x06ca, '\\ub88d'}, {0x06cb, '\\ub8a8'}, {0x06cc, '\\ub8b0'}, {0x06cd, '\\ub8b4'},\r\n            {0x06ce, '\\ub8b8'}, {0x06cf, '\\ub8c0'}, {0x06d0, '\\ub8c1'}, {0x06d1, '\\ub8c3'},\r\n            {0x06d2, '\\ub8c5'}, {0x06d3, '\\ub8cc'}, {0x06d4, '\\ub8d0'}, {0x06d5, '\\ub8d4'},\r\n            {0x06d6, '\\ub8dd'}, {0x06d7, '\\ub8df'}, {0x06d8, '\\ub8e1'}, {0x06d9, '\\ub8e8'},\r\n            {0x06da, '\\ub8e9'}, {0x06db, '\\ub8ec'}, {0x06dc, '\\ub8f0'}, {0x06dd, '\\ub8f8'},\r\n            {0x06de, '\\ub8f9'}, {0x06df, '\\ub8fb'}, {0x06e0, '\\ub8fd'}, {0x06e1, '\\ub904'},\r\n            {0x06e2, '\\ub918'}, {0x06e3, '\\ub920'}, {0x06e4, '\\ub93c'}, {0x06e5, '\\ub93d'},\r\n            {0x06e6, '\\ub940'}, {0x06e7, '\\ub944'}, {0x06e8, '\\ub94c'}, {0x06e9, '\\ub94f'},\r\n            {0x06ea, '\\ub951'}, {0x06eb, '\\ub958'}, {0x06ec, '\\ub959'}, {0x06ed, '\\ub95c'},\r\n            {0x06ee, '\\ub960'}, {0x06ef, '\\ub968'}, {0x06f0, '\\ub969'}, {0x06f1, '\\ub96b'},\r\n            {0x06f2, '\\ub96d'}, {0x06f3, '\\ub974'}, {0x06f4, '\\ub975'}, {0x06f5, '\\ub978'},\r\n            {0x06f6, '\\ub97c'}, {0x06f7, '\\ub984'}, {0x06f8, '\\ub985'}, {0x06f9, '\\ub987'},\r\n            {0x06fa, '\\ub989'}, {0x06fb, '\\ub98a'}, {0x06fc, '\\ub98d'}, {0x06fd, '\\ub98e'},\r\n            {0x06fe, '\\ub9ac'}, {0x06ff, '\\ub9ad'}, {0x0700, '\\ub9b0'}, {0x0701, '\\ub9b4'},\r\n            {0x0702, '\\ub9bc'}, {0x0703, '\\ub9bd'}, {0x0704, '\\ub9bf'}, {0x0705, '\\ub9c1'},\r\n            {0x0706, '\\ub9c8'}, {0x0707, '\\ub9c9'}, {0x0708, '\\ub9cc'}, {0x0709, '\\ub9ce'},\r\n            {0x070a, '\\ub9cf'}, {0x070b, '\\ub9d0'}, {0x070c, '\\ub9d1'}, {0x070d, '\\ub9d2'},\r\n            {0x070e, '\\ub9d8'}, {0x070f, '\\ub9d9'}, {0x0710, '\\ub9db'}, {0x0711, '\\ub9dd'},\r\n            {0x0712, '\\ub9de'}, {0x0713, '\\ub9e1'}, {0x0714, '\\ub9e3'}, {0x0715, '\\ub9e4'},\r\n            {0x0716, '\\ub9e5'}, {0x0717, '\\ub9e8'}, {0x0718, '\\ub9ec'}, {0x0719, '\\ub9f4'},\r\n            {0x071a, '\\ub9f5'}, {0x071b, '\\ub9f7'}, {0x071c, '\\ub9f8'}, {0x071d, '\\ub9f9'},\r\n            {0x071e, '\\ub9fa'}, {0x071f, '\\uba00'}, {0x0720, '\\uba01'}, {0x0721, '\\uba08'},\r\n            {0x0722, '\\uba15'}, {0x0723, '\\uba38'}, {0x0724, '\\uba39'}, {0x0725, '\\uba3c'},\r\n            {0x0726, '\\uba40'}, {0x0727, '\\uba42'}, {0x0728, '\\uba48'}, {0x0729, '\\uba49'},\r\n            {0x072a, '\\uba4b'}, {0x072b, '\\uba4d'}, {0x072c, '\\uba4e'}, {0x072d, '\\uba53'},\r\n            {0x072e, '\\uba54'}, {0x072f, '\\uba55'}, {0x0730, '\\uba58'}, {0x0731, '\\uba5c'},\r\n            {0x0732, '\\uba64'}, {0x0733, '\\uba65'}, {0x0734, '\\uba67'}, {0x0735, '\\uba68'},\r\n            {0x0736, '\\uba69'}, {0x0737, '\\uba70'}, {0x0738, '\\uba71'}, {0x0739, '\\uba74'},\r\n            {0x073a, '\\uba78'}, {0x073b, '\\uba83'}, {0x073c, '\\uba84'}, {0x073d, '\\uba85'},\r\n            {0x073e, '\\uba87'}, {0x073f, '\\uba8c'}, {0x0740, '\\ubaa8'}, {0x0741, '\\ubaa9'},\r\n            {0x0742, '\\ubaab'}, {0x0743, '\\ubaac'}, {0x0744, '\\ubab0'}, {0x0745, '\\ubab2'},\r\n            {0x0746, '\\ubab8'}, {0x0747, '\\ubab9'}, {0x0748, '\\ubabb'}, {0x0749, '\\ubabd'},\r\n            {0x074a, '\\ubac4'}, {0x074b, '\\ubac8'}, {0x074c, '\\ubad8'}, {0x074d, '\\ubad9'},\r\n            {0x074e, '\\ubafc'}, {0x074f, '\\ubb00'}, {0x0750, '\\ubb04'}, {0x0751, '\\ubb0d'},\r\n            {0x0752, '\\ubb0f'}, {0x0753, '\\ubb11'}, {0x0754, '\\ubb18'}, {0x0755, '\\ubb1c'},\r\n            {0x0756, '\\ubb20'}, {0x0757, '\\ubb29'}, {0x0758, '\\ubb2b'}, {0x0759, '\\ubb34'},\r\n            {0x075a, '\\ubb35'}, {0x075b, '\\ubb36'}, {0x075c, '\\ubb38'}, {0x075d, '\\ubb3b'},\r\n            {0x075e, '\\ubb3c'}, {0x075f, '\\ubb3d'}, {0x0760, '\\ubb3e'}, {0x0761, '\\ubb44'},\r\n            {0x0762, '\\ubb45'}, {0x0763, '\\ubb47'}, {0x0764, '\\ubb49'}, {0x0765, '\\ubb4d'},\r\n            {0x0766, '\\ubb4f'}, {0x0767, '\\ubb50'}, {0x0768, '\\ubb54'}, {0x0769, '\\ubb58'},\r\n            {0x076a, '\\ubb61'}, {0x076b, '\\ubb63'}, {0x076c, '\\ubb6c'}, {0x076d, '\\ubb88'},\r\n            {0x076e, '\\ubb8c'}, {0x076f, '\\ubb90'}, {0x0770, '\\ubba4'}, {0x0771, '\\ubba8'},\r\n            {0x0772, '\\ubbac'}, {0x0773, '\\ubbb4'}, {0x0774, '\\ubbb7'}, {0x0775, '\\ubbc0'},\r\n            {0x0776, '\\ubbc4'}, {0x0777, '\\ubbc8'}, {0x0778, '\\ubbd0'}, {0x0779, '\\ubbd3'},\r\n            {0x077a, '\\ubbf8'}, {0x077b, '\\ubbf9'}, {0x077c, '\\ubbfc'}, {0x077d, '\\ubbff'},\r\n            {0x077e, '\\ubc00'}, {0x077f, '\\ubc02'}, {0x0780, '\\ubc08'}, {0x0781, '\\ubc09'},\r\n            {0x0782, '\\ubc0b'}, {0x0783, '\\ubc0c'}, {0x0784, '\\ubc0d'}, {0x0785, '\\ubc0f'},\r\n            {0x0786, '\\ubc11'}, {0x0787, '\\ubc14'}, {0x0788, '\\ubc15'}, {0x0789, '\\ubc16'},\r\n            {0x078a, '\\ubc17'}, {0x078b, '\\ubc18'}, {0x078c, '\\ubc1b'}, {0x078d, '\\ubc1c'},\r\n            {0x078e, '\\ubc1d'}, {0x078f, '\\ubc1e'}, {0x0790, '\\ubc1f'}, {0x0791, '\\ubc24'},\r\n            {0x0792, '\\ubc25'}, {0x0793, '\\ubc27'}, {0x0794, '\\ubc29'}, {0x0795, '\\ubc2d'},\r\n            {0x0796, '\\ubc30'}, {0x0797, '\\ubc31'}, {0x0798, '\\ubc34'}, {0x0799, '\\ubc38'},\r\n            {0x079a, '\\ubc40'}, {0x079b, '\\ubc41'}, {0x079c, '\\ubc43'}, {0x079d, '\\ubc44'},\r\n            {0x079e, '\\ubc45'}, {0x079f, '\\ubc49'}, {0x07a0, '\\ubc4c'}, {0x07a1, '\\ubc4d'},\r\n            {0x07a2, '\\ubc50'}, {0x07a3, '\\ubc5d'}, {0x07a4, '\\ubc84'}, {0x07a5, '\\ubc85'},\r\n            {0x07a6, '\\ubc88'}, {0x07a7, '\\ubc8b'}, {0x07a8, '\\ubc8c'}, {0x07a9, '\\ubc8e'},\r\n            {0x07aa, '\\ubc94'}, {0x07ab, '\\ubc95'}, {0x07ac, '\\ubc97'}, {0x07ad, '\\ubc99'},\r\n            {0x07ae, '\\ubc9a'}, {0x07af, '\\ubca0'}, {0x07b0, '\\ubca1'}, {0x07b1, '\\ubca4'},\r\n            {0x07b2, '\\ubca7'}, {0x07b3, '\\ubca8'}, {0x07b4, '\\ubcb0'}, {0x07b5, '\\ubcb1'},\r\n            {0x07b6, '\\ubcb3'}, {0x07b7, '\\ubcb4'}, {0x07b8, '\\ubcb5'}, {0x07b9, '\\ubcbc'},\r\n            {0x07ba, '\\ubcbd'}, {0x07bb, '\\ubcc0'}, {0x07bc, '\\ubcc4'}, {0x07bd, '\\ubccd'},\r\n            {0x07be, '\\ubccf'}, {0x07bf, '\\ubcd0'}, {0x07c0, '\\ubcd1'}, {0x07c1, '\\ubcd5'},\r\n            {0x07c2, '\\ubcd8'}, {0x07c3, '\\ubcdc'}, {0x07c4, '\\ubcf4'}, {0x07c5, '\\ubcf5'},\r\n            {0x07c6, '\\ubcf6'}, {0x07c7, '\\ubcf8'}, {0x07c8, '\\ubcfc'}, {0x07c9, '\\ubd04'},\r\n            {0x07ca, '\\ubd05'}, {0x07cb, '\\ubd07'}, {0x07cc, '\\ubd09'}, {0x07cd, '\\ubd10'},\r\n            {0x07ce, '\\ubd14'}, {0x07cf, '\\ubd24'}, {0x07d0, '\\ubd2c'}, {0x07d1, '\\ubd40'},\r\n            {0x07d2, '\\ubd48'}, {0x07d3, '\\ubd49'}, {0x07d4, '\\ubd4c'}, {0x07d5, '\\ubd50'},\r\n            {0x07d6, '\\ubd58'}, {0x07d7, '\\ubd59'}, {0x07d8, '\\ubd64'}, {0x07d9, '\\ubd68'},\r\n            {0x07da, '\\ubd80'}, {0x07db, '\\ubd81'}, {0x07dc, '\\ubd84'}, {0x07dd, '\\ubd87'},\r\n            {0x07de, '\\ubd88'}, {0x07df, '\\ubd89'}, {0x07e0, '\\ubd8a'}, {0x07e1, '\\ubd90'},\r\n            {0x07e2, '\\ubd91'}, {0x07e3, '\\ubd93'}, {0x07e4, '\\ubd95'}, {0x07e5, '\\ubd99'},\r\n            {0x07e6, '\\ubd9a'}, {0x07e7, '\\ubd9c'}, {0x07e8, '\\ubda4'}, {0x07e9, '\\ubdb0'},\r\n            {0x07ea, '\\ubdb8'}, {0x07eb, '\\ubdd4'}, {0x07ec, '\\ubdd5'}, {0x07ed, '\\ubdd8'},\r\n            {0x07ee, '\\ubddc'}, {0x07ef, '\\ubde9'}, {0x07f0, '\\ubdf0'}, {0x07f1, '\\ubdf4'},\r\n            {0x07f2, '\\ubdf8'}, {0x07f3, '\\ube00'}, {0x07f4, '\\ube03'}, {0x07f5, '\\ube05'},\r\n            {0x07f6, '\\ube0c'}, {0x07f7, '\\ube0d'}, {0x07f8, '\\ube10'}, {0x07f9, '\\ube14'},\r\n            {0x07fa, '\\ube1c'}, {0x07fb, '\\ube1d'}, {0x07fc, '\\ube1f'}, {0x07fd, '\\ube44'},\r\n            {0x07fe, '\\ube45'}, {0x07ff, '\\ube48'}, {0x0800, '\\ube4c'}, {0x0801, '\\ube4e'},\r\n            {0x0802, '\\ube54'}, {0x0803, '\\ube55'}, {0x0804, '\\ube57'}, {0x0805, '\\ube59'},\r\n            {0x0806, '\\ube5a'}, {0x0807, '\\ube5b'}, {0x0808, '\\ube60'}, {0x0809, '\\ube61'},\r\n            {0x080a, '\\ube64'}, {0x080b, '\\ube68'}, {0x080c, '\\ube6a'}, {0x080d, '\\ube70'},\r\n            {0x080e, '\\ube71'}, {0x080f, '\\ube73'}, {0x0810, '\\ube74'}, {0x0811, '\\ube75'},\r\n            {0x0812, '\\ube7b'}, {0x0813, '\\ube7c'}, {0x0814, '\\ube7d'}, {0x0815, '\\ube80'},\r\n            {0x0816, '\\ube84'}, {0x0817, '\\ube8c'}, {0x0818, '\\ube8d'}, {0x0819, '\\ube8f'},\r\n            {0x081a, '\\ube90'}, {0x081b, '\\ube91'}, {0x081c, '\\ube98'}, {0x081d, '\\ube99'},\r\n            {0x081e, '\\ubea8'}, {0x081f, '\\ubed0'}, {0x0820, '\\ubed1'}, {0x0821, '\\ubed4'},\r\n            {0x0822, '\\ubed7'}, {0x0823, '\\ubed8'}, {0x0824, '\\ubee0'}, {0x0825, '\\ubee3'},\r\n            {0x0826, '\\ubee4'}, {0x0827, '\\ubee5'}, {0x0828, '\\ubeec'}, {0x0829, '\\ubf01'},\r\n            {0x082a, '\\ubf08'}, {0x082b, '\\ubf09'}, {0x082c, '\\ubf18'}, {0x082d, '\\ubf19'},\r\n            {0x082e, '\\ubf1b'}, {0x082f, '\\ubf1c'}, {0x0830, '\\ubf1d'}, {0x0831, '\\ubf40'},\r\n            {0x0832, '\\ubf41'}, {0x0833, '\\ubf44'}, {0x0834, '\\ubf48'}, {0x0835, '\\ubf50'},\r\n            {0x0836, '\\ubf51'}, {0x0837, '\\ubf55'}, {0x0838, '\\ubf94'}, {0x0839, '\\ubfb0'},\r\n            {0x083a, '\\ubfc5'}, {0x083b, '\\ubfcc'}, {0x083c, '\\ubfcd'}, {0x083d, '\\ubfd0'},\r\n            {0x083e, '\\ubfd4'}, {0x083f, '\\ubfdc'}, {0x0840, '\\ubfdf'}, {0x0841, '\\ubfe1'},\r\n            {0x0842, '\\uc03c'}, {0x0843, '\\uc051'}, {0x0844, '\\uc058'}, {0x0845, '\\uc05c'},\r\n            {0x0846, '\\uc060'}, {0x0847, '\\uc068'}, {0x0848, '\\uc069'}, {0x0849, '\\uc090'},\r\n            {0x084a, '\\uc091'}, {0x084b, '\\uc094'}, {0x084c, '\\uc098'}, {0x084d, '\\uc0a0'},\r\n            {0x084e, '\\uc0a1'}, {0x084f, '\\uc0a3'}, {0x0850, '\\uc0a5'}, {0x0851, '\\uc0ac'},\r\n            {0x0852, '\\uc0ad'}, {0x0853, '\\uc0af'}, {0x0854, '\\uc0b0'}, {0x0855, '\\uc0b3'},\r\n            {0x0856, '\\uc0b4'}, {0x0857, '\\uc0b5'}, {0x0858, '\\uc0b6'}, {0x0859, '\\uc0bc'},\r\n            {0x085a, '\\uc0bd'}, {0x085b, '\\uc0bf'}, {0x085c, '\\uc0c0'}, {0x085d, '\\uc0c1'},\r\n            {0x085e, '\\uc0c5'}, {0x085f, '\\uc0c8'}, {0x0860, '\\uc0c9'}, {0x0861, '\\uc0cc'},\r\n            {0x0862, '\\uc0d0'}, {0x0863, '\\uc0d8'}, {0x0864, '\\uc0d9'}, {0x0865, '\\uc0db'},\r\n            {0x0866, '\\uc0dc'}, {0x0867, '\\uc0dd'}, {0x0868, '\\uc0e4'}, {0x0869, '\\uc0e5'},\r\n            {0x086a, '\\uc0e8'}, {0x086b, '\\uc0ec'}, {0x086c, '\\uc0f4'}, {0x086d, '\\uc0f5'},\r\n            {0x086e, '\\uc0f7'}, {0x086f, '\\uc0f9'}, {0x0870, '\\uc100'}, {0x0871, '\\uc104'},\r\n            {0x0872, '\\uc108'}, {0x0873, '\\uc110'}, {0x0874, '\\uc115'}, {0x0875, '\\uc11c'},\r\n            {0x0876, '\\uc11d'}, {0x0877, '\\uc11e'}, {0x0878, '\\uc11f'}, {0x0879, '\\uc120'},\r\n            {0x087a, '\\uc123'}, {0x087b, '\\uc124'}, {0x087c, '\\uc126'}, {0x087d, '\\uc127'},\r\n            {0x087e, '\\uc12c'}, {0x087f, '\\uc12d'}, {0x0880, '\\uc12f'}, {0x0881, '\\uc130'},\r\n            {0x0882, '\\uc131'}, {0x0883, '\\uc136'}, {0x0884, '\\uc138'}, {0x0885, '\\uc139'},\r\n            {0x0886, '\\uc13c'}, {0x0887, '\\uc140'}, {0x0888, '\\uc148'}, {0x0889, '\\uc149'},\r\n            {0x088a, '\\uc14b'}, {0x088b, '\\uc14c'}, {0x088c, '\\uc14d'}, {0x088d, '\\uc154'},\r\n            {0x088e, '\\uc155'}, {0x088f, '\\uc158'}, {0x0890, '\\uc15c'}, {0x0891, '\\uc164'},\r\n            {0x0892, '\\uc165'}, {0x0893, '\\uc167'}, {0x0894, '\\uc168'}, {0x0895, '\\uc169'},\r\n            {0x0896, '\\uc170'}, {0x0897, '\\uc174'}, {0x0898, '\\uc178'}, {0x0899, '\\uc185'},\r\n            {0x089a, '\\uc18c'}, {0x089b, '\\uc18d'}, {0x089c, '\\uc18e'}, {0x089d, '\\uc190'},\r\n            {0x089e, '\\uc194'}, {0x089f, '\\uc196'}, {0x08a0, '\\uc19c'}, {0x08a1, '\\uc19d'},\r\n            {0x08a2, '\\uc19f'}, {0x08a3, '\\uc1a1'}, {0x08a4, '\\uc1a5'}, {0x08a5, '\\uc1a8'},\r\n            {0x08a6, '\\uc1a9'}, {0x08a7, '\\uc1ac'}, {0x08a8, '\\uc1b0'}, {0x08a9, '\\uc1bd'},\r\n            {0x08aa, '\\uc1c4'}, {0x08ab, '\\uc1c8'}, {0x08ac, '\\uc1cc'}, {0x08ad, '\\uc1d4'},\r\n            {0x08ae, '\\uc1d7'}, {0x08af, '\\uc1d8'}, {0x08b0, '\\uc1e0'}, {0x08b1, '\\uc1e4'},\r\n            {0x08b2, '\\uc1e8'}, {0x08b3, '\\uc1f0'}, {0x08b4, '\\uc1f1'}, {0x08b5, '\\uc1f3'},\r\n            {0x08b6, '\\uc1fc'}, {0x08b7, '\\uc1fd'}, {0x08b8, '\\uc200'}, {0x08b9, '\\uc204'},\r\n            {0x08ba, '\\uc20c'}, {0x08bb, '\\uc20d'}, {0x08bc, '\\uc20f'}, {0x08bd, '\\uc211'},\r\n            {0x08be, '\\uc218'}, {0x08bf, '\\uc219'}, {0x08c0, '\\uc21c'}, {0x08c1, '\\uc21f'},\r\n            {0x08c2, '\\uc220'}, {0x08c3, '\\uc228'}, {0x08c4, '\\uc229'}, {0x08c5, '\\uc22b'},\r\n            {0x08c6, '\\uc22d'}, {0x08c7, '\\uc22f'}, {0x08c8, '\\uc231'}, {0x08c9, '\\uc232'},\r\n            {0x08ca, '\\uc234'}, {0x08cb, '\\uc248'}, {0x08cc, '\\uc250'}, {0x08cd, '\\uc251'},\r\n            {0x08ce, '\\uc254'}, {0x08cf, '\\uc258'}, {0x08d0, '\\uc260'}, {0x08d1, '\\uc265'},\r\n            {0x08d2, '\\uc26c'}, {0x08d3, '\\uc26d'}, {0x08d4, '\\uc270'}, {0x08d5, '\\uc274'},\r\n            {0x08d6, '\\uc27c'}, {0x08d7, '\\uc27d'}, {0x08d8, '\\uc27f'}, {0x08d9, '\\uc281'},\r\n            {0x08da, '\\uc288'}, {0x08db, '\\uc289'}, {0x08dc, '\\uc290'}, {0x08dd, '\\uc298'},\r\n            {0x08de, '\\uc29b'}, {0x08df, '\\uc29d'}, {0x08e0, '\\uc2a4'}, {0x08e1, '\\uc2a5'},\r\n            {0x08e2, '\\uc2a8'}, {0x08e3, '\\uc2ac'}, {0x08e4, '\\uc2ad'}, {0x08e5, '\\uc2b4'},\r\n            {0x08e6, '\\uc2b5'}, {0x08e7, '\\uc2b7'}, {0x08e8, '\\uc2b9'}, {0x08e9, '\\uc2dc'},\r\n            {0x08ea, '\\uc2dd'}, {0x08eb, '\\uc2e0'}, {0x08ec, '\\uc2e3'}, {0x08ed, '\\uc2e4'},\r\n            {0x08ee, '\\uc2eb'}, {0x08ef, '\\uc2ec'}, {0x08f0, '\\uc2ed'}, {0x08f1, '\\uc2ef'},\r\n            {0x08f2, '\\uc2f1'}, {0x08f3, '\\uc2f6'}, {0x08f4, '\\uc2f8'}, {0x08f5, '\\uc2f9'},\r\n            {0x08f6, '\\uc2fb'}, {0x08f7, '\\uc2fc'}, {0x08f8, '\\uc300'}, {0x08f9, '\\uc308'},\r\n            {0x08fa, '\\uc309'}, {0x08fb, '\\uc30c'}, {0x08fc, '\\uc30d'}, {0x08fd, '\\uc313'},\r\n            {0x08fe, '\\uc314'}, {0x08ff, '\\uc315'}, {0x0900, '\\uc318'}, {0x0901, '\\uc31c'},\r\n            {0x0902, '\\uc324'}, {0x0903, '\\uc325'}, {0x0904, '\\uc328'}, {0x0905, '\\uc329'},\r\n            {0x0906, '\\uc345'}, {0x0907, '\\uc368'}, {0x0908, '\\uc369'}, {0x0909, '\\uc36c'},\r\n            {0x090a, '\\uc370'}, {0x090b, '\\uc372'}, {0x090c, '\\uc378'}, {0x090d, '\\uc379'},\r\n            {0x090e, '\\uc37c'}, {0x090f, '\\uc37d'}, {0x0910, '\\uc384'}, {0x0911, '\\uc388'},\r\n            {0x0912, '\\uc38c'}, {0x0913, '\\uc3c0'}, {0x0914, '\\uc3d8'}, {0x0915, '\\uc3d9'},\r\n            {0x0916, '\\uc3dc'}, {0x0917, '\\uc3df'}, {0x0918, '\\uc3e0'}, {0x0919, '\\uc3e2'},\r\n            {0x091a, '\\uc3e8'}, {0x091b, '\\uc3e9'}, {0x091c, '\\uc3ed'}, {0x091d, '\\uc3f4'},\r\n            {0x091e, '\\uc3f5'}, {0x091f, '\\uc3f8'}, {0x0920, '\\uc408'}, {0x0921, '\\uc410'},\r\n            {0x0922, '\\uc424'}, {0x0923, '\\uc42c'}, {0x0924, '\\uc430'}, {0x0925, '\\uc434'},\r\n            {0x0926, '\\uc43c'}, {0x0927, '\\uc43d'}, {0x0928, '\\uc448'}, {0x0929, '\\uc464'},\r\n            {0x092a, '\\uc465'}, {0x092b, '\\uc468'}, {0x092c, '\\uc46c'}, {0x092d, '\\uc474'},\r\n            {0x092e, '\\uc475'}, {0x092f, '\\uc479'}, {0x0930, '\\uc480'}, {0x0931, '\\uc494'},\r\n            {0x0932, '\\uc49c'}, {0x0933, '\\uc4b8'}, {0x0934, '\\uc4bc'}, {0x0935, '\\uc4e9'},\r\n            {0x0936, '\\uc4f0'}, {0x0937, '\\uc4f1'}, {0x0938, '\\uc4f4'}, {0x0939, '\\uc4f8'},\r\n            {0x093a, '\\uc4fa'}, {0x093b, '\\uc4ff'}, {0x093c, '\\uc500'}, {0x093d, '\\uc501'},\r\n            {0x093e, '\\uc50c'}, {0x093f, '\\uc510'}, {0x0940, '\\uc514'}, {0x0941, '\\uc51c'},\r\n            {0x0942, '\\uc528'}, {0x0943, '\\uc529'}, {0x0944, '\\uc52c'}, {0x0945, '\\uc530'},\r\n            {0x0946, '\\uc538'}, {0x0947, '\\uc539'}, {0x0948, '\\uc53b'}, {0x0949, '\\uc53d'},\r\n            {0x094a, '\\uc544'}, {0x094b, '\\uc545'}, {0x094c, '\\uc548'}, {0x094d, '\\uc549'},\r\n            {0x094e, '\\uc54a'}, {0x094f, '\\uc54c'}, {0x0950, '\\uc54d'}, {0x0951, '\\uc54e'},\r\n            {0x0952, '\\uc553'}, {0x0953, '\\uc554'}, {0x0954, '\\uc555'}, {0x0955, '\\uc557'},\r\n            {0x0956, '\\uc558'}, {0x0957, '\\uc559'}, {0x0958, '\\uc55d'}, {0x0959, '\\uc55e'},\r\n            {0x095a, '\\uc560'}, {0x095b, '\\uc561'}, {0x095c, '\\uc564'}, {0x095d, '\\uc568'},\r\n            {0x095e, '\\uc570'}, {0x095f, '\\uc571'}, {0x0960, '\\uc573'}, {0x0961, '\\uc574'},\r\n            {0x0962, '\\uc575'}, {0x0963, '\\uc57c'}, {0x0964, '\\uc57d'}, {0x0965, '\\uc580'},\r\n            {0x0966, '\\uc584'}, {0x0967, '\\uc587'}, {0x0968, '\\uc58c'}, {0x0969, '\\uc58d'},\r\n            {0x096a, '\\uc58f'}, {0x096b, '\\uc591'}, {0x096c, '\\uc595'}, {0x096d, '\\uc597'},\r\n            {0x096e, '\\uc598'}, {0x096f, '\\uc59c'}, {0x0970, '\\uc5a0'}, {0x0971, '\\uc5a9'},\r\n            {0x0972, '\\uc5b4'}, {0x0973, '\\uc5b5'}, {0x0974, '\\uc5b8'}, {0x0975, '\\uc5b9'},\r\n            {0x0976, '\\uc5bb'}, {0x0977, '\\uc5bc'}, {0x0978, '\\uc5bd'}, {0x0979, '\\uc5be'},\r\n            {0x097a, '\\uc5c4'}, {0x097b, '\\uc5c5'}, {0x097c, '\\uc5c6'}, {0x097d, '\\uc5c7'},\r\n            {0x097e, '\\uc5c8'}, {0x097f, '\\uc5c9'}, {0x0980, '\\uc5ca'}, {0x0981, '\\uc5cc'},\r\n            {0x0982, '\\uc5ce'}, {0x0983, '\\uc5d0'}, {0x0984, '\\uc5d1'}, {0x0985, '\\uc5d4'},\r\n            {0x0986, '\\uc5d8'}, {0x0987, '\\uc5e0'}, {0x0988, '\\uc5e1'}, {0x0989, '\\uc5e3'},\r\n            {0x098a, '\\uc5e5'}, {0x098b, '\\uc5ec'}, {0x098c, '\\uc5ed'}, {0x098d, '\\uc5ee'},\r\n            {0x098e, '\\uc5f0'}, {0x098f, '\\uc5f4'}, {0x0990, '\\uc5f6'}, {0x0991, '\\uc5f7'},\r\n            {0x0992, '\\uc5fc'}, {0x0993, '\\uc5fd'}, {0x0994, '\\uc5fe'}, {0x0995, '\\uc5ff'},\r\n            {0x0996, '\\uc600'}, {0x0997, '\\uc601'}, {0x0998, '\\uc605'}, {0x0999, '\\uc606'},\r\n            {0x099a, '\\uc607'}, {0x099b, '\\uc608'}, {0x099c, '\\uc60c'}, {0x099d, '\\uc610'},\r\n            {0x099e, '\\uc618'}, {0x099f, '\\uc619'}, {0x09a0, '\\uc61b'}, {0x09a1, '\\uc61c'},\r\n            {0x09a2, '\\uc624'}, {0x09a3, '\\uc625'}, {0x09a4, '\\uc628'}, {0x09a5, '\\uc62c'},\r\n            {0x09a6, '\\uc62d'}, {0x09a7, '\\uc62e'}, {0x09a8, '\\uc630'}, {0x09a9, '\\uc633'},\r\n            {0x09aa, '\\uc634'}, {0x09ab, '\\uc635'}, {0x09ac, '\\uc637'}, {0x09ad, '\\uc639'},\r\n            {0x09ae, '\\uc63b'}, {0x09af, '\\uc640'}, {0x09b0, '\\uc641'}, {0x09b1, '\\uc644'},\r\n            {0x09b2, '\\uc648'}, {0x09b3, '\\uc650'}, {0x09b4, '\\uc651'}, {0x09b5, '\\uc653'},\r\n            {0x09b6, '\\uc654'}, {0x09b7, '\\uc655'}, {0x09b8, '\\uc65c'}, {0x09b9, '\\uc65d'},\r\n            {0x09ba, '\\uc660'}, {0x09bb, '\\uc66c'}, {0x09bc, '\\uc66f'}, {0x09bd, '\\uc671'},\r\n            {0x09be, '\\uc678'}, {0x09bf, '\\uc679'}, {0x09c0, '\\uc67c'}, {0x09c1, '\\uc680'},\r\n            {0x09c2, '\\uc688'}, {0x09c3, '\\uc689'}, {0x09c4, '\\uc68b'}, {0x09c5, '\\uc68d'},\r\n            {0x09c6, '\\uc694'}, {0x09c7, '\\uc695'}, {0x09c8, '\\uc698'}, {0x09c9, '\\uc69c'},\r\n            {0x09ca, '\\uc6a4'}, {0x09cb, '\\uc6a5'}, {0x09cc, '\\uc6a7'}, {0x09cd, '\\uc6a9'},\r\n            {0x09ce, '\\uc6b0'}, {0x09cf, '\\uc6b1'}, {0x09d0, '\\uc6b4'}, {0x09d1, '\\uc6b8'},\r\n            {0x09d2, '\\uc6b9'}, {0x09d3, '\\uc6ba'}, {0x09d4, '\\uc6c0'}, {0x09d5, '\\uc6c1'},\r\n            {0x09d6, '\\uc6c3'}, {0x09d7, '\\uc6c5'}, {0x09d8, '\\uc6cc'}, {0x09d9, '\\uc6cd'},\r\n            {0x09da, '\\uc6d0'}, {0x09db, '\\uc6d4'}, {0x09dc, '\\uc6dc'}, {0x09dd, '\\uc6dd'},\r\n            {0x09de, '\\uc6e0'}, {0x09df, '\\uc6e1'}, {0x09e0, '\\uc6e8'}, {0x09e1, '\\uc6e9'},\r\n            {0x09e2, '\\uc6ec'}, {0x09e3, '\\uc6f0'}, {0x09e4, '\\uc6f8'}, {0x09e5, '\\uc6f9'},\r\n            {0x09e6, '\\uc6fd'}, {0x09e7, '\\uc704'}, {0x09e8, '\\uc705'}, {0x09e9, '\\uc708'},\r\n            {0x09ea, '\\uc70c'}, {0x09eb, '\\uc714'}, {0x09ec, '\\uc715'}, {0x09ed, '\\uc717'},\r\n            {0x09ee, '\\uc719'}, {0x09ef, '\\uc720'}, {0x09f0, '\\uc721'}, {0x09f1, '\\uc724'},\r\n            {0x09f2, '\\uc728'}, {0x09f3, '\\uc730'}, {0x09f4, '\\uc731'}, {0x09f5, '\\uc733'},\r\n            {0x09f6, '\\uc735'}, {0x09f7, '\\uc737'}, {0x09f8, '\\uc73c'}, {0x09f9, '\\uc73d'},\r\n            {0x09fa, '\\uc740'}, {0x09fb, '\\uc744'}, {0x09fc, '\\uc74a'}, {0x09fd, '\\uc74c'},\r\n            {0x09fe, '\\uc74d'}, {0x09ff, '\\uc74f'}, {0x0a00, '\\uc751'}, {0x0a01, '\\uc752'},\r\n            {0x0a02, '\\uc753'}, {0x0a03, '\\uc754'}, {0x0a04, '\\uc755'}, {0x0a05, '\\uc756'},\r\n            {0x0a06, '\\uc757'}, {0x0a07, '\\uc758'}, {0x0a08, '\\uc75c'}, {0x0a09, '\\uc760'},\r\n            {0x0a0a, '\\uc768'}, {0x0a0b, '\\uc76b'}, {0x0a0c, '\\uc774'}, {0x0a0d, '\\uc775'},\r\n            {0x0a0e, '\\uc778'}, {0x0a0f, '\\uc77c'}, {0x0a10, '\\uc77d'}, {0x0a11, '\\uc77e'},\r\n            {0x0a12, '\\uc783'}, {0x0a13, '\\uc784'}, {0x0a14, '\\uc785'}, {0x0a15, '\\uc787'},\r\n            {0x0a16, '\\uc788'}, {0x0a17, '\\uc789'}, {0x0a18, '\\uc78a'}, {0x0a19, '\\uc78e'},\r\n            {0x0a1a, '\\uc790'}, {0x0a1b, '\\uc791'}, {0x0a1c, '\\uc794'}, {0x0a1d, '\\uc796'},\r\n            {0x0a1e, '\\uc797'}, {0x0a1f, '\\uc798'}, {0x0a20, '\\uc79a'}, {0x0a21, '\\uc7a0'},\r\n            {0x0a22, '\\uc7a1'}, {0x0a23, '\\uc7a3'}, {0x0a24, '\\uc7a4'}, {0x0a25, '\\uc7a5'},\r\n            {0x0a26, '\\uc7a6'}, {0x0a27, '\\uc7ac'}, {0x0a28, '\\uc7ad'}, {0x0a29, '\\uc7b0'},\r\n            {0x0a2a, '\\uc7b4'}, {0x0a2b, '\\uc7bc'}, {0x0a2c, '\\uc7bd'}, {0x0a2d, '\\uc7bf'},\r\n            {0x0a2e, '\\uc7c0'}, {0x0a2f, '\\uc7c1'}, {0x0a30, '\\uc7c8'}, {0x0a31, '\\uc7c9'},\r\n            {0x0a32, '\\uc7cc'}, {0x0a33, '\\uc7ce'}, {0x0a34, '\\uc7d0'}, {0x0a35, '\\uc7d8'},\r\n            {0x0a36, '\\uc7dd'}, {0x0a37, '\\uc7e4'}, {0x0a38, '\\uc7e8'}, {0x0a39, '\\uc7ec'},\r\n            {0x0a3a, '\\uc800'}, {0x0a3b, '\\uc801'}, {0x0a3c, '\\uc804'}, {0x0a3d, '\\uc808'},\r\n            {0x0a3e, '\\uc80a'}, {0x0a3f, '\\uc810'}, {0x0a40, '\\uc811'}, {0x0a41, '\\uc813'},\r\n            {0x0a42, '\\uc815'}, {0x0a43, '\\uc816'}, {0x0a44, '\\uc81c'}, {0x0a45, '\\uc81d'},\r\n            {0x0a46, '\\uc820'}, {0x0a47, '\\uc824'}, {0x0a48, '\\uc82c'}, {0x0a49, '\\uc82d'},\r\n            {0x0a4a, '\\uc82f'}, {0x0a4b, '\\uc831'}, {0x0a4c, '\\uc838'}, {0x0a4d, '\\uc83c'},\r\n            {0x0a4e, '\\uc840'}, {0x0a4f, '\\uc848'}, {0x0a50, '\\uc849'}, {0x0a51, '\\uc84c'},\r\n            {0x0a52, '\\uc84d'}, {0x0a53, '\\uc854'}, {0x0a54, '\\uc870'}, {0x0a55, '\\uc871'},\r\n            {0x0a56, '\\uc874'}, {0x0a57, '\\uc878'}, {0x0a58, '\\uc87a'}, {0x0a59, '\\uc880'},\r\n            {0x0a5a, '\\uc881'}, {0x0a5b, '\\uc883'}, {0x0a5c, '\\uc885'}, {0x0a5d, '\\uc886'},\r\n            {0x0a5e, '\\uc887'}, {0x0a5f, '\\uc88b'}, {0x0a60, '\\uc88c'}, {0x0a61, '\\uc88d'},\r\n            {0x0a62, '\\uc894'}, {0x0a63, '\\uc89d'}, {0x0a64, '\\uc89f'}, {0x0a65, '\\uc8a1'},\r\n            {0x0a66, '\\uc8a8'}, {0x0a67, '\\uc8bc'}, {0x0a68, '\\uc8bd'}, {0x0a69, '\\uc8c4'},\r\n            {0x0a6a, '\\uc8c8'}, {0x0a6b, '\\uc8cc'}, {0x0a6c, '\\uc8d4'}, {0x0a6d, '\\uc8d5'},\r\n            {0x0a6e, '\\uc8d7'}, {0x0a6f, '\\uc8d9'}, {0x0a70, '\\uc8e0'}, {0x0a71, '\\uc8e1'},\r\n            {0x0a72, '\\uc8e4'}, {0x0a73, '\\uc8f5'}, {0x0a74, '\\uc8fc'}, {0x0a75, '\\uc8fd'},\r\n            {0x0a76, '\\uc900'}, {0x0a77, '\\uc904'}, {0x0a78, '\\uc905'}, {0x0a79, '\\uc906'},\r\n            {0x0a7a, '\\uc90c'}, {0x0a7b, '\\uc90d'}, {0x0a7c, '\\uc90f'}, {0x0a7d, '\\uc911'},\r\n            {0x0a7e, '\\uc918'}, {0x0a7f, '\\uc92c'}, {0x0a80, '\\uc934'}, {0x0a81, '\\uc950'},\r\n            {0x0a82, '\\uc951'}, {0x0a83, '\\uc954'}, {0x0a84, '\\uc958'}, {0x0a85, '\\uc960'},\r\n            {0x0a86, '\\uc961'}, {0x0a87, '\\uc963'}, {0x0a88, '\\uc96c'}, {0x0a89, '\\uc970'},\r\n            {0x0a8a, '\\uc974'}, {0x0a8b, '\\uc97c'}, {0x0a8c, '\\uc988'}, {0x0a8d, '\\uc989'},\r\n            {0x0a8e, '\\uc98c'}, {0x0a8f, '\\uc990'}, {0x0a90, '\\uc998'}, {0x0a91, '\\uc999'},\r\n            {0x0a92, '\\uc99b'}, {0x0a93, '\\uc99d'}, {0x0a94, '\\uc9c0'}, {0x0a95, '\\uc9c1'},\r\n            {0x0a96, '\\uc9c4'}, {0x0a97, '\\uc9c7'}, {0x0a98, '\\uc9c8'}, {0x0a99, '\\uc9ca'},\r\n            {0x0a9a, '\\uc9d0'}, {0x0a9b, '\\uc9d1'}, {0x0a9c, '\\uc9d3'}, {0x0a9d, '\\uc9d5'},\r\n            {0x0a9e, '\\uc9d6'}, {0x0a9f, '\\uc9d9'}, {0x0aa0, '\\uc9da'}, {0x0aa1, '\\uc9dc'},\r\n            {0x0aa2, '\\uc9dd'}, {0x0aa3, '\\uc9e0'}, {0x0aa4, '\\uc9e2'}, {0x0aa5, '\\uc9e4'},\r\n            {0x0aa6, '\\uc9e7'}, {0x0aa7, '\\uc9ec'}, {0x0aa8, '\\uc9ed'}, {0x0aa9, '\\uc9ef'},\r\n            {0x0aaa, '\\uc9f0'}, {0x0aab, '\\uc9f1'}, {0x0aac, '\\uc9f8'}, {0x0aad, '\\uc9f9'},\r\n            {0x0aae, '\\uc9fc'}, {0x0aaf, '\\uca00'}, {0x0ab0, '\\uca08'}, {0x0ab1, '\\uca09'},\r\n            {0x0ab2, '\\uca0b'}, {0x0ab3, '\\uca0c'}, {0x0ab4, '\\uca0d'}, {0x0ab5, '\\uca14'},\r\n            {0x0ab6, '\\uca18'}, {0x0ab7, '\\uca29'}, {0x0ab8, '\\uca4c'}, {0x0ab9, '\\uca4d'},\r\n            {0x0aba, '\\uca50'}, {0x0abb, '\\uca54'}, {0x0abc, '\\uca5c'}, {0x0abd, '\\uca5d'},\r\n            {0x0abe, '\\uca5f'}, {0x0abf, '\\uca60'}, {0x0ac0, '\\uca61'}, {0x0ac1, '\\uca68'},\r\n            {0x0ac2, '\\uca7d'}, {0x0ac3, '\\uca84'}, {0x0ac4, '\\uca98'}, {0x0ac5, '\\ucabc'},\r\n            {0x0ac6, '\\ucabd'}, {0x0ac7, '\\ucac0'}, {0x0ac8, '\\ucac4'}, {0x0ac9, '\\ucacc'},\r\n            {0x0aca, '\\ucacd'}, {0x0acb, '\\ucacf'}, {0x0acc, '\\ucad1'}, {0x0acd, '\\ucad3'},\r\n            {0x0ace, '\\ucad8'}, {0x0acf, '\\ucad9'}, {0x0ad0, '\\ucae0'}, {0x0ad1, '\\ucaec'},\r\n            {0x0ad2, '\\ucaf4'}, {0x0ad3, '\\ucb08'}, {0x0ad4, '\\ucb10'}, {0x0ad5, '\\ucb14'},\r\n            {0x0ad6, '\\ucb18'}, {0x0ad7, '\\ucb20'}, {0x0ad8, '\\ucb21'}, {0x0ad9, '\\ucb41'},\r\n            {0x0ada, '\\ucb48'}, {0x0adb, '\\ucb49'}, {0x0adc, '\\ucb4c'}, {0x0add, '\\ucb50'},\r\n            {0x0ade, '\\ucb58'}, {0x0adf, '\\ucb59'}, {0x0ae0, '\\ucb5d'}, {0x0ae1, '\\ucb64'},\r\n            {0x0ae2, '\\ucb78'}, {0x0ae3, '\\ucb79'}, {0x0ae4, '\\ucb9c'}, {0x0ae5, '\\ucbb8'},\r\n            {0x0ae6, '\\ucbd4'}, {0x0ae7, '\\ucbe4'}, {0x0ae8, '\\ucbe7'}, {0x0ae9, '\\ucbe9'},\r\n            {0x0aea, '\\ucc0c'}, {0x0aeb, '\\ucc0d'}, {0x0aec, '\\ucc10'}, {0x0aed, '\\ucc14'},\r\n            {0x0aee, '\\ucc1c'}, {0x0aef, '\\ucc1d'}, {0x0af0, '\\ucc21'}, {0x0af1, '\\ucc22'},\r\n            {0x0af2, '\\ucc27'}, {0x0af3, '\\ucc28'}, {0x0af4, '\\ucc29'}, {0x0af5, '\\ucc2c'},\r\n            {0x0af6, '\\ucc2e'}, {0x0af7, '\\ucc30'}, {0x0af8, '\\ucc38'}, {0x0af9, '\\ucc39'},\r\n            {0x0afa, '\\ucc3b'}, {0x0afb, '\\ucc3c'}, {0x0afc, '\\ucc3d'}, {0x0afd, '\\ucc3e'},\r\n            {0x0afe, '\\ucc44'}, {0x0aff, '\\ucc45'}, {0x0b00, '\\ucc48'}, {0x0b01, '\\ucc4c'},\r\n            {0x0b02, '\\ucc54'}, {0x0b03, '\\ucc55'}, {0x0b04, '\\ucc57'}, {0x0b05, '\\ucc58'},\r\n            {0x0b06, '\\ucc59'}, {0x0b07, '\\ucc60'}, {0x0b08, '\\ucc64'}, {0x0b09, '\\ucc66'},\r\n            {0x0b0a, '\\ucc68'}, {0x0b0b, '\\ucc70'}, {0x0b0c, '\\ucc75'}, {0x0b0d, '\\ucc98'},\r\n            {0x0b0e, '\\ucc99'}, {0x0b0f, '\\ucc9c'}, {0x0b10, '\\ucca0'}, {0x0b11, '\\ucca8'},\r\n            {0x0b12, '\\ucca9'}, {0x0b13, '\\uccab'}, {0x0b14, '\\uccac'}, {0x0b15, '\\uccad'},\r\n            {0x0b16, '\\uccb4'}, {0x0b17, '\\uccb5'}, {0x0b18, '\\uccb8'}, {0x0b19, '\\uccbc'},\r\n            {0x0b1a, '\\uccc4'}, {0x0b1b, '\\uccc5'}, {0x0b1c, '\\uccc7'}, {0x0b1d, '\\uccc9'},\r\n            {0x0b1e, '\\uccd0'}, {0x0b1f, '\\uccd4'}, {0x0b20, '\\ucce4'}, {0x0b21, '\\uccec'},\r\n            {0x0b22, '\\uccf0'}, {0x0b23, '\\ucd01'}, {0x0b24, '\\ucd08'}, {0x0b25, '\\ucd09'},\r\n            {0x0b26, '\\ucd0c'}, {0x0b27, '\\ucd10'}, {0x0b28, '\\ucd18'}, {0x0b29, '\\ucd19'},\r\n            {0x0b2a, '\\ucd1b'}, {0x0b2b, '\\ucd1d'}, {0x0b2c, '\\ucd24'}, {0x0b2d, '\\ucd28'},\r\n            {0x0b2e, '\\ucd2c'}, {0x0b2f, '\\ucd39'}, {0x0b30, '\\ucd5c'}, {0x0b31, '\\ucd60'},\r\n            {0x0b32, '\\ucd64'}, {0x0b33, '\\ucd6c'}, {0x0b34, '\\ucd6d'}, {0x0b35, '\\ucd6f'},\r\n            {0x0b36, '\\ucd71'}, {0x0b37, '\\ucd78'}, {0x0b38, '\\ucd88'}, {0x0b39, '\\ucd94'},\r\n            {0x0b3a, '\\ucd95'}, {0x0b3b, '\\ucd98'}, {0x0b3c, '\\ucd9c'}, {0x0b3d, '\\ucda4'},\r\n            {0x0b3e, '\\ucda5'}, {0x0b3f, '\\ucda7'}, {0x0b40, '\\ucda9'}, {0x0b41, '\\ucdb0'},\r\n            {0x0b42, '\\ucdc4'}, {0x0b43, '\\ucdcc'}, {0x0b44, '\\ucdd0'}, {0x0b45, '\\ucde8'},\r\n            {0x0b46, '\\ucdec'}, {0x0b47, '\\ucdf0'}, {0x0b48, '\\ucdf8'}, {0x0b49, '\\ucdf9'},\r\n            {0x0b4a, '\\ucdfb'}, {0x0b4b, '\\ucdfd'}, {0x0b4c, '\\uce04'}, {0x0b4d, '\\uce08'},\r\n            {0x0b4e, '\\uce0c'}, {0x0b4f, '\\uce14'}, {0x0b50, '\\uce19'}, {0x0b51, '\\uce20'},\r\n            {0x0b52, '\\uce21'}, {0x0b53, '\\uce24'}, {0x0b54, '\\uce28'}, {0x0b55, '\\uce30'},\r\n            {0x0b56, '\\uce31'}, {0x0b57, '\\uce33'}, {0x0b58, '\\uce35'}, {0x0b59, '\\uce58'},\r\n            {0x0b5a, '\\uce59'}, {0x0b5b, '\\uce5c'}, {0x0b5c, '\\uce5f'}, {0x0b5d, '\\uce60'},\r\n            {0x0b5e, '\\uce61'}, {0x0b5f, '\\uce68'}, {0x0b60, '\\uce69'}, {0x0b61, '\\uce6b'},\r\n            {0x0b62, '\\uce6d'}, {0x0b63, '\\uce74'}, {0x0b64, '\\uce75'}, {0x0b65, '\\uce78'},\r\n            {0x0b66, '\\uce7c'}, {0x0b67, '\\uce84'}, {0x0b68, '\\uce85'}, {0x0b69, '\\uce87'},\r\n            {0x0b6a, '\\uce89'}, {0x0b6b, '\\uce90'}, {0x0b6c, '\\uce91'}, {0x0b6d, '\\uce94'},\r\n            {0x0b6e, '\\uce98'}, {0x0b6f, '\\ucea0'}, {0x0b70, '\\ucea1'}, {0x0b71, '\\ucea3'},\r\n            {0x0b72, '\\ucea4'}, {0x0b73, '\\ucea5'}, {0x0b74, '\\uceac'}, {0x0b75, '\\ucead'},\r\n            {0x0b76, '\\ucec1'}, {0x0b77, '\\ucee4'}, {0x0b78, '\\ucee5'}, {0x0b79, '\\ucee8'},\r\n            {0x0b7a, '\\uceeb'}, {0x0b7b, '\\uceec'}, {0x0b7c, '\\ucef4'}, {0x0b7d, '\\ucef5'},\r\n            {0x0b7e, '\\ucef7'}, {0x0b7f, '\\ucef8'}, {0x0b80, '\\ucef9'}, {0x0b81, '\\ucf00'},\r\n            {0x0b82, '\\ucf01'}, {0x0b83, '\\ucf04'}, {0x0b84, '\\ucf08'}, {0x0b85, '\\ucf10'},\r\n            {0x0b86, '\\ucf11'}, {0x0b87, '\\ucf13'}, {0x0b88, '\\ucf15'}, {0x0b89, '\\ucf1c'},\r\n            {0x0b8a, '\\ucf20'}, {0x0b8b, '\\ucf24'}, {0x0b8c, '\\ucf2c'}, {0x0b8d, '\\ucf2d'},\r\n            {0x0b8e, '\\ucf2f'}, {0x0b8f, '\\ucf30'}, {0x0b90, '\\ucf31'}, {0x0b91, '\\ucf38'},\r\n            {0x0b92, '\\ucf54'}, {0x0b93, '\\ucf55'}, {0x0b94, '\\ucf58'}, {0x0b95, '\\ucf5c'},\r\n            {0x0b96, '\\ucf64'}, {0x0b97, '\\ucf65'}, {0x0b98, '\\ucf67'}, {0x0b99, '\\ucf69'},\r\n            {0x0b9a, '\\ucf70'}, {0x0b9b, '\\ucf71'}, {0x0b9c, '\\ucf74'}, {0x0b9d, '\\ucf78'},\r\n            {0x0b9e, '\\ucf80'}, {0x0b9f, '\\ucf85'}, {0x0ba0, '\\ucf8c'}, {0x0ba1, '\\ucfa1'},\r\n            {0x0ba2, '\\ucfa8'}, {0x0ba3, '\\ucfb0'}, {0x0ba4, '\\ucfc4'}, {0x0ba5, '\\ucfe0'},\r\n            {0x0ba6, '\\ucfe1'}, {0x0ba7, '\\ucfe4'}, {0x0ba8, '\\ucfe8'}, {0x0ba9, '\\ucff0'},\r\n            {0x0baa, '\\ucff1'}, {0x0bab, '\\ucff3'}, {0x0bac, '\\ucff5'}, {0x0bad, '\\ucffc'},\r\n            {0x0bae, '\\ud000'}, {0x0baf, '\\ud004'}, {0x0bb0, '\\ud011'}, {0x0bb1, '\\ud018'},\r\n            {0x0bb2, '\\ud02d'}, {0x0bb3, '\\ud034'}, {0x0bb4, '\\ud035'}, {0x0bb5, '\\ud038'},\r\n            {0x0bb6, '\\ud03c'}, {0x0bb7, '\\ud044'}, {0x0bb8, '\\ud045'}, {0x0bb9, '\\ud047'},\r\n            {0x0bba, '\\ud049'}, {0x0bbb, '\\ud050'}, {0x0bbc, '\\ud054'}, {0x0bbd, '\\ud058'},\r\n            {0x0bbe, '\\ud060'}, {0x0bbf, '\\ud06c'}, {0x0bc0, '\\ud06d'}, {0x0bc1, '\\ud070'},\r\n            {0x0bc2, '\\ud074'}, {0x0bc3, '\\ud07c'}, {0x0bc4, '\\ud07d'}, {0x0bc5, '\\ud081'},\r\n            {0x0bc6, '\\ud0a4'}, {0x0bc7, '\\ud0a5'}, {0x0bc8, '\\ud0a8'}, {0x0bc9, '\\ud0ac'},\r\n            {0x0bca, '\\ud0b4'}, {0x0bcb, '\\ud0b5'}, {0x0bcc, '\\ud0b7'}, {0x0bcd, '\\ud0b9'},\r\n            {0x0bce, '\\ud0c0'}, {0x0bcf, '\\ud0c1'}, {0x0bd0, '\\ud0c4'}, {0x0bd1, '\\ud0c8'},\r\n            {0x0bd2, '\\ud0c9'}, {0x0bd3, '\\ud0d0'}, {0x0bd4, '\\ud0d1'}, {0x0bd5, '\\ud0d3'},\r\n            {0x0bd6, '\\ud0d4'}, {0x0bd7, '\\ud0d5'}, {0x0bd8, '\\ud0dc'}, {0x0bd9, '\\ud0dd'},\r\n            {0x0bda, '\\ud0e0'}, {0x0bdb, '\\ud0e4'}, {0x0bdc, '\\ud0ec'}, {0x0bdd, '\\ud0ed'},\r\n            {0x0bde, '\\ud0ef'}, {0x0bdf, '\\ud0f0'}, {0x0be0, '\\ud0f1'}, {0x0be1, '\\ud0f8'},\r\n            {0x0be2, '\\ud10d'}, {0x0be3, '\\ud130'}, {0x0be4, '\\ud131'}, {0x0be5, '\\ud134'},\r\n            {0x0be6, '\\ud138'}, {0x0be7, '\\ud13a'}, {0x0be8, '\\ud140'}, {0x0be9, '\\ud141'},\r\n            {0x0bea, '\\ud143'}, {0x0beb, '\\ud144'}, {0x0bec, '\\ud145'}, {0x0bed, '\\ud14c'},\r\n            {0x0bee, '\\ud14d'}, {0x0bef, '\\ud150'}, {0x0bf0, '\\ud154'}, {0x0bf1, '\\ud15c'},\r\n            {0x0bf2, '\\ud15d'}, {0x0bf3, '\\ud15f'}, {0x0bf4, '\\ud161'}, {0x0bf5, '\\ud168'},\r\n            {0x0bf6, '\\ud16c'}, {0x0bf7, '\\ud17c'}, {0x0bf8, '\\ud184'}, {0x0bf9, '\\ud188'},\r\n            {0x0bfa, '\\ud1a0'}, {0x0bfb, '\\ud1a1'}, {0x0bfc, '\\ud1a4'}, {0x0bfd, '\\ud1a8'},\r\n            {0x0bfe, '\\ud1b0'}, {0x0bff, '\\ud1b1'}, {0x0c00, '\\ud1b3'}, {0x0c01, '\\ud1b5'},\r\n            {0x0c02, '\\ud1ba'}, {0x0c03, '\\ud1bc'}, {0x0c04, '\\ud1c0'}, {0x0c05, '\\ud1d8'},\r\n            {0x0c06, '\\ud1f4'}, {0x0c07, '\\ud1f8'}, {0x0c08, '\\ud207'}, {0x0c09, '\\ud209'},\r\n            {0x0c0a, '\\ud210'}, {0x0c0b, '\\ud22c'}, {0x0c0c, '\\ud22d'}, {0x0c0d, '\\ud230'},\r\n            {0x0c0e, '\\ud234'}, {0x0c0f, '\\ud23c'}, {0x0c10, '\\ud23d'}, {0x0c11, '\\ud23f'},\r\n            {0x0c12, '\\ud241'}, {0x0c13, '\\ud248'}, {0x0c14, '\\ud25c'}, {0x0c15, '\\ud264'},\r\n            {0x0c16, '\\ud280'}, {0x0c17, '\\ud281'}, {0x0c18, '\\ud284'}, {0x0c19, '\\ud288'},\r\n            {0x0c1a, '\\ud290'}, {0x0c1b, '\\ud291'}, {0x0c1c, '\\ud295'}, {0x0c1d, '\\ud29c'},\r\n            {0x0c1e, '\\ud2a0'}, {0x0c1f, '\\ud2a4'}, {0x0c20, '\\ud2ac'}, {0x0c21, '\\ud2b1'},\r\n            {0x0c22, '\\ud2b8'}, {0x0c23, '\\ud2b9'}, {0x0c24, '\\ud2bc'}, {0x0c25, '\\ud2bf'},\r\n            {0x0c26, '\\ud2c0'}, {0x0c27, '\\ud2c2'}, {0x0c28, '\\ud2c8'}, {0x0c29, '\\ud2c9'},\r\n            {0x0c2a, '\\ud2cb'}, {0x0c2b, '\\ud2d4'}, {0x0c2c, '\\ud2d8'}, {0x0c2d, '\\ud2dc'},\r\n            {0x0c2e, '\\ud2e4'}, {0x0c2f, '\\ud2e5'}, {0x0c30, '\\ud2f0'}, {0x0c31, '\\ud2f1'},\r\n            {0x0c32, '\\ud2f4'}, {0x0c33, '\\ud2f8'}, {0x0c34, '\\ud300'}, {0x0c35, '\\ud301'},\r\n            {0x0c36, '\\ud303'}, {0x0c37, '\\ud305'}, {0x0c38, '\\ud30c'}, {0x0c39, '\\ud30d'},\r\n            {0x0c3a, '\\ud30e'}, {0x0c3b, '\\ud310'}, {0x0c3c, '\\ud314'}, {0x0c3d, '\\ud316'},\r\n            {0x0c3e, '\\ud31c'}, {0x0c3f, '\\ud31d'}, {0x0c40, '\\ud31f'}, {0x0c41, '\\ud320'},\r\n            {0x0c42, '\\ud321'}, {0x0c43, '\\ud325'}, {0x0c44, '\\ud328'}, {0x0c45, '\\ud329'},\r\n            {0x0c46, '\\ud32c'}, {0x0c47, '\\ud330'}, {0x0c48, '\\ud338'}, {0x0c49, '\\ud339'},\r\n            {0x0c4a, '\\ud33b'}, {0x0c4b, '\\ud33c'}, {0x0c4c, '\\ud33d'}, {0x0c4d, '\\ud344'},\r\n            {0x0c4e, '\\ud345'}, {0x0c4f, '\\ud37c'}, {0x0c50, '\\ud37d'}, {0x0c51, '\\ud380'},\r\n            {0x0c52, '\\ud384'}, {0x0c53, '\\ud38c'}, {0x0c54, '\\ud38d'}, {0x0c55, '\\ud38f'},\r\n            {0x0c56, '\\ud390'}, {0x0c57, '\\ud391'}, {0x0c58, '\\ud398'}, {0x0c59, '\\ud399'},\r\n            {0x0c5a, '\\ud39c'}, {0x0c5b, '\\ud3a0'}, {0x0c5c, '\\ud3a8'}, {0x0c5d, '\\ud3a9'},\r\n            {0x0c5e, '\\ud3ab'}, {0x0c5f, '\\ud3ad'}, {0x0c60, '\\ud3b4'}, {0x0c61, '\\ud3b8'},\r\n            {0x0c62, '\\ud3bc'}, {0x0c63, '\\ud3c4'}, {0x0c64, '\\ud3c5'}, {0x0c65, '\\ud3c8'},\r\n            {0x0c66, '\\ud3c9'}, {0x0c67, '\\ud3d0'}, {0x0c68, '\\ud3d8'}, {0x0c69, '\\ud3e1'},\r\n            {0x0c6a, '\\ud3e3'}, {0x0c6b, '\\ud3ec'}, {0x0c6c, '\\ud3ed'}, {0x0c6d, '\\ud3f0'},\r\n            {0x0c6e, '\\ud3f4'}, {0x0c6f, '\\ud3fc'}, {0x0c70, '\\ud3fd'}, {0x0c71, '\\ud3ff'},\r\n            {0x0c72, '\\ud401'}, {0x0c73, '\\ud408'}, {0x0c74, '\\ud41d'}, {0x0c75, '\\ud440'},\r\n            {0x0c76, '\\ud444'}, {0x0c77, '\\ud45c'}, {0x0c78, '\\ud460'}, {0x0c79, '\\ud464'},\r\n            {0x0c7a, '\\ud46d'}, {0x0c7b, '\\ud46f'}, {0x0c7c, '\\ud478'}, {0x0c7d, '\\ud479'},\r\n            {0x0c7e, '\\ud47c'}, {0x0c7f, '\\ud47f'}, {0x0c80, '\\ud480'}, {0x0c81, '\\ud482'},\r\n            {0x0c82, '\\ud488'}, {0x0c83, '\\ud489'}, {0x0c84, '\\ud48b'}, {0x0c85, '\\ud48d'},\r\n            {0x0c86, '\\ud494'}, {0x0c87, '\\ud4a9'}, {0x0c88, '\\ud4cc'}, {0x0c89, '\\ud4d0'},\r\n            {0x0c8a, '\\ud4d4'}, {0x0c8b, '\\ud4dc'}, {0x0c8c, '\\ud4df'}, {0x0c8d, '\\ud4e8'},\r\n            {0x0c8e, '\\ud4ec'}, {0x0c8f, '\\ud4f0'}, {0x0c90, '\\ud4f8'}, {0x0c91, '\\ud4fb'},\r\n            {0x0c92, '\\ud4fd'}, {0x0c93, '\\ud504'}, {0x0c94, '\\ud508'}, {0x0c95, '\\ud50c'},\r\n            {0x0c96, '\\ud514'}, {0x0c97, '\\ud515'}, {0x0c98, '\\ud517'}, {0x0c99, '\\ud53c'},\r\n            {0x0c9a, '\\ud53d'}, {0x0c9b, '\\ud540'}, {0x0c9c, '\\ud544'}, {0x0c9d, '\\ud54c'},\r\n            {0x0c9e, '\\ud54d'}, {0x0c9f, '\\ud54f'}, {0x0ca0, '\\ud551'}, {0x0ca1, '\\ud558'},\r\n            {0x0ca2, '\\ud559'}, {0x0ca3, '\\ud55c'}, {0x0ca4, '\\ud560'}, {0x0ca5, '\\ud565'},\r\n            {0x0ca6, '\\ud568'}, {0x0ca7, '\\ud569'}, {0x0ca8, '\\ud56b'}, {0x0ca9, '\\ud56d'},\r\n            {0x0caa, '\\ud574'}, {0x0cab, '\\ud575'}, {0x0cac, '\\ud578'}, {0x0cad, '\\ud57c'},\r\n            {0x0cae, '\\ud584'}, {0x0caf, '\\ud585'}, {0x0cb0, '\\ud587'}, {0x0cb1, '\\ud588'},\r\n            {0x0cb2, '\\ud589'}, {0x0cb3, '\\ud590'}, {0x0cb4, '\\ud5a5'}, {0x0cb5, '\\ud5c8'},\r\n            {0x0cb6, '\\ud5c9'}, {0x0cb7, '\\ud5cc'}, {0x0cb8, '\\ud5d0'}, {0x0cb9, '\\ud5d2'},\r\n            {0x0cba, '\\ud5d8'}, {0x0cbb, '\\ud5d9'}, {0x0cbc, '\\ud5db'}, {0x0cbd, '\\ud5dd'},\r\n            {0x0cbe, '\\ud5e4'}, {0x0cbf, '\\ud5e5'}, {0x0cc0, '\\ud5e8'}, {0x0cc1, '\\ud5ec'},\r\n            {0x0cc2, '\\ud5f4'}, {0x0cc3, '\\ud5f5'}, {0x0cc4, '\\ud5f7'}, {0x0cc5, '\\ud5f9'},\r\n            {0x0cc6, '\\ud600'}, {0x0cc7, '\\ud601'}, {0x0cc8, '\\ud604'}, {0x0cc9, '\\ud608'},\r\n            {0x0cca, '\\ud610'}, {0x0ccb, '\\ud611'}, {0x0ccc, '\\ud613'}, {0x0ccd, '\\ud614'},\r\n            {0x0cce, '\\ud615'}, {0x0ccf, '\\ud61c'}, {0x0cd0, '\\ud620'}, {0x0cd1, '\\ud624'},\r\n            {0x0cd2, '\\ud62d'}, {0x0cd3, '\\ud638'}, {0x0cd4, '\\ud639'}, {0x0cd5, '\\ud63c'},\r\n            {0x0cd6, '\\ud640'}, {0x0cd7, '\\ud645'}, {0x0cd8, '\\ud648'}, {0x0cd9, '\\ud649'},\r\n            {0x0cda, '\\ud64b'}, {0x0cdb, '\\ud64d'}, {0x0cdc, '\\ud651'}, {0x0cdd, '\\ud654'},\r\n            {0x0cde, '\\ud655'}, {0x0cdf, '\\ud658'}, {0x0ce0, '\\ud65c'}, {0x0ce1, '\\ud667'},\r\n            {0x0ce2, '\\ud669'}, {0x0ce3, '\\ud670'}, {0x0ce4, '\\ud671'}, {0x0ce5, '\\ud674'},\r\n            {0x0ce6, '\\ud683'}, {0x0ce7, '\\ud685'}, {0x0ce8, '\\ud68c'}, {0x0ce9, '\\ud68d'},\r\n            {0x0cea, '\\ud690'}, {0x0ceb, '\\ud694'}, {0x0cec, '\\ud69d'}, {0x0ced, '\\ud69f'},\r\n            {0x0cee, '\\ud6a1'}, {0x0cef, '\\ud6a8'}, {0x0cf0, '\\ud6ac'}, {0x0cf1, '\\ud6b0'},\r\n            {0x0cf2, '\\ud6b9'}, {0x0cf3, '\\ud6bb'}, {0x0cf4, '\\ud6c4'}, {0x0cf5, '\\ud6c5'},\r\n            {0x0cf6, '\\ud6c8'}, {0x0cf7, '\\ud6cc'}, {0x0cf8, '\\ud6d1'}, {0x0cf9, '\\ud6d4'},\r\n            {0x0cfa, '\\ud6d7'}, {0x0cfb, '\\ud6d9'}, {0x0cfc, '\\ud6e0'}, {0x0cfd, '\\ud6e4'},\r\n            {0x0cfe, '\\ud6e8'}, {0x0cff, '\\ud6f0'}, {0x0d00, '\\ud6f5'}, {0x0d01, '\\ud6fc'},\r\n            {0x0d02, '\\ud6fd'}, {0x0d03, '\\ud700'}, {0x0d04, '\\ud704'}, {0x0d05, '\\ud711'},\r\n            {0x0d06, '\\ud718'}, {0x0d07, '\\ud719'}, {0x0d08, '\\ud71c'}, {0x0d09, '\\ud720'},\r\n            {0x0d0a, '\\ud728'}, {0x0d0b, '\\ud729'}, {0x0d0c, '\\ud72b'}, {0x0d0d, '\\ud72d'},\r\n            {0x0d0e, '\\ud734'}, {0x0d0f, '\\ud735'}, {0x0d10, '\\ud738'}, {0x0d11, '\\ud73c'},\r\n            {0x0d12, '\\ud744'}, {0x0d13, '\\ud747'}, {0x0d14, '\\ud749'}, {0x0d15, '\\ud750'},\r\n            {0x0d16, '\\ud751'}, {0x0d17, '\\ud754'}, {0x0d18, '\\ud756'}, {0x0d19, '\\ud757'},\r\n            {0x0d1a, '\\ud758'}, {0x0d1b, '\\ud759'}, {0x0d1c, '\\ud760'}, {0x0d1d, '\\ud761'},\r\n            {0x0d1e, '\\ud763'}, {0x0d1f, '\\ud765'}, {0x0d20, '\\ud769'}, {0x0d21, '\\ud76c'},\r\n            {0x0d22, '\\ud770'}, {0x0d23, '\\ud774'}, {0x0d24, '\\ud77c'}, {0x0d25, '\\ud77d'},\r\n            {0x0d26, '\\ud781'}, {0x0d27, '\\ud788'}, {0x0d28, '\\ud789'}, {0x0d29, '\\ud78c'},\r\n            {0x0d2a, '\\ud790'}, {0x0d2b, '\\ud798'}, {0x0d2c, '\\ud799'}, {0x0d2d, '\\ud79b'},\r\n            {0x0d2e, '\\ud79d'}, {0x0d31, '\\u1100'}, {0x0d32, '\\u1101'}, {0x0d33, '\\u1102'},\r\n            {0x0d34, '\\u1103'}, {0x0d35, '\\u1104'}, {0x0d36, '\\u1105'}, {0x0d37, '\\u1106'},\r\n            {0x0d38, '\\u1107'}, {0x0d39, '\\u1108'}, {0x0d3a, '\\u1109'}, {0x0d3b, '\\u110a'},\r\n            {0x0d3c, '\\u110b'}, {0x0d3d, '\\u110c'}, {0x0d3e, '\\u110d'}, {0x0d3f, '\\u110e'},\r\n            {0x0d40, '\\u110f'}, {0x0d41, '\\u1110'}, {0x0d42, '\\u1111'}, {0x0d43, '\\u1112'},\r\n            {0x0d44, '\\u1161'}, {0x0d45, '\\u1162'}, {0x0d46, '\\u1163'}, {0x0d47, '\\u1164'},\r\n            {0x0d48, '\\u1165'}, {0x0d49, '\\u1166'}, {0x0d4a, '\\u1167'}, {0x0d4b, '\\u1168'},\r\n            {0x0d4c, '\\u1169'}, {0x0d4d, '\\u116d'}, {0x0d4e, '\\u116e'}, {0x0d4f, '\\u1172'},\r\n            {0x0d50, '\\u1173'}, {0x0d51, '\\u1175'}, {0x0d61, '\\ub894'}, {0x0d62, '\\uc330'},\r\n            {0x0d63, '\\uc3bc'}, {0x0d64, '\\uc4d4'}, {0x0d65, '\\ucb2c'},\r\n        };\r\n\t}\r\n}\r\n"
  },
  {
    "path": "library/Support/EncodedString5.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\n\r\nnamespace PkmnFoundations.Support\r\n{\r\n    public class EncodedString5 : EncodedStringBase\r\n    {\r\n        /// <summary>\r\n        /// Instances an EncodedString5 from its binary representation.\r\n        /// </summary>\r\n        /// <param name=\"data\">This buffer is copied.</param>\r\n        public EncodedString5(byte[] data) : base(data)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Instances an EncodedString5 from its binary representation.\r\n        /// </summary>\r\n        /// <param name=\"data\">Buffer to copy from</param>\r\n        /// <param name=\"start\">Offset in buffer</param>\r\n        /// <param name=\"length\">Number of bytes (not chars) to copy</param>\r\n        public EncodedString5(byte[] data, int start, int length) : base(data, start, length)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Instances an EncodedString5 from a Unicode string.\r\n        /// </summary>\r\n        /// <param name=\"text\">text</param>\r\n        /// <param name=\"length\">Length of encoded buffer in bytes (not chars)</param>\r\n        public EncodedString5(string text, int length) : base(text, length)\r\n        {\r\n        }\r\n\r\n        // todo: Use pointers for both of these\r\n\t\tpublic static string DecodeString_impl(byte[] data, int start, int count)\r\n\t\t{\r\n            if (data.Length < start + count) throw new ArgumentOutOfRangeException(\"count\");\r\n            if (count < 0) throw new ArgumentOutOfRangeException(\"count\");\r\n\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\r\n            for (int i = start; i < start + count * 2; i += 2)\r\n\t\t\t{\r\n                ushort gamecode = BitConverter.ToUInt16(data, i);\r\n                if (gamecode == 0xffff) { break; }\r\n                char ch = Generation5TextLookupTable.ContainsKey(gamecode) ?\r\n                    Generation5TextLookupTable[gamecode] :\r\n                    (char)gamecode;\r\n\r\n                sb.Append(ch);\r\n            }\r\n\r\n\t\t\treturn sb.ToString();\r\n\t\t}\r\n\r\n        public static string DecodeString_impl(byte[] data)\r\n        {\r\n            return DecodeString_impl(data, 0, data.Length >> 1);\r\n        }\r\n\r\n        public static byte[] EncodeString_impl(string str, int size)\r\n        {\r\n            int actualLength = (size >> 1) - 1;\r\n            if (str.Length > actualLength) throw new ArgumentOutOfRangeException(\"size\");\r\n\r\n            byte[] result = new byte[size];\r\n            MemoryStream m = new MemoryStream(result);\r\n\r\n            foreach (char c in str.ToCharArray())\r\n            {\r\n                m.Write(BitConverter.GetBytes(LookupReverse.ContainsKey(c) ? LookupReverse[c] : c), 0, 2);\r\n            }\r\n\r\n            m.WriteByte(0xff);\r\n            m.WriteByte(0xff);\r\n            return result;\r\n        }\r\n\r\n        protected override string DecodeString(byte[] data, int start, int count)\r\n        {\r\n            return DecodeString_impl(data, start, count);\r\n        }\r\n\r\n        protected override byte[] EncodeString(string str, int size)\r\n        {\r\n            return EncodeString_impl(str, size);\r\n        }\r\n\r\n\r\n        public override string ToString()\r\n\t\t{\r\n\t\t\treturn Text;\r\n\t\t}\r\n\r\n        public EncodedString5 Clone()\r\n        {\r\n            return new EncodedString5(RawData);\r\n        }\r\n\r\n        private static Dictionary<char, ushort> m_lookup_reverse = null;\r\n        private static Dictionary<char, ushort> LookupReverse\r\n        {\r\n            get\r\n            {\r\n                if (m_lookup_reverse == null)\r\n                {\r\n                    Dictionary<char, ushort> reverse = new Dictionary<char, ushort>(Generation5TextLookupTable.Count);\r\n\r\n                    foreach (KeyValuePair<ushort, char> pair in Generation5TextLookupTable)\r\n                    {\r\n                        //if (!reverse.ContainsKey(pair.Value))\r\n                            reverse.Add(pair.Value, pair.Key);\r\n                    }\r\n\r\n                    m_lookup_reverse = reverse;\r\n                }\r\n                return m_lookup_reverse;\r\n            }\r\n        }\r\n\r\n        private static Dictionary<ushort, char> Generation5TextLookupTable = new Dictionary<ushort, char>\r\n        {\r\n            {0x2467, '\\u00d7'}, {0x2468, '\\u00f7'}, {0x246c, '\\u2026'}, {0x246d, '\\u2642'}, \r\n            {0x246e, '\\u2640'}, {0x246f, '\\u2660'}, {0x2470, '\\u2663'}, {0x2471, '\\u2665'}, \r\n            {0x2472, '\\u2666'}, {0x2473, '\\u2605'}, {0x2474, '\\u25ce'}, {0x2475, '\\u25cb'}, \r\n            {0x2476, '\\u25a1'}, {0x2477, '\\u25b3'}, {0x2478, '\\u25c7'}, {0x2479, '\\u266a'}, \r\n            {0x247a, '\\u2600'}, {0x247b, '\\u2601'}, {0x247d, '\\u2602'}, \r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "library/Support/EncodedStringBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public abstract class EncodedStringBase\n    {\n        public EncodedStringBase()\n        {\n\n        }\n\n        public EncodedStringBase(byte[] data) : this()\n        {\n            RawData = data;\n        }\n\n        /// <summary>\n        /// Instances an EncodedString from its binary representation.\n        /// </summary>\n        /// <param name=\"data\">Buffer to copy from</param>\n        /// <param name=\"start\">Offset in buffer</param>\n        /// <param name=\"length\">Number of bytes (not chars) to copy</param>\n        public EncodedStringBase(byte[] data, int start, int length)\n        {\n            if (length < 2) throw new ArgumentOutOfRangeException(\"length\");\n            if (data.Length < start + length) throw new ArgumentOutOfRangeException(\"length\");\n            if (length % 2 != 0) throw new ArgumentException(\"length\");\n\n            Size = length;\n            byte[] trim = new byte[length];\n            Array.Copy(data, start, trim, 0, length);\n            AssignData(trim);\n        }\n\n        /// <summary>\n        /// Instances an EncodedString from a Unicode string.\n        /// </summary>\n        /// <param name=\"text\">text</param>\n        /// <param name=\"length\">Length of encoded buffer in bytes (not chars)</param>\n        public EncodedStringBase(string text, int length)\n        {\n            if (length < 2) throw new ArgumentOutOfRangeException(\"length\");\n            if (length % 2 != 0) throw new ArgumentException(\"length\");\n\n            Size = length;\n            Text = text;\n        }\n\n        // todo: move more of the encoded string implementation over here for DRY reasons\n\n        private byte[] m_raw_data;\n        private string m_text;\n\n        public virtual string Text\n        {\n            get\n            {\n                if (m_text == null && m_raw_data == null) return null;\n                if (m_text == null) m_text = DecodeString(m_raw_data, 0, m_raw_data.Length >> 1);\n                return m_text;\n            }\n            set\n            {\n                int actualLength = (Size >> 1) - 1;\n                if (value.Length > actualLength) throw new ArgumentException();\n                AssignText(value);\n            }\n        }\n\n        public virtual byte[] RawData\n        {\n            get\n            {\n                if (m_raw_data == null && m_text == null) return null;\n                if (m_raw_data == null) m_raw_data = EncodeString(m_text, Size);\n                return m_raw_data.ToArray();\n            }\n            set\n            {\n                int size = value.Length;\n                if (size < 2) throw new ArgumentException();\n                if (size % 2 != 0) throw new ArgumentException();\n\n                Size = size;\n                AssignData(value.ToArray());\n            }\n        }\n\n        // lazy evaluate these conversions since they're slow\n        protected virtual void AssignData(byte[] data)\n        {\n            m_raw_data = data;\n            m_text = null;\n        }\n\n        protected virtual void AssignText(string text)\n        {\n            m_text = text;\n            m_raw_data = null;\n        }\n\n        protected abstract string DecodeString(byte[] data, int start, int count);\n\n        protected abstract byte[] EncodeString(string str, int size);\n\n        public override string ToString()\n        {\n            return Text;\n        }\n\n        public virtual int Size { get; protected set; }\n\n        public virtual bool IsValid\n        {\n            get\n            {\n                return true;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/EnumerableExtender.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public static class EnumerableExtender\n    {\n        public static IEnumerable<T> OrderByLambda<T>(this IEnumerable<T> arg, Func<T, T, int> comparer)\n        {\n            // xxx: Should be using Comparer<T>.Create but we need .NET 4.5 for it. and are still targeting 3.5.\n            return arg.OrderBy(k => k, new LambdaComparer<T>(comparer));\n        }\n\n        private class LambdaComparer<T> : IComparer<T>\n        {\n            public LambdaComparer(Func<T, T, int> comparer)\n            {\n                m_comparer = comparer;\n            }\n\n            private readonly Func<T, T, int> m_comparer;\n\n            public int Compare(T first, T second)\n            {\n                return m_comparer(first, second);\n            }\n        }\n\n        public static IEnumerable<T> DrawWithoutReplacement<T>(this IEnumerable<T> source, Random rng)\n        {\n            var working = source.ToList();\n\n            for (int i = working.Count; i > 0; i--)\n            {\n                int rand = rng.Next(i);\n                yield return working[rand];\n                working[rand] = working[i - 1];\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/GameSyncUtils.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public static class GameSyncUtils\n    {\n\t\tprivate static ushort GameSyncCrc16(int val)\n        {\n\t\t\tvar table = new ushort[]\n\t\t\t{\n\t\t\t\t// xxx: I suspect this lut is actually a baked crc polynomial\n\t\t\t\t0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n\t\t\t\t0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\n\t\t\t\t0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n\t\t\t\t0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\n\t\t\t\t0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\n\t\t\t\t0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n\t\t\t\t0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\n\t\t\t\t0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\n\t\t\t\t0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n\t\t\t\t0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\n\t\t\t\t0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\n\t\t\t\t0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n\t\t\t\t0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\n\t\t\t\t0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\n\t\t\t\t0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n\t\t\t\t0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\n\t\t\t\t0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\n\t\t\t\t0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n\t\t\t\t0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\n\t\t\t\t0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\n\t\t\t\t0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n\t\t\t\t0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\n\t\t\t\t0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\n\t\t\t\t0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n\t\t\t\t0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\n\t\t\t\t0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\n\t\t\t\t0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n\t\t\t\t0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\n\t\t\t\t0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\n\t\t\t\t0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n\t\t\t\t0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\n\t\t\t\t0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n\t\t\t};\n\n\t\t\tint crc16 = 0xffff;\n\n\t\t\tfor (int i = 0; i < 4; i++)\n            {\n\t\t\t\tcrc16 = (crc16 << 8) ^ table[((crc16 >> 8) ^ (val & 0xff)) & 0xff];\n\t\t\t\tval >>= 8;\n            }\n\n\t\t\treturn (ushort)crc16;\n        }\n\n\t\tpublic static string PidToGsid(int pid)\n        {\n\t\t\treturn Base32Encode((long)pid | ((long)GameSyncCrc16(pid) << 32));\n        }\n\n\t\tpublic static int GsidToPid(string gsid)\n        {\n\t\t\treturn (int)Base32Decode(gsid);\n        }\n\n        // todo: add PidToFc and FcToPid methods.\n        // Algo: https://www.caitsith2.com/ds/fc.php.txt\n\n        private const string charset = \"ABCDEFGHJKLMNPQRSTUVWXYZ23456789\"; // Not the entire alphabet, be careful\n\t\tpublic static string Base32Encode(long value)\n\t\t{\n\t\t\tStringBuilder result = new StringBuilder(10);\n\n\t\t\tfor (int i = 0; i < 10; i++)\n\t\t\t{\n\t\t\t\tresult.Append(charset[(int)(value & 0x1f)]);\n\t\t\t\tvalue >>= 5;\n\t\t\t}\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic static long Base32Decode(string value)\n        {\n\t\t\tlong result = 0;\n\n\t\t\t// xxx: we don't need to reverse this if we shift the other way and fill in starting at the MSB\n\t\t\tforeach (char c in value.ToUpperInvariant().Reverse())\n            {\n\t\t\t\tresult <<= 5;\n\t\t\t\tif (charset.Contains(c)) result |= (long)charset.IndexOf(c);\n\t\t\t\telse throw new FormatException(\"Base32 string contains invalid characters\");\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "library/Support/Indexer1d.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    /// <summary>\n    /// Helper class to aid with the implementation of non-default indexers\n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    public class Indexer1d<TKey, TValue> : IReadOnlyIndexer1d<TKey, TValue>, IWriteOnlyIndexer1d<TKey, TValue>\n    {\n        public Indexer1d(Getter1d<TKey, TValue> getter, Setter1d<TKey, TValue> setter)\n        {\n            m_getter = getter;\n            m_setter = setter;\n        }\n\n        private Getter1d<TKey, TValue> m_getter;\n        private Setter1d<TKey, TValue> m_setter;\n\n        public TValue this[TKey index]\n        {\n            get\n            {\n                return m_getter(index);\n            }\n            set\n            {\n                m_setter(index, value);\n            }\n        }\n    }\n\n    public class ReadOnlyIndexer1d<TKey, TValue> : IReadOnlyIndexer1d<TKey, TValue>\n    {\n        public ReadOnlyIndexer1d(Getter1d<TKey, TValue> getter)\n        {\n            m_getter = getter;\n        }\n\n        private Getter1d<TKey, TValue> m_getter;\n        \n        public TValue this[TKey index]\n        {\n            get\n            {\n                return m_getter(index);\n            }\n        }\n    }\n\n    public interface IReadOnlyIndexer1d<in TKey, out TValue>\n    {\n        TValue this[TKey index] { get; }\n    }\n\n    public interface IWriteOnlyIndexer1d<in TKey, in TValue>\n    {\n        TValue this[TKey index] { set; }\n    }\n\n    public delegate TValue Getter1d<TKey, TValue>(TKey index);\n    public delegate void Setter1d<TKey, TValue>(TKey index, TValue value);\n}\n"
  },
  {
    "path": "library/Support/LazyKeyValuePair.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public class LazyKeyValuePair<TKey, TValue> : ILazyKeyValuePair<TKey, TValue>\n    {\n        public LazyKeyValuePair(Func<TKey, TValue> evaluator, Func<TValue, TKey> key_evaluator)\n        {\n            m_evaluator = evaluator;\n            m_key_evaluator = key_evaluator;\n            m_has_key = true;\n            m_has_value = false;\n        }\n\n        private TKey m_key;\n        private bool m_has_key;\n        private Func<TKey, TValue> m_evaluator;\n        public TKey Key\n        {\n            get\n            {\n                EvaluateKey();\n                return m_key;\n            }\n            set\n            {\n                m_key = value;\n                m_has_key = true;\n                m_has_value = false;\n            }\n        }\n\n        private TValue m_value;\n        private bool m_has_value;\n        private Func<TValue, TKey> m_key_evaluator;\n        public TValue Value\n        {\n            get\n            {\n                Evaluate();\n                return m_value;\n            }\n            set\n            {\n                m_value = value;\n                m_has_value = true;\n                m_has_key = false;\n            }\n        }\n\n        public void EvaluateKey()\n        {\n#if DEBUG\n            AssertHelper.Assert(m_has_key || m_has_value);\n#endif\n            if (!m_has_key) m_key = m_key_evaluator(m_value);\n            m_has_key = true;\n        }\n\n        public void Evaluate()\n        {\n#if DEBUG\n            AssertHelper.Assert(m_has_key || m_has_value);\n#endif\n            if (!m_has_value) m_value = m_evaluator(m_key);\n            m_has_value = true;\n        }\n\n        /// <summary>\n        /// Causes the Key to be lost so it will be recomputed from the Value.\n        /// </summary>\n        public void InvalidateKey()\n        {\n            if (!m_has_value) throw new InvalidOperationException();\n            m_has_key = false;\n        }\n\n        /// <summary>\n        /// Causes the Value to be lost so it will be recomputed from the Key.\n        /// </summary>\n        public void Invalidate()\n        {\n            if (!m_has_key) throw new InvalidOperationException();\n            m_has_value = false;\n        }\n    }\n\n    public interface ILazyKeyValuePair<out TKey, out TValue>\n    {\n        TKey Key { get; }\n        TValue Value { get; }\n        void EvaluateKey();\n        void Evaluate();\n    }\n}\n"
  },
  {
    "path": "library/Support/LocalizedString.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\n\nnamespace PkmnFoundations.Support\n{\n    public class LocalizedString : Dictionary<string, string>\n    {\n        public LocalizedString()\n        {\n\n        }\n\n        public string ToString(string lang)\n        {\n            if (Count == 0) return null;\n\n            lang = lang.ToUpperInvariant();\n            try\n            {\n                return this[lang];\n            }\n            catch (KeyNotFoundException)\n            {\n\n            }\n\n            try\n            {\n                return this[\"EN\"];\n            }\n            catch (KeyNotFoundException)\n            {\n\n            }\n\n            return Values.First();\n        }\n\n        public override string ToString()\n        {\n            return ToString(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/LogHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public static class LogHelper\n    {\n        static LogHelper()\n        {\n            Type = EventLogTypes.StandardError;\n        }\n\n        public static void Write(String message, EventLogEntryType type, int eventID, ushort category, byte[] rawData)\n        {\n            switch (Type)\n            {\n                case EventLogTypes.StandardOutput:\n                    Console.WriteLine(message);\n                    break;\n                case EventLogTypes.StandardError:\n                    Console.Error.WriteLine(message);\n                    break;\n                case EventLogTypes.File:\n                    try\n                    {\n                        using (FileStream fs = File.Open(m_filename, FileMode.Append))\n                        {\n                            StreamWriter sw = new StreamWriter(fs);\n                            sw.Write(\"{0}\\t{1}\\n\", DateTime.Now, message);\n                            sw.Close();\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        Console.WriteLine(\"Can't open logfile at {0}.\\nException: {1}\\nMessage: {2}\", m_filename, ex.Message, message);\n                    }\n                    break;\n                case EventLogTypes.Windows:\n                    m_event_log.WriteEntry(message, type, eventID, (short)category, rawData);\n                    break;\n            }\n        }\n\n        public static void Write(String message, EventLogEntryType type)\n        {\n            Write(message, type, 0, 0, null);\n        }\n\n        public static void Write(String message)\n        {\n            Write(message, EventLogEntryType.Information, 0, 0, null);\n        }\n\n        public static void UseStandardOutput()\n        {\n            Type = EventLogTypes.StandardOutput;\n            m_event_log = null;\n        }\n\n        public static void UseStandardError()\n        {\n            Type = EventLogTypes.StandardError;\n            m_event_log = null;\n        }\n\n        public static void UseFile(String filename)\n        {\n            if (filename == null) throw new ArgumentNullException(\"filename\");\n            Type = EventLogTypes.File;\n            m_filename = filename;\n            m_event_log = null;\n        }\n\n        public static void UseEventLog(EventLog event_log)\n        {\n            if (event_log == null) throw new ArgumentNullException(\"event_log\");\n            Type = EventLogTypes.Windows;\n            m_event_log = event_log;\n        }\n\n        public static EventLogTypes Type\n        {\n            get;\n            private set;\n        }\n\n        private static String m_filename;\n        private static EventLog m_event_log;\n    }\n\n    public enum EventLogTypes\n    {\n        StandardOutput,\n        StandardError,\n        File,\n        Windows\n    }\n}\n"
  },
  {
    "path": "library/Support/StreamExtender.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\n\nnamespace PkmnFoundations.Support\n{\n    public static class StreamExtender\n    {\n        /// <summary>\n        /// Reads bytes from a stream and blocks until it can read them all.\n        /// </summary>\n        /// <param name=\"s\">Stream</param>\n        /// <param name=\"buffer\">Buffer to dump data into</param>\n        /// <param name=\"offset\">Offset in buffer</param>\n        /// <param name=\"count\">Desired number of bytes</param>\n        /// <returns>Number of bytes obtained. Should only be less than count \n        /// if eof was reached.</returns>\n        public static int ReadBlock(this Stream s, byte[] buffer, int offset, int count)\n        {\n            int readBytes = 0;\n            while (readBytes < count)\n            {\n                int x = s.Read(buffer, offset + readBytes, count - readBytes);\n                if (x == 0) return readBytes;\n                readBytes += x;\n            }\n            return readBytes;\n        }\n\n        /// <summary>\n        /// Reads bytes from a stream and blocks until it can read them all.\n        /// </summary>\n        /// <param name=\"r\">Stream, encapsulated in a BinaryReader</param>\n        /// <param name=\"buffer\">Buffer to dump data into</param>\n        /// <param name=\"offset\">Offset in buffer</param>\n        /// <param name=\"count\">Desired number of bytes</param>\n        /// <returns>Number of bytes obtained. Should only be less than count \n        /// if eof was reached.</returns>\n        public static int ReadBlock(this BinaryReader r, byte[] buffer, int offset, int count)\n        {\n            int readBytes = 0;\n            while (readBytes < count)\n            {\n                int x = r.Read(buffer, offset + readBytes, count - readBytes);\n                if (x == 0) return readBytes;\n                readBytes += x;\n            }\n            return readBytes;\n        }\n\n        public static void CompatibleCopyTo(this Stream src, Stream dest)\n        {\n            const int BUFFER_LENGTH = 256;\n            byte[] buffer = new byte[BUFFER_LENGTH];\n\n            int lastProgress;\n\n            while ((lastProgress = src.Read(buffer, 0, BUFFER_LENGTH)) > 0)\n                dest.Write(buffer, 0, lastProgress);\n        }\n\n        public static void WriteBytes(this Stream s, byte[] buffer)\n        {\n            // Lack of a Stream.Write overload that just writes the whole array\n            // seems like a huge omission to me.\n            s.Write(buffer, 0, buffer.Length);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/StringHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\n\nnamespace PkmnFoundations.Support\n{\n    public static class StringHelper\n    {\n        public static String BytesToString(byte[] data, Encoding encoding)\n        {\n            MemoryStream ms = new MemoryStream(data);\n            StreamReader sr = new StreamReader(ms, encoding);\n            return sr.ReadToEnd();\n        }\n\n        public static String BytesToString(byte[] data, int start, int length, Encoding encoding)\n        {\n            MemoryStream ms = new MemoryStream(data, start, length);\n            StreamReader sr = new StreamReader(ms, encoding);\n            return sr.ReadToEnd();\n        }\n    }\n}\n"
  },
  {
    "path": "library/Support/TrendyPhrase4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public class TrendyPhrase4 : TrendyPhraseBase\n    {\n        public TrendyPhrase4(byte[] data) : base(data)\n        {\n        }\n\n        public TrendyPhrase4(ushort mood, ushort index, ushort word1, ushort word2)\n            : base(Pack(mood, index, word1, word2))\n        {\n        }\n\n        public override string Render(string wordFormat)\n        {\n            return RenderPhrase(Data, wordFormat);\n        }\n\n        public static string RenderPhrase(byte[] data, string wordFormat)\n        {\n            if (data == null) throw new ArgumentNullException();\n            if (data.Length != 8) throw new ArgumentException();\n\n            ushort mood = BitConverter.ToUInt16(data, 0);\n            ushort index = BitConverter.ToUInt16(data, 2);\n            ushort word1 = BitConverter.ToUInt16(data, 4);\n            ushort word2 = BitConverter.ToUInt16(data, 6);\n\n            if (mood >= 5) return \"\";\n            if (index >= 20) return \"\";\n            return string.Format(PHRASES[mood, index], \n                string.Format(wordFormat, RenderWord(word1)),\n                string.Format(wordFormat, RenderWord(word2))\n                );\n        }\n\n        public static string RenderWord(ushort word)\n        {\n            if (word < 496) return WORDS_POKEMON[word];\n            if (word < 964) return WORDS_MOVES[word - 496];\n            if (word < 982) return WORDS_TYPES[word - 964];\n            if (word < 1106) return WORDS_ABILITIES[word - 982];\n            if (word < 1144) return WORDS_TRAINER[word - 1106];\n            if (word < 1182) return WORDS_PEOPLE[word - 1144];\n            if (word < 1289) return WORDS_GREETINGS[word - 1182];\n            if (word < 1393) return WORDS_LIFESTYLE[word - 1289];\n            if (word < 1440) return WORDS_FEELINGS[word - 1393];\n            if (word < 1472) return WORDS_TOUGH[word - 1440];\n            if (word < 1495) return WORDS_UNION[word - 1472];\n            return \"\";\n        }\n\n        public TrendyPhrase4 Clone()\n        {\n            return new TrendyPhrase4(Data);\n        }\n\n        #region String tables\n        // Special thanks to http://projectpokemon.org/rawdb/diamond/msg.php\n        // for their string table dumps.\n\n        // msg.narc/395 through /399\n        private static string[,] PHRASES = new string[,]\n        {\n            {   // Mood 0: Start of battle                      \n                \"Please!\\n{0}!\",                                //  0\n                \"Go! {0}!\",                                     //  1\n                \"I’ll battle with\\n{0}!\",                       //  2\n                \"It’s {0}!\",                                    //  3\n                \"{0}, I’m going\\nwith {1}!\",                    //  4\n                \"Look at {0}!\",                                 //  5\n                \"I’ll show you {0}!\",                           //  6\n                \"Now!\\n{0}!\",                                   //  7\n                \"I’ll show you my\\n{0} strategy!\",              //  8\n                \"I’ll {0}!\",                                    //  9\n                \"I’ll shock you with\\n{0}!\",                    // 10\n                \"This is the beginning\\nof {0}!\",               // 11\n                \"This battle is\\n{0}!\",                         // 12\n                \"I don’t think I’ll\\never lose at {0}!\",        // 13\n                \"Team {0} is here!\",                            // 14\n                \"You think you can beat\\n{0}?\",                 // 15\n                \"{0}!\\n{1} power!\",                             // 16\n                \"This is the {0}\\nPokémon!\",                    // 17\n                \"{0} won’t lose!\",                              // 18\n                \"Please {0}!\\n{1}!\"                             // 19\n            },\n            {   // Mood 1: Victory\n                \"I win!\\n{0}!\",                                 //  0\n                \"I won!\\nI won with {0}!\",                      //  1\n                \"{0} is strong,\\nisn’t it?\",                    //  2\n                \"It’s {0}\\n{1} after all!\",                     //  3\n                \"{0}, yay!\",                                    //  4\n                \"Yay, {0}!\\n{1}!\",                              //  5\n                \"Sorry, it’s {0}\\n{1}.\",                        //  6\n                \"{0}!\\nThank you!\",                             //  7\n                \"The way I feel now is\\n{0}!\",                  //  8\n                \"I wanted people to look at\\nmy {0}!\",          //  9\n                \"It’s all thanks to\\n{0}.\",                     // 10\n                \"I might have won with\\n{0}!\",                  // 11\n                \"I get the happiest with\\n{0}!\",                // 12\n                \"{0} secured\\nthe victory!\",                    // 13\n                \"This {0}\\nwas really good!\",                   // 14\n                \"{0}\\nwas fun, wasn’t it?\",                     // 15\n                \"Huh?\\n{0}?!\",                                  // 16\n                \"{0} is the toughest!\",                         // 17\n                \"Happy!\\n{0} happy!\",                           // 18\n                \"How’s that?!\\n{0}!\"                            // 19\n            },\n            {   // Mood 2: Defeat\n                \"You win...\\n{0}\",                              //  0\n                \"{0} was the one\\nthing I wanted to avoid...\",  //  1\n                \"Waaah!\\n{0}!\",                                 //  2\n                \"I want to go home with\\n{0}...\",               //  3\n                \"{0}!\\n{1}!\",                                   //  4\n                \"Could it be...?\\n{0}...?\",                     //  5\n                \"{0}!\\nHow awful!\",                             //  6\n                \"I was confident about\\n{0}, too.\",             //  7\n                \"You're {0},\\naren’t you?\",                     //  8\n                \"{0}!\\nCan’t be anything else but.\",            //  9\n                \"I feel so helplessly angry...\\nIt’s {0}!\",     // 10\n                \"{0} makes me sad...\",                          // 11\n                \"I feel sorry for\\n{0}!\",                       // 12\n                \"The way I feel now is\\n{0}...\",                // 13\n                \"I lost, but I won at\\n{0}!\",                   // 14\n                \"I would’ve won if this\\nwere {0}...\",          // 15\n                \"My head’s filled with only\\n{0} now!\",         // 16\n                \"The way I lost...\\nIt’s like {0}...\",          // 17\n                \"Isn’t {0}\\n{1}?\",                              // 18\n                \"Aww... That’s really\\n{0}...\"                  // 19\n            },\n            {   // Mood 3: Other\n                \"Hello!\\n{0}!\",                                 //  0\n                \"I love {0}!\",                                  //  1\n                \"I love {0}!\\nI love {1}, too!\",                //  2\n                \"This {0} is\\n{1}, isn’t it?\",                  //  3\n                \"I can do anything for\\n{0}!\",                  //  4\n                \"This {0} is\\n{1}!\",                            //  5\n                \"{0} is the real\\n{1}!\",                        //  6\n                \"It might be {0}...\",                           //  7\n                \"There’s only {0}\\nleft!\",                      //  8\n                \"It’s {0}!\\nIt’s {1}!\",                         //  9\n                \"I prefer {0}\\nafter all!\",                     // 10\n                \"Is {0}\\n{1}?\",                                 // 11\n                \"Do you like {0}?\",                             // 12\n                \"What do you think of\\n{0}?\",                   // 13\n                \"{0} is so\\n{1}!\",                              // 14\n                \"{0} are\\n{1}!\",                                // 15\n                \"{0}, right?\",                                  // 16\n                \"Did you know {0}?\\nIt’s {1}!\",                 // 17\n                \"Excuse me...\\nIt’s {0}!\",                      // 18\n                \"{0}, right?\\n{1}!\"                             // 19\n            },\n            {   // Mood 4: Multiplay\n                \"{0}!\\nHello!\",                                 //  0\n                \"Glad to meet you!\\nI love {0}!\",               //  1\n                \"I’m a {0} Trainer!\\nPlease battle me!\",        //  2\n                \"Please trade!\\nI’m offering {0}!\",             //  3\n                \"Please trade!\\nI want a {0}!\",                 //  4\n                \"I’ve entered the Union Room.\",                 //  5\n                \"Let’s draw! I want to draw\\n{0}!\",             //  6\n                \"I’ve got to go!\\n{0}!\",                        //  7\n                \"Please leave me alone...\",                     //  8\n                \"Anyone want to\\n{0}?\",                         //  9\n                \"Let’s {0}!\",                                   // 10\n                \"Want to {0}?\",                                 // 11\n                \"I want to {0}!\",                               // 12\n                \"OK!\",                                          // 13\n                \"I don’t want to\\n{0}.\",                        // 14\n                \"I’ll go wait at the Colosseum\\nnow.\",          // 15\n                \"Please talk to me!\",                           // 16\n                \"Do you know where I am?\",                      // 17\n                \"I want to trade my {0}.\\nPlease talk to me.\",  // 18\n                \"I want a {0} battle!\\nPlease talk to me!\"      // 19\n            }\n        };\n\n        // 0-495: msg.narc/362 Pokemon\n        // 496-963: msg.narc/589 Attacks\n        // 964-981: msg.narc/565 Types\n        // 982-1105: msg.narc/553 Abilities\n        // 1106-1143: msg.narc/388 \"Trainer\"\n        // 1144-1181: msg.narc/389 \"People\"\n        // 1182-1288: msg.narc/390 \"Greetings\"\n        // 1289-1392: msg.narc/391 \"Lifestyle\"\n        // 1393-1439: msg.narc/392 \"Feelings\"\n        // 1440-1471: msg.narc/393 \"Tough words\"\n        // 1472-1494: msg.narc/394 \"Union\"\n        private static string[] WORDS_POKEMON = new string[]\n        {\n            \"-----\",\"BULBASAUR\",\"IVYSAUR\",\"VENUSAUR\",           // 0\n            \"CHARMANDER\",\"CHARMELEON\",\"CHARIZARD\",\"SQUIRTLE\",\n            \"WARTORTLE\",\"BLASTOISE\",\"CATERPIE\",\"METAPOD\",\n            \"BUTTERFREE\",\"WEEDLE\",\"KAKUNA\",\"BEEDRILL\",\n            \"PIDGEY\",\"PIDGEOTTO\",\"PIDGEOT\",\"RATTATA\",\n            \"RATICATE\",\"SPEAROW\",\"FEAROW\",\"EKANS\",\n            \"ARBOK\",\"PIKACHU\",\"RAICHU\",\"SANDSHREW\",\n            \"SANDSLASH\",\"NIDORAN♀\",\"NIDORINA\",\"NIDOQUEEN\",\n            \"NIDORAN♂\",\"NIDORINO\",\"NIDOKING\",\"CLEFAIRY\",\n            \"CLEFABLE\",\"VULPIX\",\"NINETALES\",\"JIGGLYPUFF\",\n            \"WIGGLYTUFF\",\"ZUBAT\",\"GOLBAT\",\"ODDISH\",\n            \"GLOOM\",\"VILEPLUME\",\"PARAS\",\"PARASECT\",\n            \"VENONAT\",\"VENOMOTH\",\"DIGLETT\",\"DUGTRIO\",\n            \"MEOWTH\",\"PERSIAN\",\"PSYDUCK\",\"GOLDUCK\",\n            \"MANKEY\",\"PRIMEAPE\",\"GROWLITHE\",\"ARCANINE\",\n            \"POLIWAG\",\"POLIWHIRL\",\"POLIWRATH\",\"ABRA\",\n            \"KADABRA\",\"ALAKAZAM\",\"MACHOP\",\"MACHOKE\",\n            \"MACHAMP\",\"BELLSPROUT\",\"WEEPINBELL\",\"VICTREEBEL\",\n            \"TENTACOOL\",\"TENTACRUEL\",\"GEODUDE\",\"GRAVELER\",\n            \"GOLEM\",\"PONYTA\",\"RAPIDASH\",\"SLOWPOKE\",\n            \"SLOWBRO\",\"MAGNEMITE\",\"MAGNETON\",\"FARFETCH’D\",\n            \"DODUO\",\"DODRIO\",\"SEEL\",\"DEWGONG\",\n            \"GRIMER\",\"MUK\",\"SHELLDER\",\"CLOYSTER\",\n            \"GASTLY\",\"HAUNTER\",\"GENGAR\",\"ONIX\",\n            \"DROWZEE\",\"HYPNO\",\"KRABBY\",\"KINGLER\",\n            \"VOLTORB\",\"ELECTRODE\",\"EXEGGCUTE\",\"EXEGGUTOR\",\n            \"CUBONE\",\"MAROWAK\",\"HITMONLEE\",\"HITMONCHAN\",\n            \"LICKITUNG\",\"KOFFING\",\"WEEZING\",\"RHYHORN\",\n            \"RHYDON\",\"CHANSEY\",\"TANGELA\",\"KANGASKHAN\",\n            \"HORSEA\",\"SEADRA\",\"GOLDEEN\",\"SEAKING\",\n            \"STARYU\",\"STARMIE\",\"MR. MIME\",\"SCYTHER\",\n            \"JYNX\",\"ELECTABUZZ\",\"MAGMAR\",\"PINSIR\",\n            \"TAUROS\",\"MAGIKARP\",\"GYARADOS\",\"LAPRAS\",\n            \"DITTO\",\"EEVEE\",\"VAPOREON\",\"JOLTEON\",\n            \"FLAREON\",\"PORYGON\",\"OMANYTE\",\"OMASTAR\",\n            \"KABUTO\",\"KABUTOPS\",\"AERODACTYL\",\"SNORLAX\",\n            \"ARTICUNO\",\"ZAPDOS\",\"MOLTRES\",\"DRATINI\",\n            \"DRAGONAIR\",\"DRAGONITE\",\"MEWTWO\",\"MEW\",\n            \"CHIKORITA\",\"BAYLEEF\",\"MEGANIUM\",\"CYNDAQUIL\",\n            \"QUILAVA\",\"TYPHLOSION\",\"TOTODILE\",\"CROCONAW\",\n            \"FERALIGATR\",\"SENTRET\",\"FURRET\",\"HOOTHOOT\",\n            \"NOCTOWL\",\"LEDYBA\",\"LEDIAN\",\"SPINARAK\",\n            \"ARIADOS\",\"CROBAT\",\"CHINCHOU\",\"LANTURN\",\n            \"PICHU\",\"CLEFFA\",\"IGGLYBUFF\",\"TOGEPI\",\n            \"TOGETIC\",\"NATU\",\"XATU\",\"MAREEP\",\n            \"FLAAFFY\",\"AMPHAROS\",\"BELLOSSOM\",\"MARILL\",\n            \"AZUMARILL\",\"SUDOWOODO\",\"POLITOED\",\"HOPPIP\",\n            \"SKIPLOOM\",\"JUMPLUFF\",\"AIPOM\",\"SUNKERN\",\n            \"SUNFLORA\",\"YANMA\",\"WOOPER\",\"QUAGSIRE\",\n            \"ESPEON\",\"UMBREON\",\"MURKROW\",\"SLOWKING\",\n            \"MISDREAVUS\",\"UNOWN\",\"WOBBUFFET\",\"GIRAFARIG\",\n            \"PINECO\",\"FORRETRESS\",\"DUNSPARCE\",\"GLIGAR\",\n            \"STEELIX\",\"SNUBBULL\",\"GRANBULL\",\"QWILFISH\",\n            \"SCIZOR\",\"SHUCKLE\",\"HERACROSS\",\"SNEASEL\",\n            \"TEDDIURSA\",\"URSARING\",\"SLUGMA\",\"MAGCARGO\",\n            \"SWINUB\",\"PILOSWINE\",\"CORSOLA\",\"REMORAID\",\n            \"OCTILLERY\",\"DELIBIRD\",\"MANTINE\",\"SKARMORY\",\n            \"HOUNDOUR\",\"HOUNDOOM\",\"KINGDRA\",\"PHANPY\",\n            \"DONPHAN\",\"PORYGON2\",\"STANTLER\",\"SMEARGLE\",\n            \"TYROGUE\",\"HITMONTOP\",\"SMOOCHUM\",\"ELEKID\",\n            \"MAGBY\",\"MILTANK\",\"BLISSEY\",\"RAIKOU\",\n            \"ENTEI\",\"SUICUNE\",\"LARVITAR\",\"PUPITAR\",\n            \"TYRANITAR\",\"LUGIA\",\"HO-OH\",\"CELEBI\",\n            \"TREECKO\",\"GROVYLE\",\"SCEPTILE\",\"TORCHIC\",\n            \"COMBUSKEN\",\"BLAZIKEN\",\"MUDKIP\",\"MARSHTOMP\",\n            \"SWAMPERT\",\"POOCHYENA\",\"MIGHTYENA\",\"ZIGZAGOON\",\n            \"LINOONE\",\"WURMPLE\",\"SILCOON\",\"BEAUTIFLY\",\n            \"CASCOON\",\"DUSTOX\",\"LOTAD\",\"LOMBRE\",\n            \"LUDICOLO\",\"SEEDOT\",\"NUZLEAF\",\"SHIFTRY\",\n            \"TAILLOW\",\"SWELLOW\",\"WINGULL\",\"PELIPPER\",\n            \"RALTS\",\"KIRLIA\",\"GARDEVOIR\",\"SURSKIT\",\n            \"MASQUERAIN\",\"SHROOMISH\",\"BRELOOM\",\"SLAKOTH\",\n            \"VIGOROTH\",\"SLAKING\",\"NINCADA\",\"NINJASK\",\n            \"SHEDINJA\",\"WHISMUR\",\"LOUDRED\",\"EXPLOUD\",\n            \"MAKUHITA\",\"HARIYAMA\",\"AZURILL\",\"NOSEPASS\",\n            \"SKITTY\",\"DELCATTY\",\"SABLEYE\",\"MAWILE\",\n            \"ARON\",\"LAIRON\",\"AGGRON\",\"MEDITITE\",\n            \"MEDICHAM\",\"ELECTRIKE\",\"MANECTRIC\",\"PLUSLE\",\n            \"MINUN\",\"VOLBEAT\",\"ILLUMISE\",\"ROSELIA\",\n            \"GULPIN\",\"SWALOT\",\"CARVANHA\",\"SHARPEDO\",\n            \"WAILMER\",\"WAILORD\",\"NUMEL\",\"CAMERUPT\",\n            \"TORKOAL\",\"SPOINK\",\"GRUMPIG\",\"SPINDA\",\n            \"TRAPINCH\",\"VIBRAVA\",\"FLYGON\",\"CACNEA\",\n            \"CACTURNE\",\"SWABLU\",\"ALTARIA\",\"ZANGOOSE\",\n            \"SEVIPER\",\"LUNATONE\",\"SOLROCK\",\"BARBOACH\",\n            \"WHISCASH\",\"CORPHISH\",\"CRAWDAUNT\",\"BALTOY\",\n            \"CLAYDOL\",\"LILEEP\",\"CRADILY\",\"ANORITH\",\n            \"ARMALDO\",\"FEEBAS\",\"MILOTIC\",\"CASTFORM\",\n            \"KECLEON\",\"SHUPPET\",\"BANETTE\",\"DUSKULL\",\n            \"DUSCLOPS\",\"TROPIUS\",\"CHIMECHO\",\"ABSOL\",\n            \"WYNAUT\",\"SNORUNT\",\"GLALIE\",\"SPHEAL\",\n            \"SEALEO\",\"WALREIN\",\"CLAMPERL\",\"HUNTAIL\",\n            \"GOREBYSS\",\"RELICANTH\",\"LUVDISC\",\"BAGON\",\n            \"SHELGON\",\"SALAMENCE\",\"BELDUM\",\"METANG\",\n            \"METAGROSS\",\"REGIROCK\",\"REGICE\",\"REGISTEEL\",\n            \"LATIAS\",\"LATIOS\",\"KYOGRE\",\"GROUDON\",\n            \"RAYQUAZA\",\"JIRACHI\",\"DEOXYS\",\"TURTWIG\",\n            \"GROTLE\",\"TORTERRA\",\"CHIMCHAR\",\"MONFERNO\",\n            \"INFERNAPE\",\"PIPLUP\",\"PRINPLUP\",\"EMPOLEON\",\n            \"STARLY\",\"STARAVIA\",\"STARAPTOR\",\"BIDOOF\",\n            \"BIBAREL\",\"KRICKETOT\",\"KRICKETUNE\",\"SHINX\",\n            \"LUXIO\",\"LUXRAY\",\"BUDEW\",\"ROSERADE\",\n            \"CRANIDOS\",\"RAMPARDOS\",\"SHIELDON\",\"BASTIODON\",\n            \"BURMY\",\"WORMADAM\",\"MOTHIM\",\"COMBEE\",\n            \"VESPIQUEN\",\"PACHIRISU\",\"BUIZEL\",\"FLOATZEL\",\n            \"CHERUBI\",\"CHERRIM\",\"SHELLOS\",\"GASTRODON\",\n            \"AMBIPOM\",\"DRIFLOON\",\"DRIFBLIM\",\"BUNEARY\",\n            \"LOPUNNY\",\"MISMAGIUS\",\"HONCHKROW\",\"GLAMEOW\",\n            \"PURUGLY\",\"CHINGLING\",\"STUNKY\",\"SKUNTANK\",\n            \"BRONZOR\",\"BRONZONG\",\"BONSLY\",\"MIME JR.\",\n            \"HAPPINY\",\"CHATOT\",\"SPIRITOMB\",\"GIBLE\",\n            \"GABITE\",\"GARCHOMP\",\"MUNCHLAX\",\"RIOLU\",\n            \"LUCARIO\",\"HIPPOPOTAS\",\"HIPPOWDON\",\"SKORUPI\",\n            \"DRAPION\",\"CROAGUNK\",\"TOXICROAK\",\"CARNIVINE\",\n            \"FINNEON\",\"LUMINEON\",\"MANTYKE\",\"SNOVER\",\n            \"ABOMASNOW\",\"WEAVILE\",\"MAGNEZONE\",\"LICKILICKY\",\n            \"RHYPERIOR\",\"TANGROWTH\",\"ELECTIVIRE\",\"MAGMORTAR\",\n            \"TOGEKISS\",\"YANMEGA\",\"LEAFEON\",\"GLACEON\",\n            \"GLISCOR\",\"MAMOSWINE\",\"PORYGON-Z\",\"GALLADE\",\n            \"PROBOPASS\",\"DUSKNOIR\",\"FROSLASS\",\"ROTOM\",\n            \"UXIE\",\"MESPRIT\",\"AZELF\",\"DIALGA\",\n            \"PALKIA\",\"HEATRAN\",\"REGIGIGAS\",\"GIRATINA\",\n            \"CRESSELIA\",\"PHIONE\",\"MANAPHY\",\"DARKRAI\",\n            \"SHAYMIN\",\"ARCEUS\",\"Egg\",\"Bad Egg\"\n        };\n\n        private static string[] WORDS_MOVES = new string[]\n        {\n            \"-\",\"POUND\",\"KARATE CHOP\",\"DOUBLESLAP\",             // 496\n            \"COMET PUNCH\",\"MEGA PUNCH\",\"PAY DAY\",\"FIRE PUNCH\",\n            \"ICE PUNCH\",\"THUNDERPUNCH\",\"SCRATCH\",\"VICEGRIP\",\n            \"GUILLOTINE\",\"RAZOR WIND\",\"SWORDS DANCE\",\"CUT\",\n            \"GUST\",\"WING ATTACK\",\"WHIRLWIND\",\"FLY\",\n            \"BIND\",\"SLAM\",\"VINE WHIP\",\"STOMP\",\n            \"DOUBLE KICK\",\"MEGA KICK\",\"JUMP KICK\",\"ROLLING KICK\",\n            \"SAND-ATTACK\",\"HEADBUTT\",\"HORN ATTACK\",\"FURY ATTACK\",\n            \"HORN DRILL\",\"TACKLE\",\"BODY SLAM\",\"WRAP\",\n            \"TAKE DOWN\",\"THRASH\",\"DOUBLE-EDGE\",\"TAIL WHIP\",\n            \"POISON STING\",\"TWINEEDLE\",\"PIN MISSILE\",\"LEER\",\n            \"BITE\",\"GROWL\",\"ROAR\",\"SING\",\n            \"SUPERSONIC\",\"SONICBOOM\",\"DISABLE\",\"ACID\",\n            \"EMBER\",\"FLAMETHROWER\",\"MIST\",\"WATER GUN\",\n            \"HYDRO PUMP\",\"SURF\",\"ICE BEAM\",\"BLIZZARD\",\n            \"PSYBEAM\",\"BUBBLEBEAM\",\"AURORA BEAM\",\"HYPER BEAM\",\n            \"PECK\",\"DRILL PECK\",\"SUBMISSION\",\"LOW KICK\",\n            \"COUNTER\",\"SEISMIC TOSS\",\"STRENGTH\",\"ABSORB\",\n            \"MEGA DRAIN\",\"LEECH SEED\",\"GROWTH\",\"RAZOR LEAF\",\n            \"SOLARBEAM\",\"POISONPOWDER\",\"STUN SPORE\",\"SLEEP POWDER\",\n            \"PETAL DANCE\",\"STRING SHOT\",\"DRAGON RAGE\",\"FIRE SPIN\",\n            \"THUNDERSHOCK\",\"THUNDERBOLT\",\"THUNDER WAVE\",\"THUNDER\",\n            \"ROCK THROW\",\"EARTHQUAKE\",\"FISSURE\",\"DIG\",\n            \"TOXIC\",\"CONFUSION\",\"PSYCHIC\",\"HYPNOSIS\",\n            \"MEDITATE\",\"AGILITY\",\"QUICK ATTACK\",\"RAGE\",\n            \"TELEPORT\",\"NIGHT SHADE\",\"MIMIC\",\"SCREECH\",\n            \"DOUBLE TEAM\",\"RECOVER\",\"HARDEN\",\"MINIMIZE\",\n            \"SMOKESCREEN\",\"CONFUSE RAY\",\"WITHDRAW\",\"DEFENSE CURL\",\n            \"BARRIER\",\"LIGHT SCREEN\",\"HAZE\",\"REFLECT\",\n            \"FOCUS ENERGY\",\"BIDE\",\"METRONOME\",\"MIRROR MOVE\",\n            \"SELFDESTRUCT\",\"EGG BOMB\",\"LICK\",\"SMOG\",\n            \"SLUDGE\",\"BONE CLUB\",\"FIRE BLAST\",\"WATERFALL\",\n            \"CLAMP\",\"SWIFT\",\"SKULL BASH\",\"SPIKE CANNON\",\n            \"CONSTRICT\",\"AMNESIA\",\"KINESIS\",\"SOFTBOILED\",\n            \"HI JUMP KICK\",\"GLARE\",\"DREAM EATER\",\"POISON GAS\",\n            \"BARRAGE\",\"LEECH LIFE\",\"LOVELY KISS\",\"SKY ATTACK\",\n            \"TRANSFORM\",\"BUBBLE\",\"DIZZY PUNCH\",\"SPORE\",\n            \"FLASH\",\"PSYWAVE\",\"SPLASH\",\"ACID ARMOR\",\n            \"CRABHAMMER\",\"EXPLOSION\",\"FURY SWIPES\",\"BONEMERANG\",\n            \"REST\",\"ROCK SLIDE\",\"HYPER FANG\",\"SHARPEN\",\n            \"CONVERSION\",\"TRI ATTACK\",\"SUPER FANG\",\"SLASH\",\n            \"SUBSTITUTE\",\"STRUGGLE\",\"SKETCH\",\"TRIPLE KICK\",\n            \"THIEF\",\"SPIDER WEB\",\"MIND READER\",\"NIGHTMARE\",\n            \"FLAME WHEEL\",\"SNORE\",\"CURSE\",\"FLAIL\",\n            \"CONVERSION 2\",\"AEROBLAST\",\"COTTON SPORE\",\"REVERSAL\",\n            \"SPITE\",\"POWDER SNOW\",\"PROTECT\",\"MACH PUNCH\",\n            \"SCARY FACE\",\"FAINT ATTACK\",\"SWEET KISS\",\"BELLY DRUM\",\n            \"SLUDGE BOMB\",\"MUD-SLAP\",\"OCTAZOOKA\",\"SPIKES\",\n            \"ZAP CANNON\",\"FORESIGHT\",\"DESTINY BOND\",\"PERISH SONG\",\n            \"ICY WIND\",\"DETECT\",\"BONE RUSH\",\"LOCK-ON\",\n            \"OUTRAGE\",\"SANDSTORM\",\"GIGA DRAIN\",\"ENDURE\",\n            \"CHARM\",\"ROLLOUT\",\"FALSE SWIPE\",\"SWAGGER\",\n            \"MILK DRINK\",\"SPARK\",\"FURY CUTTER\",\"STEEL WING\",\n            \"MEAN LOOK\",\"ATTRACT\",\"SLEEP TALK\",\"HEAL BELL\",\n            \"RETURN\",\"PRESENT\",\"FRUSTRATION\",\"SAFEGUARD\",\n            \"PAIN SPLIT\",\"SACRED FIRE\",\"MAGNITUDE\",\"DYNAMICPUNCH\",\n            \"MEGAHORN\",\"DRAGONBREATH\",\"BATON PASS\",\"ENCORE\",\n            \"PURSUIT\",\"RAPID SPIN\",\"SWEET SCENT\",\"IRON TAIL\",\n            \"METAL CLAW\",\"VITAL THROW\",\"MORNING SUN\",\"SYNTHESIS\",\n            \"MOONLIGHT\",\"HIDDEN POWER\",\"CROSS CHOP\",\"TWISTER\",\n            \"RAIN DANCE\",\"SUNNY DAY\",\"CRUNCH\",\"MIRROR COAT\",\n            \"PSYCH UP\",\"EXTREMESPEED\",\"ANCIENTPOWER\",\"SHADOW BALL\",\n            \"FUTURE SIGHT\",\"ROCK SMASH\",\"WHIRLPOOL\",\"BEAT UP\",\n            \"FAKE OUT\",\"UPROAR\",\"STOCKPILE\",\"SPIT UP\",\n            \"SWALLOW\",\"HEAT WAVE\",\"HAIL\",\"TORMENT\",\n            \"FLATTER\",\"WILL-O-WISP\",\"MEMENTO\",\"FACADE\",\n            \"FOCUS PUNCH\",\"SMELLINGSALT\",\"FOLLOW ME\",\"NATURE POWER\",\n            \"CHARGE\",\"TAUNT\",\"HELPING HAND\",\"TRICK\",\n            \"ROLE PLAY\",\"WISH\",\"ASSIST\",\"INGRAIN\",\n            \"SUPERPOWER\",\"MAGIC COAT\",\"RECYCLE\",\"REVENGE\",\n            \"BRICK BREAK\",\"YAWN\",\"KNOCK OFF\",\"ENDEAVOR\",\n            \"ERUPTION\",\"SKILL SWAP\",\"IMPRISON\",\"REFRESH\",\n            \"GRUDGE\",\"SNATCH\",\"SECRET POWER\",\"DIVE\",\n            \"ARM THRUST\",\"CAMOUFLAGE\",\"TAIL GLOW\",\"LUSTER PURGE\",\n            \"MIST BALL\",\"FEATHERDANCE\",\"TEETER DANCE\",\"BLAZE KICK\",\n            \"MUD SPORT\",\"ICE BALL\",\"NEEDLE ARM\",\"SLACK OFF\",\n            \"HYPER VOICE\",\"POISON FANG\",\"CRUSH CLAW\",\"BLAST BURN\",\n            \"HYDRO CANNON\",\"METEOR MASH\",\"ASTONISH\",\"WEATHER BALL\",\n            \"AROMATHERAPY\",\"FAKE TEARS\",\"AIR CUTTER\",\"OVERHEAT\",\n            \"ODOR SLEUTH\",\"ROCK TOMB\",\"SILVER WIND\",\"METAL SOUND\",\n            \"GRASSWHISTLE\",\"TICKLE\",\"COSMIC POWER\",\"WATER SPOUT\",\n            \"SIGNAL BEAM\",\"SHADOW PUNCH\",\"EXTRASENSORY\",\"SKY UPPERCUT\",\n            \"SAND TOMB\",\"SHEER COLD\",\"MUDDY WATER\",\"BULLET SEED\",\n            \"AERIAL ACE\",\"ICICLE SPEAR\",\"IRON DEFENSE\",\"BLOCK\",\n            \"HOWL\",\"DRAGON CLAW\",\"FRENZY PLANT\",\"BULK UP\",\n            \"BOUNCE\",\"MUD SHOT\",\"POISON TAIL\",\"COVET\",\n            \"VOLT TACKLE\",\"MAGICAL LEAF\",\"WATER SPORT\",\"CALM MIND\",\n            \"LEAF BLADE\",\"DRAGON DANCE\",\"ROCK BLAST\",\"SHOCK WAVE\",\n            \"WATER PULSE\",\"DOOM DESIRE\",\"PSYCHO BOOST\",\"ROOST\",\n            \"GRAVITY\",\"MIRACLE EYE\",\"WAKE-UP SLAP\",\"HAMMER ARM\",\n            \"GYRO BALL\",\"HEALING WISH\",\"BRINE\",\"NATURAL GIFT\",\n            \"FEINT\",\"PLUCK\",\"TAILWIND\",\"ACUPRESSURE\",\n            \"METAL BURST\",\"U-TURN\",\"CLOSE COMBAT\",\"PAYBACK\",\n            \"ASSURANCE\",\"EMBARGO\",\"FLING\",\"PSYCHO SHIFT\",\n            \"TRUMP CARD\",\"HEAL BLOCK\",\"WRING OUT\",\"POWER TRICK\",\n            \"GASTRO ACID\",\"LUCKY CHANT\",\"ME FIRST\",\"COPYCAT\",\n            \"POWER SWAP\",\"GUARD SWAP\",\"PUNISHMENT\",\"LAST RESORT\",\n            \"WORRY SEED\",\"SUCKER PUNCH\",\"TOXIC SPIKES\",\"HEART SWAP\",\n            \"AQUA RING\",\"MAGNET RISE\",\"FLARE BLITZ\",\"FORCE PALM\",\n            \"AURA SPHERE\",\"ROCK POLISH\",\"POISON JAB\",\"DARK PULSE\",\n            \"NIGHT SLASH\",\"AQUA TAIL\",\"SEED BOMB\",\"AIR SLASH\",\n            \"X-SCISSOR\",\"BUG BUZZ\",\"DRAGON PULSE\",\"DRAGON RUSH\",\n            \"POWER GEM\",\"DRAIN PUNCH\",\"VACUUM WAVE\",\"FOCUS BLAST\",\n            \"ENERGY BALL\",\"BRAVE BIRD\",\"EARTH POWER\",\"SWITCHEROO\",\n            \"GIGA IMPACT\",\"NASTY PLOT\",\"BULLET PUNCH\",\"AVALANCHE\",\n            \"ICE SHARD\",\"SHADOW CLAW\",\"THUNDER FANG\",\"ICE FANG\",\n            \"FIRE FANG\",\"SHADOW SNEAK\",\"MUD BOMB\",\"PSYCHO CUT\",\n            \"ZEN HEADBUTT\",\"MIRROR SHOT\",\"FLASH CANNON\",\"ROCK CLIMB\",\n            \"DEFOG\",\"TRICK ROOM\",\"DRACO METEOR\",\"DISCHARGE\",\n            \"LAVA PLUME\",\"LEAF STORM\",\"POWER WHIP\",\"ROCK WRECKER\",\n            \"CROSS POISON\",\"GUNK SHOT\",\"IRON HEAD\",\"MAGNET BOMB\",\n            \"STONE EDGE\",\"CAPTIVATE\",\"STEALTH ROCK\",\"GRASS KNOT\",\n            \"CHATTER\",\"JUDGMENT\",\"BUG BITE\",\"CHARGE BEAM\",\n            \"WOOD HAMMER\",\"AQUA JET\",\"ATTACK ORDER\",\"DEFEND ORDER\",\n            \"HEAL ORDER\",\"HEAD SMASH\",\"DOUBLE HIT\",\"ROAR OF TIME\",\n            \"SPACIAL REND\",\"LUNAR DANCE\",\"CRUSH GRIP\",\"MAGMA STORM\",\n            \"DARK VOID\",\"SEED FLARE\",\"OMINOUS WIND\",\"SHADOW FORCE\"\n        };\n\n        private static string[] WORDS_TYPES = new string[]\n        {\n            \"NORMAL\",\"FIGHTING\",\"FLYING\",\"POISON\",              // 964\n            \"GROUND\",\"ROCK\",\"BUG\",\"GHOST\",\n            \"STEEL\",\"???\",\"FIRE\",\"WATER\",\n            \"GRASS\",\"ELECTRIC\",\"PSYCHIC\",\"ICE\",\n            \"DRAGON\",\"DARK\"\n        };\n\n        private static string[] WORDS_ABILITIES = new string[]\n        {\n            \"-\",\"STENCH\",\"DRIZZLE\",\"SPEED BOOST\",               // 982\n            \"BATTLE ARMOR\",\"STURDY\",\"DAMP\",\"LIMBER\",\n            \"SAND VEIL\",\"STATIC\",\"VOLT ABSORB\",\"WATER ABSORB\",\n            \"OBLIVIOUS\",\"CLOUD NINE\",\"COMPOUNDEYES\",\"INSOMNIA\",\n            \"COLOR CHANGE\",\"IMMUNITY\",\"FLASH FIRE\",\"SHIELD DUST\",\n            \"OWN TEMPO\",\"SUCTION CUPS\",\"INTIMIDATE\",\"SHADOW TAG\",\n            \"ROUGH SKIN\",\"WONDER GUARD\",\"LEVITATE\",\"EFFECT SPORE\",\n            \"SYNCHRONIZE\",\"CLEAR BODY\",\"NATURAL CURE\",\"LIGHTNINGROD\",\n            \"SERENE GRACE\",\"SWIFT SWIM\",\"CHLOROPHYLL\",\"ILLUMINATE\",\n            \"TRACE\",\"HUGE POWER\",\"POISON POINT\",\"INNER FOCUS\",\n            \"MAGMA ARMOR\",\"WATER VEIL\",\"MAGNET PULL\",\"SOUNDPROOF\",\n            \"RAIN DISH\",\"SAND STREAM\",\"PRESSURE\",\"THICK FAT\",\n            \"EARLY BIRD\",\"FLAME BODY\",\"RUN AWAY\",\"KEEN EYE\",\n            \"HYPER CUTTER\",\"PICKUP\",\"TRUANT\",\"HUSTLE\",\n            \"CUTE CHARM\",\"PLUS\",\"MINUS\",\"FORECAST\",\n            \"STICKY HOLD\",\"SHED SKIN\",\"GUTS\",\"MARVEL SCALE\",\n            \"LIQUID OOZE\",\"OVERGROW\",\"BLAZE\",\"TORRENT\",\n            \"SWARM\",\"ROCK HEAD\",\"DROUGHT\",\"ARENA TRAP\",\n            \"VITAL SPIRIT\",\"WHITE SMOKE\",\"PURE POWER\",\"SHELL ARMOR\",\n            \"AIR LOCK\",\"TANGLED FEET\",\"MOTOR DRIVE\",\"RIVALRY\",\n            \"STEADFAST\",\"SNOW CLOAK\",\"GLUTTONY\",\"ANGER POINT\",\n            \"UNBURDEN\",\"HEATPROOF\",\"SIMPLE\",\"DRY SKIN\",\n            \"DOWNLOAD\",\"IRON FIST\",\"POISON HEAL\",\"ADAPTABILITY\",\n            \"SKILL LINK\",\"HYDRATION\",\"SOLAR POWER\",\"QUICK FEET\",\n            \"NORMALIZE\",\"SNIPER\",\"MAGIC GUARD\",\"NO GUARD\",\n            \"STALL\",\"TECHNICIAN\",\"LEAF GUARD\",\"KLUTZ\",\n            \"MOLD BREAKER\",\"SUPER LUCK\",\"AFTERMATH\",\"ANTICIPATION\",\n            \"FOREWARN\",\"UNAWARE\",\"TINTED LENS\",\"FILTER\",\n            \"SLOW START\",\"SCRAPPY\",\"STORM DRAIN\",\"ICE BODY\",\n            \"SOLID ROCK\",\"SNOW WARNING\",\"HONEY GATHER\",\"FRISK\",\n            \"RECKLESS\",\"MULTITYPE\",\"FLOWER GIFT\",\"BAD DREAMS\"\n        };\n\n        private static string[] WORDS_TRAINER = new string[]\n        {\n            \"MATCH UP\",\"NO. 1\",\"PREPARATION\",\"WINS\",            // 1106\n            \"NO MATCH\",\"SPIRIT\",\"ACE CARD\",\"COME ON\",\n            \"ATTACK\",\"SURRENDER\",\"COURAGE\",\"TALENT\",\n            \"STRATEGY\",\"MATCH\",\"VICTORY\",\"SENSE\",\n            \"VERSUS\",\"FIGHTS\",\"POWER\",\"CHALLENGE\",\n            \"STRONG\",\"TAKE IT EASY\",\"FOE\",\"GENIUS\",\n            \"LEGEND\",\"BATTLE\",\"FIGHT\",\"REVIVE\",\n            \"POINTS\",\"SERIOUS\",\"LOSS\",\"PARTNER\",\n            \"INVINCIBLE\",\"EASY\",\"WEAK\",\"EASY WIN\",\n            \"MOVE\",\"TRAINER\"\n        };\n\n        private static string[] WORDS_PEOPLE = new string[]\n        {\n            \"OPPONENT\",\"I\",\"YOU\",\"MOTHER\",                      // 1144\n            \"GRANDFATHER\",\"UNCLE\",\"FATHER\",\"BOY\",\n            \"ADULT\",\"BROTHER\",\"SISTER\",\"GRANDMOTHER\",\n            \"AUNT\",\"PARENT\",\"OLD MAN\",\"ME\",\n            \"GIRL\",\"GAL\",\"FAMILY\",\"HER\",\n            \"HIM\",\"YOU\",\"SIBLINGS\",\"KIDS\",\n            \"MR.\",\"MS.\",\"MYSELF\",\"WHO\",\n            \"FRIEND\",\"ALLY\",\"PERSON\",\"KIDS\",\n            \"I\",\"EVERYONE\",\"RIVAL\",\"I\",\n            \"I\",\"BABY\"\n        };\n\n        private static string[] WORDS_GREETINGS = new string[]\n        {\n            \"KONNICHIWA\",\"HELLO\",\"BONJOUR\",\"CIAO\",              // 1182\n            \"HALLO\",\"HOLA\",\"OH WELL\",\"AAH\",\n            \"AHAHA\",\"HUH\",\"THANKS\",\"NO PROBLEM\",\n            \"NOPE\",\"YES\",\"HERE GOES\",\"LET’S GO\",\n            \"HERE I COME\",\"YEAH\",\"WELCOME\",\"URGH\",\n            \"LET ME THINK\",\"HMM\",\"WHOA\",\"WROOOAAR!\",\n            \"WOW\",\"SNICKER\",\"CUTE LAUGH\",\"UNBELIEVABLE\",\n            \"CRIES\",\"OK\",\"AGREE\",\"EH?\",\n            \"BOO-HOO\",\"HEHEHE\",\"HEY\",\"OH, YEAH\",\n            \"OH WOW!\",\"HEEEY\",\"GREETINGS\",\"OOPS\",\n            \"WELL DONE\",\"OH MY\",\"EEK\",\"YAAAH\",\n            \"GIGGLE\",\"GIVE ME\",\"GWAHAHAHA\",\"UGH\",\n            \"SORRY\",\"FORGIVE ME\",\"I’M SORRY\",\"HEY!\",\n            \"GOOD-BYE\",\"THANK YOU\",\"I’VE ARRIVED\",\"WEEP\",\n            \"PARDON ME\",\"SO SORRY\",\"SEE YA\",\"EXCUSE ME\",\n            \"OKAY THEN\",\"TUT\",\"BLUSH\",\"GO AHEAD\",\n            \"CHEERS\",\"HEY?\",\"WHAT’S UP?\",\"HUH?\",\n            \"NO\",\"SIGH\",\"HI\",\"YEP\",\n            \"YEAH, YEAH\",\"BYE-BYE\",\"MEET YOU\",\"HAHAHA\",\n            \"AIYEEH\",\"HIYAH\",\"MUHAHAHA\",\"LOL\",\n            \"SNORT\",\"HUMPH\",\"HEY\",\"HE-HE-HE\",\n            \"HEH\",\"HOHOHO\",\"THERE YOU GO\",\"OH, DEAR\",\n            \"BYE FOR NOW\",\"ANGRY\",\"MUFUFU\",\"MMM\",\n            \"HELLO?\",\"HI THERE\",\"NO WAY\",\"YAHOO\",\n            \"YO\",\"WELCOME\",\"OK\",\"REGARDS\",\n            \"LALALA\",\"YAY\",\"WAIL\",\"WOW\",\n            \"BOO!\",\"WAHAHA\",\"...\"\n        };\n\n        private static string[] WORDS_LIFESTYLE = new string[]\n        {\n            \"IDOL\",\"TOMORROW\",\"PLAYING\",\"ANIME\",                // 1289\n            \"JOB\",\"SONG\",\"HOME\",\"MOVIE\",\n            \"SWEETS\",\"MONEY\",\"POCKET MONEY\",\"CHIT-CHAT\",\n            \"TALK\",\"BATH\",\"PLAY HOUSE\",\"TOYS\",\n            \"MUSIC\",\"CARDS\",\"SHOPPING\",\"CONVERSATION\",\n            \"SCHOOL\",\"CAMERA\",\"VIEWING\",\"SPECTATE\",\n            \"ANNIVERSARY\",\"YESTERDAY\",\"TODAY\",\"HABIT\",\n            \"GROUP\",\"GOURMET\",\"GAME\",\"WORD\",\n            \"COLLECTION\",\"STORE\",\"COMPLETE\",\"SERVICE\",\n            \"MAGAZINE\",\"WALK\",\"WORK\",\"SYSTEM\",\n            \"BICYCLE\",\"TRAINING\",\"CLASS\",\"LESSONS\",\n            \"HOBBY\",\"INFORMATION\",\"SPORTS\",\"DAILY LIFE\",\n            \"TEACHER\",\"SOFTWARE\",\"SONGS\",\"DIET\",\n            \"TOURNAMENT\",\"TREASURE\",\"TRAVEL\",\"BIRTHDAY\",\n            \"DANCE\",\"CHANNEL\",\"FISHING\",\"DATE\",\n            \"LETTER\",\"EVENT\",\"DESIGN\",\"DIGITAL\",\n            \"TEST\",\"DEPT. STORE\",\"TELEVISION\",\"TRAIN\",\n            \"PHONE\",\"ITEM\",\"NAME\",\"NEWS\",\n            \"POPULARITY\",\"STUFFED TOY\",\"PARTY\",\"COMPUTER\",\n            \"FLOWERS\",\"HERO\",\"NAP\",\"HEROINE\",\n            \"FASHION\",\"STUDY\",\"ADVENTURE\",\"BOARD\",\n            \"BALL\",\"BOOK\",\"MACHINE\",\"FESTIVAL\",\n            \"COMICS\",\"MAIL\",\"MESSAGE\",\"STORY\",\n            \"PROMISE\",\"HOLIDAY\",\"DREAM\",\"KINDERGARTEN\",\n            \"PLANS\",\"LIFE\",\"RADIO\",\"CRAZE\",\n            \"VACATION\",\"LOOKS\",\"RENTAL\",\"WORLD\"\n        };\n\n        private static string[] WORDS_FEELINGS = new string[]\n        {\n            \"BEAUTY\",\"DELIGHT\",\"STRANGENESS\",\"CLEVERNESS\",      // 1393\n            \"DISAPPOINTED\",\"COOLNESS\",\"SADNESS\",\"CUTENESS\",\n            \"ANGER\",\"HEALTHY\",\"REGRET\",\"HAPPINESS\",\n            \"DEPRESSED\",\"INCREDIBLE\",\"LIKES\",\"DISLIKE\",\n            \"BORED\",\"IMPORTANT\",\"ALL RIGHT\",\"ADORE\",\n            \"TOUGHNESS\",\"ENJOYMENT\",\"USELESS\",\"DROOLING\",\n            \"EXCITED\",\"SKILLFUL\",\"TEARS\",\"HATE\",\n            \"ROFL\",\"HAPPY\",\"ENERGETIC\",\"SURPRISE\",\n            \"NERVOUS\",\"WANT\",\"SATISFIED\",\"RARE\",\n            \"MESSED UP\",\"NO WAY\",\"DANGER\",\"LOVEY-DOVEY\",\n            \"ANTICIPATION\",\"SMILE\",\"SUBTLE\",\"RECOMMEND\",\n            \"SIMPLE\",\"NICE\",\"DIFFICULT\"\n        };\n\n        private static string[] WORDS_TOUGH = new string[]\n        {\n            \"EARTH TONES\",\"IMPLANT\",\"GOLDEN RATIO\",\"OMNIBUS\",   // 1440\n            \"STARBOARD\",\"MONEY RATE\",\"RESOLUTION\",\"CADENZA\",\n            \"EDUCATION\",\"CUBISM\",\"CROSS-STITCH\",\"ARTERY\",\n            \"BONE DENSITY\",\"GOMMAGE\",\"STREAMING\",\"CONDUCTIVITY\",\n            \"COPYRIGHT\",\"TWO-STEP\",\"CONTOUR\",\"NEUTRINO\",\n            \"HOWLING\",\"SPREADSHEET\",\"GMT\",\"IRRITABILITY\",\n            \"FRACTALS\",\"FLAMBE\",\"STOCK PRICES\",\"PH BALANCE\",\n            \"VECTOR\",\"POLYPHENOL\",\"UBIQUITOUS\",\"REM SLEEP\"\n        };\n\n        private static string[] WORDS_UNION = new string[]\n        {\n            \"SINGLE\",\"DOUBLE\",\"MIX BATTLE\",\"MULTI BATTLE\",      // 1472\n            \"LEVEL 50\",\"LEVEL 100\",\"COLOSSEUM\",\"POKéMON\",\n            \"DRAWING\",\"RECORD\",\"GOTCHA\",\"CHAT\",\n            \"FRIEND CODE\",\"CONNECTION\",\"VOICE CHAT\",\"WI-FI\",\n            \"UNDERGROUND\",\"UNION\",\"POFFIN\",\"CONTEST\",\n            \"BATTLE TOWER\",\"GTS\",\"SECRET BASE\"\n        };\n        #endregion\n    }\n}\n"
  },
  {
    "path": "library/Support/TrendyPhrase5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public class TrendyPhrase5 : TrendyPhraseBase\n    {\n        public TrendyPhrase5(byte[] data)\n            : base(data)\n        {\n        }\n\n        public TrendyPhrase5(ushort mood, ushort index, ushort word1, ushort word2)\n            : base(Pack(mood, index, word1, word2))\n        {\n        }\n\n        public override string Render(string wordFormat)\n        {\n            return RenderPhrase(Data, wordFormat);\n        }\n\n        public static string RenderPhrase(byte[] data, string wordFormat)\n        {\n            // todo: move me to TrendyPhraseBase, make RenderWord virtual\n            if (data == null) throw new ArgumentNullException();\n            if (data.Length != 8) throw new ArgumentException();\n\n            ushort mood = BitConverter.ToUInt16(data, 0);\n            ushort index = BitConverter.ToUInt16(data, 2);\n            ushort word1 = BitConverter.ToUInt16(data, 4);\n            ushort word2 = BitConverter.ToUInt16(data, 6);\n\n            // moods higher than 6 seem to say \"no answer\" but indexes higher than 20 are blank. \n            if (mood >= 7) return \"\";\n            if (index >= 21) return \"\";\n            return string.Format(PHRASES[mood, index],\n                string.Format(wordFormat, RenderWord(word1)),\n                string.Format(wordFormat, RenderWord(word2))\n                );\n        }\n\n        public static string RenderWord(ushort word)\n        {\n            // todo: There's a certain list of banned spoiler words like\n            // attacks from BW2 which should be turned into POKÉMON.\n            if (word < 652) return WORDS_POKEMON[word];\n            if (word < 1212) return WORDS_MOVES[word - 652];\n            if (word < 1229) return WORDS_TYPES[word - 1212];\n            if (word < 1394) return WORDS_ABILITIES[word - 1229];\n            if (word < 1438) return WORDS_TRAINER[word - 1394];\n            if (word < 1476) return WORDS_PEOPLE[word - 1438];\n            if (word < 1524) return WORDS_GREETINGS[word - 1476];\n            if (word < 1627) return WORDS_LIFESTYLE[word - 1524];\n            if (word < 1674) return WORDS_FEELINGS[word - 1627];\n            if (word < 1706) return WORDS_TERM[word - 1674];\n            if (word < 1732) return WORDS_CONNECTION[word - 1706];\n            if (word < 1742) return WORDS_ANIMATED[word - 1732];\n            if (word < 1803) return WORDS_VOICE[word - 1742];\n            if (word == 65535) return \"\"; // special case for unfilled in word = blank\n            return \"POKÉMON\";\n        }\n\n        public TrendyPhrase5 Clone()\n        {\n            return new TrendyPhrase5(Data);\n        }\n\n        #region String tables\n        // todo: i18n\n        // Special thanks to http://projectpokemon.org/rawdb/black2/msg.php\n        // for their string table dumps.\n\n        // a/0/0/2/170 through /176\n        private static string[,] PHRASES = new string[,]\n        {\n            {   // Mood 0: Other /171                \n                \"Hello!\\n{0}!\",                                         //  0\n                \"I am {0}!\\nI'm pleased to meet you.\",                  //  1\n                \"I love {0}!\\nI love {1}, too!\",                        //  2\n                \"My favorite {0} is\\n{1}!\",                             //  3\n                \"What's your favorite\\n{0}?\",                           //  4\n                \"I can do anything for\\n{0}!\",                          //  5\n                \"Is {0}\\n{1}?\",                                         //  6\n                \"What do you think of\\n{0}?\",                           //  7\n                \"Do you think {0}\\ncan {1}?\",                           //  8\n                \"{0} is so\\n{1}!\",                                      //  9\n                \"{0} bothers me.\",                                      // 10\n                \"After all, it's {0},\\nisn't it?\",                      // 11\n                \"{0} is the real\\n{1}!\",                                // 12\n                \"Did you know that {0}\\nis {1}?\",                       // 13\n                \"{0} is the reason\\nfor {1}.\",                          // 14\n                \"Have you heard of\\n{0}?\",                              // 15\n                \"{0} is actually\\n{1}.\",                                // 16\n                \"Recently, {0}\\nseems {1}.\",                            // 17\n                \"I wonder if\\n{0} is yummy...\",                         // 18\n                \"I never miss {0}.\\nIt's part of what I do every day.\", // 19\n                \"\",\n            },\n            {   // Mood 1: Start of battle /173          \n                \"Please!\\n{0}\",                                         //  0\n                \"Go! {0}!\",                                             //  1\n                \"I'll battle with\\n{0}!\",                               //  2\n                \"{0} is\\n{1}, right?\",                                  //  3\n                \"{0}, I'm going\\nwith {1}!\",                            //  4\n                \"In comes {0}.\",                                        //  5\n                \"Watch my {0} power\\ntake care of {1}!\",                //  6\n                \"Now {0}\\nbegins!\",                                     //  7\n                \"I'll show you my\\n{0} strategy!\",                      //  8\n                \"I'll shock you with\\n{0}!\",                            //  9\n                \"{0}, I see...\\nGo, {1}!\",                              // 10\n                \"Ta-da!\\nHere comes {0}!\",                              // 11\n                \"I don't think I'll\\never lose to {0}!\",                // 12\n                \"{0}!\\n{1} is here!\",                                   // 13\n                \"Good luck,\\n{0}!\",                                     // 14\n                \"Behold my {0}\\n{1}!\",                                  // 15\n                \"The power of {0}!\\nLet me show you!\",                  // 16\n                \"You'll choose {0}\\nif I choose {1}, right?\",           // 17\n                \"I beg you, {0}.\\nPlease go with {1}!\",                 // 18\n                \"May {0} safely\\nland on {0}!\",                         // 19\n                \"\",\n            },\n            {   // Mood 2: Victory /176\n                \"I win!\\n{0}!\",                                         //  0\n                \"I owe my victory\\nto {0}!\",                            //  1\n                \"{0} is strong,\\nisn't it?\",                            //  2\n                \"It's {0}\\n{1} after all!\",                             //  3\n                \"When it comes to {0},\\nmy choice is always {1}!\",      //  4\n                \"Victory in a\\n{0} battle!\",                            //  5\n                \"Yay, {0}!\\n{1}!\",                                      //  6\n                \"Sorry, it's {0}\\n{1}.\",                                //  7\n                \"{0}!\\nThank you!\",                                     //  8\n                \"The way I feel now is\\n{0}!\",                          //  9\n                \"{0} sure is\\n{1}!\",                                    // 10\n                \"It's all thanks to\\n{0}.\",                             // 11\n                \"{0} is the toughest!\",                                 // 12\n                \"{0}?\\nWow, I'm so glad!\",                              // 13\n                \"{0}?\\nThat sounds good!\",                              // 14\n                \"I have no trouble\\ndealing with {0}.\",                 // 15\n                \"{0} is so much fun.\",                                  // 16\n                \"Huh?\\n{0}?!\",                                          // 17\n                \"The power of {0}\\nis awesome!\",                        // 18\n                \"Everyone!\\n{0}!\",                                      // 19\n                \"\",\n            },\n            {   // Mood 3: Defeat /170\n                \"You win...\\n{0}!\",                                     //  0\n                \"{0} is\\nreally impressive.\",                           //  1\n                \"Waaah! {0}!\",                                          //  2\n                \"I want to go home with\\n{0}...\",                       //  3\n                \"{0}!\\n{1}!\",                                           //  4\n                \"I see {0}\\nright in front of me!\",                     //  5\n                \"{0}?\\nI didn't see that coming!\",                      //  6\n                \"I was confident about\\n{0}, too.\",                     //  7\n                \"You're {0},\\naren't you?\",                             //  8\n                \"{0}!\\nCan't be anything else but.\",                    //  9\n                \"I want to be like {0}!\",                               // 10\n                \"It might be\\n{0} already...\",                          // 11\n                \"I think {0}\\nshould do.\",                              // 12\n                \"The way I feel now is\\n{0}...\",                        // 13\n                \"{0} won't work!\",                                      // 14\n                \"Nothing beats {0}!\",                                   // 15\n                \"My head's filled with only\\n{0} now!\",                 // 16\n                \"Is it because {0}\\nwas lacking?\",                      // 17\n                \"Isn't {0}\\n{1}?\",                                      // 18\n                \"Aww... That's really\\n{0}...\",                         // 19\n                \"\",\n            },\n            {   // Mood 4: Other /175\n                \"Yo!\\nI'm {1}.\",                                        //  0\n                \"Glad to meet you!\\nI love {0}!\",                       //  1\n                \"Do you like {0}?\",                                     //  2\n                \"Let's draw! I want to draw\\n{0}!\",                     //  3\n                \"Let's battle!\\nI say {0}!\",                            //  4\n                \"I'm a {0} Trainer!\\nPlease battle me!\",                //  5\n                \"Let's have a chat!\\nHow about {0}?\",                   //  6\n                \"Please trade!\\nI want a {0}!\",                         //  7\n                \"Please trade!\\nI'm offering {0}!\",                     //  8\n                \"Want to trade {0}?\\nHere's a hint: {1}!\",              //  9\n                \"Will you join me\\nfor {0}?\",                           // 10\n                \"Anyone want to\\n{0}?\",                                 // 11\n                \"I want to {0}\\nwith {1}!\",                             // 12\n                \"Let's go to {0}\\nby {1}!\",                             // 13\n                \"OK!\",                                                  // 14\n                \"{0}?\\nI got it!\",                                      // 15\n                \"{0}?\\nHold on!\",                                       // 16\n                \"I don't want to\\n{0}...\",                              // 17\n                \"That was fun! I hope we can\\n{0} again sometime.\",     // 18\n                \"See ya!\\n{0}!\",                                        // 19\n                \"\",\n            },\n            {   // Mood 5: Greetings /172 New to GenV. Seems to be locked by default?\n                \"Glad to meet you!\\nI am {0}!\",                         //  0\n                \"I'm a {0}-loving\\n{1} Trainer.\",                       //  1\n                \"Let's {0} sometime.\\nKeep in touch!\",                  //  2\n                \"{0} is the best!\\nI love it!\",                         //  3\n                \"It's great because it's\\n{0}. Don't you agree?\",       //  4\n                \"Tell me your favorite\\n{0}.\",                          //  5\n                \"Hi!\\nDo you know {0}?\",                                //  6\n                \"It's very {0}\\nand {1}!\",                              //  7\n                \"Let's {0} soon!\",                                      //  8\n                \"Thank you for taking your time\\nwith {0}.\",            //  9\n                \"It was so {0}.\\nI was moved!\",                         // 10\n                \"What do you think of\\n{0}?\",                           // 11\n                \"It's {0},\\nif you ask me.\",                            // 12\n                \"It bothers us, doesn't it?\\nI'm talking about {0}.\",   // 13\n                \"Do you know what\\nthey call {0}?\",                     // 14\n                \"This {0} is\\nsurprisingly {1}!\",                       // 15\n                \"{0} sure is something.\\nYou should try it!\",           // 16\n                \"Thank you for taking your time\\nwith {0}.\",            // 17\n                \"{0} is\\n{1}, don't you think?\",                        // 18\n                \"That means {0}.\\nThanks!\",                             // 19\n                \"We should {0} together\\nagain. {1}!\",                  // 20\n            },\n            { // Mood 6: Placeholder to hold a single trendy word\n                \"{0}\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n                \"\",\n            },\n        };\n\n        private static string[] WORDS_POKEMON = new string[]\n        {\n            \"POKÉMON\",\"BULBASAUR\",\"IVYSAUR\",\"VENUSAUR\",           // 0\n            \"CHARMANDER\",\"CHARMELEON\",\"CHARIZARD\",\"SQUIRTLE\",\n            \"WARTORTLE\",\"BLASTOISE\",\"CATERPIE\",\"METAPOD\",\n            \"BUTTERFREE\",\"WEEDLE\",\"KAKUNA\",\"BEEDRILL\",\n            \"PIDGEY\",\"PIDGEOTTO\",\"PIDGEOT\",\"RATTATA\",\n            \"RATICATE\",\"SPEAROW\",\"FEAROW\",\"EKANS\",\n            \"ARBOK\",\"PIKACHU\",\"RAICHU\",\"SANDSHREW\",\n            \"SANDSLASH\",\"NIDORAN♀\",\"NIDORINA\",\"NIDOQUEEN\",\n            \"NIDORAN♂\",\"NIDORINO\",\"NIDOKING\",\"CLEFAIRY\",\n            \"CLEFABLE\",\"VULPIX\",\"NINETALES\",\"JIGGLYPUFF\",\n            \"WIGGLYTUFF\",\"ZUBAT\",\"GOLBAT\",\"ODDISH\",\n            \"GLOOM\",\"VILEPLUME\",\"PARAS\",\"PARASECT\",\n            \"VENONAT\",\"VENOMOTH\",\"DIGLETT\",\"DUGTRIO\",\n            \"MEOWTH\",\"PERSIAN\",\"PSYDUCK\",\"GOLDUCK\",\n            \"MANKEY\",\"PRIMEAPE\",\"GROWLITHE\",\"ARCANINE\",\n            \"POLIWAG\",\"POLIWHIRL\",\"POLIWRATH\",\"ABRA\",\n            \"KADABRA\",\"ALAKAZAM\",\"MACHOP\",\"MACHOKE\",\n            \"MACHAMP\",\"BELLSPROUT\",\"WEEPINBELL\",\"VICTREEBEL\",\n            \"TENTACOOL\",\"TENTACRUEL\",\"GEODUDE\",\"GRAVELER\",\n            \"GOLEM\",\"PONYTA\",\"RAPIDASH\",\"SLOWPOKE\",\n            \"SLOWBRO\",\"MAGNEMITE\",\"MAGNETON\",\"FARFETCH'D\",\n            \"DODUO\",\"DODRIO\",\"SEEL\",\"DEWGONG\",\n            \"GRIMER\",\"MUK\",\"SHELLDER\",\"CLOYSTER\",\n            \"GASTLY\",\"HAUNTER\",\"GENGAR\",\"ONIX\",\n            \"DROWZEE\",\"HYPNO\",\"KRABBY\",\"KINGLER\",\n            \"VOLTORB\",\"ELECTRODE\",\"EXEGGCUTE\",\"EXEGGUTOR\",\n            \"CUBONE\",\"MAROWAK\",\"HITMONLEE\",\"HITMONCHAN\",\n            \"LICKITUNG\",\"KOFFING\",\"WEEZING\",\"RHYHORN\",\n            \"RHYDON\",\"CHANSEY\",\"TANGELA\",\"KANGASKHAN\",\n            \"HORSEA\",\"SEADRA\",\"GOLDEEN\",\"SEAKING\",\n            \"STARYU\",\"STARMIE\",\"MR. MIME\",\"SCYTHER\",\n            \"JYNX\",\"ELECTABUZZ\",\"MAGMAR\",\"PINSIR\",\n            \"TAUROS\",\"MAGIKARP\",\"GYARADOS\",\"LAPRAS\",\n            \"DITTO\",\"EEVEE\",\"VAPOREON\",\"JOLTEON\",\n            \"FLAREON\",\"PORYGON\",\"OMANYTE\",\"OMASTAR\",\n            \"KABUTO\",\"KABUTOPS\",\"AERODACTYL\",\"SNORLAX\",\n            \"ARTICUNO\",\"ZAPDOS\",\"MOLTRES\",\"DRATINI\",\n            \"DRAGONAIR\",\"DRAGONITE\",\"MEWTWO\",\"MEW\",\n            \"CHIKORITA\",\"BAYLEEF\",\"MEGANIUM\",\"CYNDAQUIL\",\n            \"QUILAVA\",\"TYPHLOSION\",\"TOTODILE\",\"CROCONAW\",\n            \"FERALIGATR\",\"SENTRET\",\"FURRET\",\"HOOTHOOT\",\n            \"NOCTOWL\",\"LEDYBA\",\"LEDIAN\",\"SPINARAK\",\n            \"ARIADOS\",\"CROBAT\",\"CHINCHOU\",\"LANTURN\",\n            \"PICHU\",\"CLEFFA\",\"IGGLYBUFF\",\"TOGEPI\",\n            \"TOGETIC\",\"NATU\",\"XATU\",\"MAREEP\",\n            \"FLAAFFY\",\"AMPHAROS\",\"BELLOSSOM\",\"MARILL\",\n            \"AZUMARILL\",\"SUDOWOODO\",\"POLITOED\",\"HOPPIP\",\n            \"SKIPLOOM\",\"JUMPLUFF\",\"AIPOM\",\"SUNKERN\",\n            \"SUNFLORA\",\"YANMA\",\"WOOPER\",\"QUAGSIRE\",\n            \"ESPEON\",\"UMBREON\",\"MURKROW\",\"SLOWKING\",\n            \"MISDREAVUS\",\"UNOWN\",\"WOBBUFFET\",\"GIRAFARIG\",\n            \"PINECO\",\"FORRETRESS\",\"DUNSPARCE\",\"GLIGAR\",\n            \"STEELIX\",\"SNUBBULL\",\"GRANBULL\",\"QWILFISH\",\n            \"SCIZOR\",\"SHUCKLE\",\"HERACROSS\",\"SNEASEL\",\n            \"TEDDIURSA\",\"URSARING\",\"SLUGMA\",\"MAGCARGO\",\n            \"SWINUB\",\"PILOSWINE\",\"CORSOLA\",\"REMORAID\",\n            \"OCTILLERY\",\"DELIBIRD\",\"MANTINE\",\"SKARMORY\",\n            \"HOUNDOUR\",\"HOUNDOOM\",\"KINGDRA\",\"PHANPY\",\n            \"DONPHAN\",\"PORYGON2\",\"STANTLER\",\"SMEARGLE\",\n            \"TYROGUE\",\"HITMONTOP\",\"SMOOCHUM\",\"ELEKID\",\n            \"MAGBY\",\"MILTANK\",\"BLISSEY\",\"RAIKOU\",\n            \"ENTEI\",\"SUICUNE\",\"LARVITAR\",\"PUPITAR\",\n            \"TYRANITAR\",\"LUGIA\",\"HO-OH\",\"CELEBI\",\n            \"TREECKO\",\"GROVYLE\",\"SCEPTILE\",\"TORCHIC\",\n            \"COMBUSKEN\",\"BLAZIKEN\",\"MUDKIP\",\"MARSHTOMP\",\n            \"SWAMPERT\",\"POOCHYENA\",\"MIGHTYENA\",\"ZIGZAGOON\",\n            \"LINOONE\",\"WURMPLE\",\"SILCOON\",\"BEAUTIFLY\",\n            \"CASCOON\",\"DUSTOX\",\"LOTAD\",\"LOMBRE\",\n            \"LUDICOLO\",\"SEEDOT\",\"NUZLEAF\",\"SHIFTRY\",\n            \"TAILLOW\",\"SWELLOW\",\"WINGULL\",\"PELIPPER\",\n            \"RALTS\",\"KIRLIA\",\"GARDEVOIR\",\"SURSKIT\",\n            \"MASQUERAIN\",\"SHROOMISH\",\"BRELOOM\",\"SLAKOTH\",\n            \"VIGOROTH\",\"SLAKING\",\"NINCADA\",\"NINJASK\",\n            \"SHEDINJA\",\"WHISMUR\",\"LOUDRED\",\"EXPLOUD\",\n            \"MAKUHITA\",\"HARIYAMA\",\"AZURILL\",\"NOSEPASS\",\n            \"SKITTY\",\"DELCATTY\",\"SABLEYE\",\"MAWILE\",\n            \"ARON\",\"LAIRON\",\"AGGRON\",\"MEDITITE\",\n            \"MEDICHAM\",\"ELECTRIKE\",\"MANECTRIC\",\"PLUSLE\",\n            \"MINUN\",\"VOLBEAT\",\"ILLUMISE\",\"ROSELIA\",\n            \"GULPIN\",\"SWALOT\",\"CARVANHA\",\"SHARPEDO\",\n            \"WAILMER\",\"WAILORD\",\"NUMEL\",\"CAMERUPT\",\n            \"TORKOAL\",\"SPOINK\",\"GRUMPIG\",\"SPINDA\",\n            \"TRAPINCH\",\"VIBRAVA\",\"FLYGON\",\"CACNEA\",\n            \"CACTURNE\",\"SWABLU\",\"ALTARIA\",\"ZANGOOSE\",\n            \"SEVIPER\",\"LUNATONE\",\"SOLROCK\",\"BARBOACH\",\n            \"WHISCASH\",\"CORPHISH\",\"CRAWDAUNT\",\"BALTOY\",\n            \"CLAYDOL\",\"LILEEP\",\"CRADILY\",\"ANORITH\",\n            \"ARMALDO\",\"FEEBAS\",\"MILOTIC\",\"CASTFORM\",\n            \"KECLEON\",\"SHUPPET\",\"BANETTE\",\"DUSKULL\",\n            \"DUSCLOPS\",\"TROPIUS\",\"CHIMECHO\",\"ABSOL\",\n            \"WYNAUT\",\"SNORUNT\",\"GLALIE\",\"SPHEAL\",\n            \"SEALEO\",\"WALREIN\",\"CLAMPERL\",\"HUNTAIL\",\n            \"GOREBYSS\",\"RELICANTH\",\"LUVDISC\",\"BAGON\",\n            \"SHELGON\",\"SALAMENCE\",\"BELDUM\",\"METANG\",\n            \"METAGROSS\",\"REGIROCK\",\"REGICE\",\"REGISTEEL\",\n            \"LATIAS\",\"LATIOS\",\"KYOGRE\",\"GROUDON\",\n            \"RAYQUAZA\",\"JIRACHI\",\"DEOXYS\",\"TURTWIG\",\n            \"GROTLE\",\"TORTERRA\",\"CHIMCHAR\",\"MONFERNO\",\n            \"INFERNAPE\",\"PIPLUP\",\"PRINPLUP\",\"EMPOLEON\",\n            \"STARLY\",\"STARAVIA\",\"STARAPTOR\",\"BIDOOF\",\n            \"BIBAREL\",\"KRICKETOT\",\"KRICKETUNE\",\"SHINX\",\n            \"LUXIO\",\"LUXRAY\",\"BUDEW\",\"ROSERADE\",\n            \"CRANIDOS\",\"RAMPARDOS\",\"SHIELDON\",\"BASTIODON\",\n            \"BURMY\",\"WORMADAM\",\"MOTHIM\",\"COMBEE\",\n            \"VESPIQUEN\",\"PACHIRISU\",\"BUIZEL\",\"FLOATZEL\",\n            \"CHERUBI\",\"CHERRIM\",\"SHELLOS\",\"GASTRODON\",\n            \"AMBIPOM\",\"DRIFLOON\",\"DRIFBLIM\",\"BUNEARY\",\n            \"LOPUNNY\",\"MISMAGIUS\",\"HONCHKROW\",\"GLAMEOW\",\n            \"PURUGLY\",\"CHINGLING\",\"STUNKY\",\"SKUNTANK\",\n            \"BRONZOR\",\"BRONZONG\",\"BONSLY\",\"MIME JR.\",\n            \"HAPPINY\",\"CHATOT\",\"SPIRITOMB\",\"GIBLE\",\n            \"GABITE\",\"GARCHOMP\",\"MUNCHLAX\",\"RIOLU\",\n            \"LUCARIO\",\"HIPPOPOTAS\",\"HIPPOWDON\",\"SKORUPI\",\n            \"DRAPION\",\"CROAGUNK\",\"TOXICROAK\",\"CARNIVINE\",\n            \"FINNEON\",\"LUMINEON\",\"MANTYKE\",\"SNOVER\",\n            \"ABOMASNOW\",\"WEAVILE\",\"MAGNEZONE\",\"LICKILICKY\",\n            \"RHYPERIOR\",\"TANGROWTH\",\"ELECTIVIRE\",\"MAGMORTAR\",\n            \"TOGEKISS\",\"YANMEGA\",\"LEAFEON\",\"GLACEON\",\n            \"GLISCOR\",\"MAMOSWINE\",\"PORYGON-Z\",\"GALLADE\",\n            \"PROBOPASS\",\"DUSKNOIR\",\"FROSLASS\",\"ROTOM\",\n            \"UXIE\",\"MESPRIT\",\"AZELF\",\"DIALGA\",\n            \"PALKIA\",\"HEATRAN\",\"REGIGIGAS\",\"GIRATINA\",\n            \"CRESSELIA\",\"PHIONE\",\"MANAPHY\",\"DARKRAI\",\n            \"SHAYMIN\",\"ARCEUS\",\"VICTINI\",\"SNIVY\",\n            \"SERVINE\",\"SERPERIOR\",\"TEPIG\",\"PIGNITE\",\n            \"EMBOAR\",\"OSHAWOTT\",\"DEWOTT\",\"SAMUROTT\",\n            \"PATRAT\",\"WATCHOG\",\"LILLIPUP\",\"HERDIER\",\n            \"STOUTLAND\",\"PURRLOIN\",\"LIEPARD\",\"PANSAGE\",\n            \"SIMISAGE\",\"PANSEAR\",\"SIMISEAR\",\"PANPOUR\",\n            \"SIMIPOUR\",\"MUNNA\",\"MUSHARNA\",\"PIDOVE\",\n            \"TRANQUILL\",\"UNFEZANT\",\"BLITZLE\",\"ZEBSTRIKA\",\n            \"ROGGENROLA\",\"BOLDORE\",\"GIGALITH\",\"WOOBAT\",\n            \"SWOOBAT\",\"DRILBUR\",\"EXCADRILL\",\"AUDINO\",\n            \"TIMBURR\",\"GURDURR\",\"CONKELDURR\",\"TYMPOLE\",\n            \"PALPITOAD\",\"SEISMITOAD\",\"THROH\",\"SAWK\",\n            \"SEWADDLE\",\"SWADLOON\",\"LEAVANNY\",\"VENIPEDE\",\n            \"WHIRLIPEDE\",\"SCOLIPEDE\",\"COTTONEE\",\"WHIMSICOTT\",\n            \"PETILIL\",\"LILLIGANT\",\"BASCULIN\",\"SANDILE\",\n            \"KROKOROK\",\"KROOKODILE\",\"DARUMAKA\",\"DARMANITAN\",\n            \"MARACTUS\",\"DWEBBLE\",\"CRUSTLE\",\"SCRAGGY\",\n            \"SCRAFTY\",\"SIGILYPH\",\"YAMASK\",\"COFAGRIGUS\",\n            \"TIRTOUGA\",\"CARRACOSTA\",\"ARCHEN\",\"ARCHEOPS\",\n            \"TRUBBISH\",\"GARBODOR\",\"ZORUA\",\"ZOROARK\",\n            \"MINCCINO\",\"CINCCINO\",\"GOTHITA\",\"GOTHORITA\",\n            \"GOTHITELLE\",\"SOLOSIS\",\"DUOSION\",\"REUNICLUS\",\n            \"DUCKLETT\",\"SWANNA\",\"VANILLITE\",\"VANILLISH\",\n            \"VANILLUXE\",\"DEERLING\",\"SAWSBUCK\",\"EMOLGA\",\n            \"KARRABLAST\",\"ESCAVALIER\",\"FOONGUS\",\"AMOONGUSS\",\n            \"FRILLISH\",\"JELLICENT\",\"ALOMOMOLA\",\"JOLTIK\",\n            \"GALVANTULA\",\"FERROSEED\",\"FERROTHORN\",\"KLINK\",\n            \"KLANG\",\"KLINKLANG\",\"TYNAMO\",\"EELEKTRIK\",\n            \"EELEKTROSS\",\"ELGYEM\",\"BEHEEYEM\",\"LITWICK\",\n            \"LAMPENT\",\"CHANDELURE\",\"AXEW\",\"FRAXURE\",\n            \"HAXORUS\",\"CUBCHOO\",\"BEARTIC\",\"CRYOGONAL\",\n            \"SHELMET\",\"ACCELGOR\",\"STUNFISK\",\"MIENFOO\",\n            \"MIENSHAO\",\"DRUDDIGON\",\"GOLETT\",\"GOLURK\",\n            \"PAWNIARD\",\"BISHARP\",\"BOUFFALANT\",\"RUFFLET\",\n            \"BRAVIARY\",\"VULLABY\",\"MANDIBUZZ\",\"HEATMOR\",\n            \"DURANT\",\"DEINO\",\"ZWEILOUS\",\"HYDREIGON\",\n            \"LARVESTA\",\"VOLCARONA\",\"COBALION\",\"TERRAKION\",\n            \"VIRIZION\",\"TORNADUS\",\"THUNDURUS\",\"RESHIRAM\",\n            \"ZEKROM\",\"LANDORUS\",\"KYUREM\",\"KELDEO\",\n            \"MELOETTA\",\"GENESECT\",\"EGG\",\"BAD EGG\"\n        };\n\n        private static string[] WORDS_MOVES = new[]\n        {\n            \"-----\",\"POUND\",\"KARATE CHOP\",\"DOUBLESLAP\",         // 652\n            \"COMET PUNCH\",\"MEGA PUNCH\",\"PAY DAY\",\"FIRE PUNCH\",\n            \"ICE PUNCH\",\"THUNDERPUNCH\",\"SCRATCH\",\"VICEGRIP\",\n            \"GUILLOTINE\",\"RAZOR WIND\",\"SWORDS DANCE\",\"CUT\",\n            \"GUST\",\"WING ATTACK\",\"WHIRLWIND\",\"FLY\",\n            \"BIND\",\"SLAM\",\"VINE WHIP\",\"STOMP\",\n            \"DOUBLE KICK\",\"MEGA KICK\",\"JUMP KICK\",\"ROLLING KICK\",\n            \"SAND-ATTACK\",\"HEADBUTT\",\"HORN ATTACK\",\"FURY ATTACK\",\n            \"HORN DRILL\",\"TACKLE\",\"BODY SLAM\",\"WRAP\",\n            \"TAKE DOWN\",\"THRASH\",\"DOUBLE-EDGE\",\"TAIL WHIP\",\n            \"POISON STING\",\"TWINEEDLE\",\"PIN MISSILE\",\"LEER\",\n            \"BITE\",\"GROWL\",\"ROAR\",\"SING\",\n            \"SUPERSONIC\",\"SONICBOOM\",\"DISABLE\",\"ACID\",\n            \"EMBER\",\"FLAMETHROWER\",\"MIST\",\"WATER GUN\",\n            \"HYDRO PUMP\",\"SURF\",\"ICE BEAM\",\"BLIZZARD\",\n            \"PSYBEAM\",\"BUBBLEBEAM\",\"AURORA BEAM\",\"HYPER BEAM\",\n            \"PECK\",\"DRILL PECK\",\"SUBMISSION\",\"LOW KICK\",\n            \"COUNTER\",\"SEISMIC TOSS\",\"STRENGTH\",\"ABSORB\",\n            \"MEGA DRAIN\",\"LEECH SEED\",\"GROWTH\",\"RAZOR LEAF\",\n            \"SOLARBEAM\",\"POISONPOWDER\",\"STUN SPORE\",\"SLEEP POWDER\",\n            \"PETAL DANCE\",\"STRING SHOT\",\"DRAGON RAGE\",\"FIRE SPIN\",\n            \"THUNDERSHOCK\",\"THUNDERBOLT\",\"THUNDER WAVE\",\"THUNDER\",\n            \"ROCK THROW\",\"EARTHQUAKE\",\"FISSURE\",\"DIG\",\n            \"TOXIC\",\"CONFUSION\",\"PSYCHIC\",\"HYPNOSIS\",\n            \"MEDITATE\",\"AGILITY\",\"QUICK ATTACK\",\"RAGE\",\n            \"TELEPORT\",\"NIGHT SHADE\",\"MIMIC\",\"SCREECH\",\n            \"DOUBLE TEAM\",\"RECOVER\",\"HARDEN\",\"MINIMIZE\",\n            \"SMOKESCREEN\",\"CONFUSE RAY\",\"WITHDRAW\",\"DEFENSE CURL\",\n            \"BARRIER\",\"LIGHT SCREEN\",\"HAZE\",\"REFLECT\",\n            \"FOCUS ENERGY\",\"BIDE\",\"METRONOME\",\"MIRROR MOVE\",\n            \"SELFDESTRUCT\",\"EGG BOMB\",\"LICK\",\"SMOG\",\n            \"SLUDGE\",\"BONE CLUB\",\"FIRE BLAST\",\"WATERFALL\",\n            \"CLAMP\",\"SWIFT\",\"SKULL BASH\",\"SPIKE CANNON\",\n            \"CONSTRICT\",\"AMNESIA\",\"KINESIS\",\"SOFTBOILED\",\n            \"HI JUMP KICK\",\"GLARE\",\"DREAM EATER\",\"POISON GAS\",\n            \"BARRAGE\",\"LEECH LIFE\",\"LOVELY KISS\",\"SKY ATTACK\",\n            \"TRANSFORM\",\"BUBBLE\",\"DIZZY PUNCH\",\"SPORE\",\n            \"FLASH\",\"PSYWAVE\",\"SPLASH\",\"ACID ARMOR\",\n            \"CRABHAMMER\",\"EXPLOSION\",\"FURY SWIPES\",\"BONEMERANG\",\n            \"REST\",\"ROCK SLIDE\",\"HYPER FANG\",\"SHARPEN\",\n            \"CONVERSION\",\"TRI ATTACK\",\"SUPER FANG\",\"SLASH\",\n            \"SUBSTITUTE\",\"STRUGGLE\",\"SKETCH\",\"TRIPLE KICK\",\n            \"THIEF\",\"SPIDER WEB\",\"MIND READER\",\"NIGHTMARE\",\n            \"FLAME WHEEL\",\"SNORE\",\"CURSE\",\"FLAIL\",\n            \"CONVERSION 2\",\"AEROBLAST\",\"COTTON SPORE\",\"REVERSAL\",\n            \"SPITE\",\"POWDER SNOW\",\"PROTECT\",\"MACH PUNCH\",\n            \"SCARY FACE\",\"FAINT ATTACK\",\"SWEET KISS\",\"BELLY DRUM\",\n            \"SLUDGE BOMB\",\"MUD-SLAP\",\"OCTAZOOKA\",\"SPIKES\",\n            \"ZAP CANNON\",\"FORESIGHT\",\"DESTINY BOND\",\"PERISH SONG\",\n            \"ICY WIND\",\"DETECT\",\"BONE RUSH\",\"LOCK-ON\",\n            \"OUTRAGE\",\"SANDSTORM\",\"GIGA DRAIN\",\"ENDURE\",\n            \"CHARM\",\"ROLLOUT\",\"FALSE SWIPE\",\"SWAGGER\",\n            \"MILK DRINK\",\"SPARK\",\"FURY CUTTER\",\"STEEL WING\",\n            \"MEAN LOOK\",\"ATTRACT\",\"SLEEP TALK\",\"HEAL BELL\",\n            \"RETURN\",\"PRESENT\",\"FRUSTRATION\",\"SAFEGUARD\",\n            \"PAIN SPLIT\",\"SACRED FIRE\",\"MAGNITUDE\",\"DYNAMICPUNCH\",\n            \"MEGAHORN\",\"DRAGONBREATH\",\"BATON PASS\",\"ENCORE\",\n            \"PURSUIT\",\"RAPID SPIN\",\"SWEET SCENT\",\"IRON TAIL\",\n            \"METAL CLAW\",\"VITAL THROW\",\"MORNING SUN\",\"SYNTHESIS\",\n            \"MOONLIGHT\",\"HIDDEN POWER\",\"CROSS CHOP\",\"TWISTER\",\n            \"RAIN DANCE\",\"SUNNY DAY\",\"CRUNCH\",\"MIRROR COAT\",\n            \"PSYCH UP\",\"EXTREMESPEED\",\"ANCIENTPOWER\",\"SHADOW BALL\",\n            \"FUTURE SIGHT\",\"ROCK SMASH\",\"WHIRLPOOL\",\"BEAT UP\",\n            \"FAKE OUT\",\"UPROAR\",\"STOCKPILE\",\"SPIT UP\",\n            \"SWALLOW\",\"HEAT WAVE\",\"HAIL\",\"TORMENT\",\n            \"FLATTER\",\"WILL-O-WISP\",\"MEMENTO\",\"FACADE\",\n            \"FOCUS PUNCH\",\"SMELLINGSALT\",\"FOLLOW ME\",\"NATURE POWER\",\n            \"CHARGE\",\"TAUNT\",\"HELPING HAND\",\"TRICK\",\n            \"ROLE PLAY\",\"WISH\",\"ASSIST\",\"INGRAIN\",\n            \"SUPERPOWER\",\"MAGIC COAT\",\"RECYCLE\",\"REVENGE\",\n            \"BRICK BREAK\",\"YAWN\",\"KNOCK OFF\",\"ENDEAVOR\",\n            \"ERUPTION\",\"SKILL SWAP\",\"IMPRISON\",\"REFRESH\",\n            \"GRUDGE\",\"SNATCH\",\"SECRET POWER\",\"DIVE\",\n            \"ARM THRUST\",\"CAMOUFLAGE\",\"TAIL GLOW\",\"LUSTER PURGE\",\n            \"MIST BALL\",\"FEATHERDANCE\",\"TEETER DANCE\",\"BLAZE KICK\",\n            \"MUD SPORT\",\"ICE BALL\",\"NEEDLE ARM\",\"SLACK OFF\",\n            \"HYPER VOICE\",\"POISON FANG\",\"CRUSH CLAW\",\"BLAST BURN\",\n            \"HYDRO CANNON\",\"METEOR MASH\",\"ASTONISH\",\"WEATHER BALL\",\n            \"AROMATHERAPY\",\"FAKE TEARS\",\"AIR CUTTER\",\"OVERHEAT\",\n            \"ODOR SLEUTH\",\"ROCK TOMB\",\"SILVER WIND\",\"METAL SOUND\",\n            \"GRASSWHISTLE\",\"TICKLE\",\"COSMIC POWER\",\"WATER SPOUT\",\n            \"SIGNAL BEAM\",\"SHADOW PUNCH\",\"EXTRASENSORY\",\"SKY UPPERCUT\",\n            \"SAND TOMB\",\"SHEER COLD\",\"MUDDY WATER\",\"BULLET SEED\",\n            \"AERIAL ACE\",\"ICICLE SPEAR\",\"IRON DEFENSE\",\"BLOCK\",\n            \"HOWL\",\"DRAGON CLAW\",\"FRENZY PLANT\",\"BULK UP\",\n            \"BOUNCE\",\"MUD SHOT\",\"POISON TAIL\",\"COVET\",\n            \"VOLT TACKLE\",\"MAGICAL LEAF\",\"WATER SPORT\",\"CALM MIND\",\n            \"LEAF BLADE\",\"DRAGON DANCE\",\"ROCK BLAST\",\"SHOCK WAVE\",\n            \"WATER PULSE\",\"DOOM DESIRE\",\"PSYCHO BOOST\",\"ROOST\",\n            \"GRAVITY\",\"MIRACLE EYE\",\"WAKE-UP SLAP\",\"HAMMER ARM\",\n            \"GYRO BALL\",\"HEALING WISH\",\"BRINE\",\"NATURAL GIFT\",\n            \"FEINT\",\"PLUCK\",\"TAILWIND\",\"ACUPRESSURE\",\n            \"METAL BURST\",\"U-TURN\",\"CLOSE COMBAT\",\"PAYBACK\",\n            \"ASSURANCE\",\"EMBARGO\",\"FLING\",\"PSYCHO SHIFT\",\n            \"TRUMP CARD\",\"HEAL BLOCK\",\"WRING OUT\",\"POWER TRICK\",\n            \"GASTRO ACID\",\"LUCKY CHANT\",\"ME FIRST\",\"COPYCAT\",\n            \"POWER SWAP\",\"GUARD SWAP\",\"PUNISHMENT\",\"LAST RESORT\",\n            \"WORRY SEED\",\"SUCKER PUNCH\",\"TOXIC SPIKES\",\"HEART SWAP\",\n            \"AQUA RING\",\"MAGNET RISE\",\"FLARE BLITZ\",\"FORCE PALM\",\n            \"AURA SPHERE\",\"ROCK POLISH\",\"POISON JAB\",\"DARK PULSE\",\n            \"NIGHT SLASH\",\"AQUA TAIL\",\"SEED BOMB\",\"AIR SLASH\",\n            \"X-SCISSOR\",\"BUG BUZZ\",\"DRAGON PULSE\",\"DRAGON RUSH\",\n            \"POWER GEM\",\"DRAIN PUNCH\",\"VACUUM WAVE\",\"FOCUS BLAST\",\n            \"ENERGY BALL\",\"BRAVE BIRD\",\"EARTH POWER\",\"SWITCHEROO\",\n            \"GIGA IMPACT\",\"NASTY PLOT\",\"BULLET PUNCH\",\"AVALANCHE\",\n            \"ICE SHARD\",\"SHADOW CLAW\",\"THUNDER FANG\",\"ICE FANG\",\n            \"FIRE FANG\",\"SHADOW SNEAK\",\"MUD BOMB\",\"PSYCHO CUT\",\n            \"ZEN HEADBUTT\",\"MIRROR SHOT\",\"FLASH CANNON\",\"ROCK CLIMB\",\n            \"DEFOG\",\"TRICK ROOM\",\"DRACO METEOR\",\"DISCHARGE\",\n            \"LAVA PLUME\",\"LEAF STORM\",\"POWER WHIP\",\"ROCK WRECKER\",\n            \"CROSS POISON\",\"GUNK SHOT\",\"IRON HEAD\",\"MAGNET BOMB\",\n            \"STONE EDGE\",\"CAPTIVATE\",\"STEALTH ROCK\",\"GRASS KNOT\",\n            \"CHATTER\",\"JUDGMENT\",\"BUG BITE\",\"CHARGE BEAM\",\n            \"WOOD HAMMER\",\"AQUA JET\",\"ATTACK ORDER\",\"DEFEND ORDER\",\n            \"HEAL ORDER\",\"HEAD SMASH\",\"DOUBLE HIT\",\"ROAR OF TIME\",\n            \"SPACIAL REND\",\"LUNAR DANCE\",\"CRUSH GRIP\",\"MAGMA STORM\",\n            \"DARK VOID\",\"SEED FLARE\",\"OMINOUS WIND\",\"SHADOW FORCE\",\n            \"HONE CLAWS\",\"WIDE GUARD\",\"GUARD SPLIT\",\"POWER SPLIT\",\n            \"WONDER ROOM\",\"PSYSHOCK\",\"VENOSHOCK\",\"AUTOTOMIZE\",\n            \"RAGE POWDER\",\"TELEKINESIS\",\"MAGIC ROOM\",\"SMACK DOWN\",\n            \"STORM THROW\",\"FLAME BURST\",\"SLUDGE WAVE\",\"QUIVER DANCE\",\n            \"HEAVY SLAM\",\"SYNCHRONOISE\",\"ELECTRO BALL\",\"SOAK\",\n            \"FLAME CHARGE\",\"COIL\",\"LOW SWEEP\",\"ACID SPRAY\",\n            \"FOUL PLAY\",\"SIMPLE BEAM\",\"ENTRAINMENT\",\"AFTER YOU\",\n            \"ROUND\",\"ECHOED VOICE\",\"CHIP AWAY\",\"CLEAR SMOG\",\n            \"STORED POWER\",\"QUICK GUARD\",\"ALLY SWITCH\",\"SCALD\",\n            \"SHELL SMASH\",\"HEAL PULSE\",\"HEX\",\"SKY DROP\",\n            \"SHIFT GEAR\",\"CIRCLE THROW\",\"INCINERATE\",\"QUASH\",\n            \"ACROBATICS\",\"REFLECT TYPE\",\"RETALIATE\",\"FINAL GAMBIT\",\n            \"BESTOW\",\"INFERNO\",\"WATER PLEDGE\",\"FIRE PLEDGE\",\n            \"GRASS PLEDGE\",\"VOLT SWITCH\",\"STRUGGLE BUG\",\"BULLDOZE\",\n            \"FROST BREATH\",\"DRAGON TAIL\",\"WORK UP\",\"ELECTROWEB\",\n            \"WILD CHARGE\",\"DRILL RUN\",\"DUAL CHOP\",\"HEART STAMP\",\n            \"HORN LEECH\",\"SACRED SWORD\",\"RAZOR SHELL\",\"HEAT CRASH\",\n            \"LEAF TORNADO\",\"STEAMROLLER\",\"COTTON GUARD\",\"NIGHT DAZE\",\n            \"PSYSTRIKE\",\"TAIL SLAP\",\"HURRICANE\",\"HEAD CHARGE\",\n            \"GEAR GRIND\",\"SEARING SHOT\",\"TECHNO BLAST\",\"RELIC SONG\",\n            \"SECRET SWORD\",\"GLACIATE\",\"BOLT STRIKE\",\"BLUE FLARE\",\n            \"FIERY DANCE\",\"FREEZE SHOCK\",\"ICE BURN\",\"SNARL\",\n            \"ICICLE CRASH\",\"V-CREATE\",\"FUSION FLARE\",\"FUSION BOLT\"\n        };\n\n        private static string[] WORDS_TYPES = new string[]\n        {\n            \"NORMAL\",\"FIGHTING\",\"FLYING\",\"POISON\",              // 1212\n            \"GROUND\",\"ROCK\",\"BUG\",\"GHOST\",\n            \"STEEL\",\"FIRE\",\"WATER\",\"GRASS\",\n            \"ELECTRIC\",\"PSYCHIC\",\"ICE\",\"DRAGON\",\n            \"DARK\"\n        };\n\n        private static string[] WORDS_ABILITIES = new string[]\n        {\n            \"-\",\"STENCH\",\"DRIZZLE\",\"SPEED BOOST\",               // 1229\n            \"BATTLE ARMOR\",\"STURDY\",\"DAMP\",\"LIMBER\",\n            \"SAND VEIL\",\"STATIC\",\"VOLT ABSORB\",\"WATER ABSORB\",\n            \"OBLIVIOUS\",\"CLOUD NINE\",\"COMPOUNDEYES\",\"INSOMNIA\",\n            \"COLOR CHANGE\",\"IMMUNITY\",\"FLASH FIRE\",\"SHIELD DUST\",\n            \"OWN TEMPO\",\"SUCTION CUPS\",\"INTIMIDATE\",\"SHADOW TAG\",\n            \"ROUGH SKIN\",\"WONDER GUARD\",\"LEVITATE\",\"EFFECT SPORE\",\n            \"SYNCHRONIZE\",\"CLEAR BODY\",\"NATURAL CURE\",\"LIGHTNINGROD\",\n            \"SERENE GRACE\",\"SWIFT SWIM\",\"CHLOROPHYLL\",\"ILLUMINATE\",\n            \"TRACE\",\"HUGE POWER\",\"POISON POINT\",\"INNER FOCUS\",\n            \"MAGMA ARMOR\",\"WATER VEIL\",\"MAGNET PULL\",\"SOUNDPROOF\",\n            \"RAIN DISH\",\"SAND STREAM\",\"PRESSURE\",\"THICK FAT\",\n            \"EARLY BIRD\",\"FLAME BODY\",\"RUN AWAY\",\"KEEN EYE\",\n            \"HYPER CUTTER\",\"PICKUP\",\"TRUANT\",\"HUSTLE\",\n            \"CUTE CHARM\",\"PLUS\",\"MINUS\",\"FORECAST\",\n            \"STICKY HOLD\",\"SHED SKIN\",\"GUTS\",\"MARVEL SCALE\",\n            \"LIQUID OOZE\",\"OVERGROW\",\"BLAZE\",\"TORRENT\",\n            \"SWARM\",\"ROCK HEAD\",\"DROUGHT\",\"ARENA TRAP\",\n            \"VITAL SPIRIT\",\"WHITE SMOKE\",\"PURE POWER\",\"SHELL ARMOR\",\n            \"AIR LOCK\",\"TANGLED FEET\",\"MOTOR DRIVE\",\"RIVALRY\",\n            \"STEADFAST\",\"SNOW CLOAK\",\"GLUTTONY\",\"ANGER POINT\",\n            \"UNBURDEN\",\"HEATPROOF\",\"SIMPLE\",\"DRY SKIN\",\n            \"DOWNLOAD\",\"IRON FIST\",\"POISON HEAL\",\"ADAPTABILITY\",\n            \"SKILL LINK\",\"HYDRATION\",\"SOLAR POWER\",\"QUICK FEET\",\n            \"NORMALIZE\",\"SNIPER\",\"MAGIC GUARD\",\"NO GUARD\",\n            \"STALL\",\"TECHNICIAN\",\"LEAF GUARD\",\"KLUTZ\",\n            \"MOLD BREAKER\",\"SUPER LUCK\",\"AFTERMATH\",\"ANTICIPATION\",\n            \"FOREWARN\",\"UNAWARE\",\"TINTED LENS\",\"FILTER\",\n            \"SLOW START\",\"SCRAPPY\",\"STORM DRAIN\",\"ICE BODY\",\n            \"SOLID ROCK\",\"SNOW WARNING\",\"HONEY GATHER\",\"FRISK\",\n            \"RECKLESS\",\"MULTITYPE\",\"FLOWER GIFT\",\"BAD DREAMS\",\n            \"PICKPOCKET\",\"SHEER FORCE\",\"CONTRARY\",\"UNNERVE\",\n            \"DEFIANT\",\"DEFEATIST\",\"CURSED BODY\",\"HEALER\",\n            \"FRIEND GUARD\",\"WEAK ARMOR\",\"HEAVY METAL\",\"LIGHT METAL\",\n            \"MULTISCALE\",\"TOXIC BOOST\",\"FLARE BOOST\",\"HARVEST\",\n            \"TELEPATHY\",\"MOODY\",\"OVERCOAT\",\"POISON TOUCH\",\n            \"REGENERATOR\",\"BIG PECKS\",\"SAND RUSH\",\"WONDER SKIN\",\n            \"ANALYTIC\",\"ILLUSION\",\"IMPOSTER\",\"INFILTRATOR\",\n            \"MUMMY\",\"MOXIE\",\"JUSTIFIED\",\"RATTLED\",\n            \"MAGIC BOUNCE\",\"SAP SIPPER\",\"PRANKSTER\",\"SAND FORCE\",\n            \"IRON BARBS\",\"ZEN MODE\",\"VICTORY STAR\",\"TURBOBLAZE\",\n            \"TERAVOLT\"\n        };\n\n        private static string[] WORDS_TRAINER = new string[]\n        {\n            \"MATCH UP\",\"NO. 1\",\"BAD MATCHUP\",\"PREPARATION\",     // 1394\n            \"WINS\",\"NO MATCH\",\"SPIRIT\",\"CRITICAL HIT\",\n            \"ACE CARD\",\"COME ON\",\"NO EFFECT\",\"ATTACK\",\n            \"SURRENDER\",\"COURAGE\",\"TALENT\",\"STRATEGY\",\n            \"MATCH\",\"VICTORY\",\"SENSE\",\"VERSUS\",\n            \"FIGHTS\",\"POWER\",\"CHALLENGE\",\"CHAMPION\",\n            \"STRONG\",\"TAKE IT EASY\",\"FOE\",\"GENIUS\",\n            \"LEGEND\",\"TRAINER\",\"GOOD MATCHUP\",\"BATTLE\",\n            \"EMERGENCY\",\"FIGHT\",\"REVIVE\",\"POINTS\",\n            \"SERIOUS\",\"LOSS\",\"PARTNER\",\"INVINCIBLE\",\n            \"EASY\",\"WEAK\",\"EASY WIN\",\"MOVE\"\n        };\n\n        private static string[] WORDS_PEOPLE = new string[]\n        {\n            \"OPPONENT\",\"I\",\"YOU\",\"MOTHER\",                      // 1438\n            \"GRANDFATHER\",\"UNCLE\",\"FATHER\",\"BOY\",\n            \"ADULT\",\"BROTHER\",\"SISTER\",\"GRANDMOTHER\",\n            \"AUNT\",\"PARENT\",\"OLD MAN\",\"ME\",\n            \"GIRL\",\"GAL\",\"FAMILY\",\"HER\",\n            \"HIM\",\"YOU\",\"SIBLINGS\",\"KIDS\",\n            \"MR.\",\"MS.\",\"MYSELF\",\"WHO\",\n            \"FRIEND\",\"ALLY\",\"PERSON\",\"BABY\",\n            \"KIDS\",\"I\",\"EVERYONE\",\"RIVAL\",\n            \"I\",\"I\"\n        };\n\n        private static string[] WORDS_GREETINGS = new string[]\n        {\n            \"こんにちは\",\"HELLO\",\"BONJOUR\",\"CIAO\",               // 1476\n            \"HALLO\",\"HOLA\",\"안녕하세요\",\"HELLO\",\n            \"...\",\"THANKS\",\"NO PROBLEM\",\"NOPE\",\n            \"YES\",\"HERE GOES\",\"LET'S GO\",\"HERE I COME\",\n            \"WELCOME\",\"GREETINGS\",\"WELL DONE\",\"GIVE ME\",\n            \"SORRY\",\"FORGIVE ME\",\"I'M SORRY\",\"GOOD-BYE\",\n            \"THANK YOU\",\"I'VE ARRIVED\",\"PARDON ME\",\"SO SORRY\",\n            \"SEE YA\",\"EXCUSE ME\",\"OK THEN\",\"GO AHEAD\",\n            \"CHEERS\",\"WHAT'S UP?\",\"NO\",\"HI\",\n            \"YEP\",\"YEAH, YEAH\",\"BYE-BYE\",\"MEET YOU\",\n            \"BYE FOR NOW\",\"HELLO?\",\"HI THERE\",\"NO WAY\",\n            \"YAHOO\",\"YO\",\"WELCOME\",\"REGARDS\"\n        };\n\n        private static string[] WORDS_LIFESTYLE = new string[]\n        {\n            \"IDOL\",\"AUTUMN\",\"TOMORROW\",\"PLAYING\",               // 1524\n            \"ANIME\",\"JOB\",\"SONG\",\"HOME\",\n            \"MOVIE\",\"SWEETS\",\"MONEY\",\"POCKET MONEY\",\n            \"CHIT-CHAT\",\"TALK\",\"BATH\",\"PLAY HOUSE\",\n            \"TOYS\",\"MUSIC\",\"CARDS\",\"SHOPPING\",\n            \"CONVERSATION\",\"SCIENCE\",\"SCHOOL\",\"CAMERA\",\n            \"VIEWING\",\"SPECTATE\",\"ANNIVERSARY\",\"YESTERDAY\",\n            \"TODAY\",\"HABIT\",\"GOURMET\",\"GAME\",\n            \"WORD\",\"STORE\",\"SERVICE\",\"MAGAZINE\",\n            \"WALK\",\"WORK\",\"BICYCLE\",\"GYM\",\n            \"TRAINING\",\"CLASS\",\"LESSONS\",\"HOBBY\",\n            \"INFORMATION\",\"SHOP\",\"SPORTS\",\"DAILY LIFE\",\n            \"TEACHER\",\"SOFTWARE\",\"SONGS\",\"DIET\",\n            \"TOURNAMENT\",\"TREASURE\",\"TRAVEL\",\"BIRTHDAY\",\n            \"DANCE\",\"CHANNEL\",\"FISHING\",\"DATE\",\n            \"LETTER\",\"EVENT\",\"TEST\",\"DEPT. STORE\",\n            \"TELEVISION\",\"TRAIN\",\"PHONE\",\"ITEM\",\n            \"SUMMER\",\"NAME\",\"NEWS\",\"POPULARITY\",\n            \"STUFFED TOY\",\"PARTY\",\"COMPUTER\",\"FLOWERS\",\n            \"SPRING\",\"HERO\",\"NAP\",\"HEROINE\",\n            \"FASHION\",\"WINTER\",\"STUDY\",\"ADVENTURE\",\n            \"BOARD\",\"BALL\",\"BOOK\",\"MACHINE\",\n            \"FESTIVAL\",\"COMICS\",\"STORY\",\"PROMISE\",\n            \"HOLIDAY\",\"FAIRGROUND\",\"DREAM\",\"KINDERGARTEN\",\n            \"PLANS\",\"LIFE\",\"RADIO\",\"CRAZE\",\n            \"VACATION\",\"LOOKS\",\"WORLD\"\n        };\n\n        private static string[] WORDS_FEELINGS = new string[]\n        {\n            \"BEAUTY\",\"DELIGHT\",\"STRANGENESS\",\"RECOMMEND\",       // 1627\n            \"CLEVERNESS\",\"DISAPPOINTED\",\"COOLNESS\",\"SADNESS\",\n            \"CUTENESS\",\"SIMPLE\",\"ANGER\",\"HEALTHY\",\n            \"REGRET\",\"HAPPINESS\",\"DEPRESSED\",\"INCREDIBLE\",\n            \"LIKES\",\"DISLIKE\",\"BORED\",\"IMPORTANT\",\n            \"ALL RIGHT\",\"ADORE\",\"TOUGHNESS\",\"ENJOYMENT\",\n            \"USELESS\",\"DROOLING\",\"EXCITED\",\"SKILLFUL\",\n            \"NICE\",\"TEARS\",\"HATE\",\"ROFL\",\n            \"HAPPY\",\"ENERGETIC\",\"SURPRISE\",\"SUBTLE\",\n            \"NERVOUS\",\"WANT\",\"SATISFIED\",\"DIFFICULT\",\n            \"RARE\",\"MESSED UP\",\"NO WAY\",\"DANGER\",\n            \"LOVEY-DOVEY\",\"ANTICIPATION\",\"SMILE\"\n        };\n\n        private static string[] WORDS_TERM = new string[]\n        {\n            \"C-GEAR\",\"PASS POWER\",\"ELEGANT\",\"CUTE\",             // 1674\n            \"COOL\",\"GROUP\",\"GOTCHA\",\"COLLECTION\",\n            \"COMPLETE\",\"SYSTEM\",\"LAUNCHER\",\"NATURE\",\n            \"DOWSING\",\"TOWN MAP\",\"DESIGN\",\"DIGITAL\",\n            \"HALL OF FAME\",\"INSTITUTE\",\"BADGE\",\"BATTLE TEST\",\n            \"BATTLE BOX\",\"PASS ORB\",\"⒆⒇ CENTER\",\"POKÉMON\", // todo: Fix PkMn CENTER encoding issue\n            \"MISSION\",\"MAIL\",\"MESSAGE\",\"ENTREE\",\n            \"UNIQUE\",\"LEVEL\",\"RENTAL\",\"TM\"\n        };\n\n        private static string[] WORDS_CONNECTION = new string[]\n        {\n            \"PGL\",\"GTS\",\"POKÉMON DW\",\"Wi-Fi\",                   // 1706\n            \"SPIN\",\"GAME SYNC\",\"COLOSSEUM\",\"SUBWAY\",\n            \"GEONET\",\"SINGLE\",\"INFRARED\",\"DOUBLE\",\n            \"CHAT\",\"CONNECTION\",\"FRIEND CODE\",\"TRIPLE\",\n            \"ENTRALINK\",\"BATTLE VIDEOS\",\"VOICE CHAT\",\"POKÉ TRANSFER\",\n            \"MULTI BATTLE\",\"MUSICAL\",\"UNION\",\"TAG LOG\",\n            \"ROTATION\",\"WIRELESS\"\n        };\n\n        // todo: We need to substitute words in this range with gifs, but only\n        // when rendering to the web.\n        // Maybe we can nicen their display in ToString() somehow too.\n        private static string[] WORDS_ANIMATED = new string[]\n        {\n            \"絵_GOOD DAY!\",\"絵_HELLO!\",\"絵_I LOVE IT!\",\"絵_GOOD LUCK!\", // 1732\n            \"絵_IT'S FUN!\",\"絵_HAPPY!\",\"絵_THANK YOU!\",\"絵_SUPER! ♪\",\n            \"絵_SORRY...\",\"絵_BYE-BYE!\"\n        };\n\n        private static string[] WORDS_VOICE = new string[]\n        {\n            \"OH WELL\",\"AAH\",\"AHAHA\",\"HUH?\",                     // 1742\n            \"YEAH\",\"URGH\",\"LET ME THINK\",\"HMM\",\n            \"WHOA\",\"ROOOAAR!\",\"WOW\",\"SNICKER\",\n            \"CUTE LAUGH\",\"UNBELIEVABLE\",\"CRIES\",\"OK\",\n            \"AGREE\",\"EH?\",\"BOO-HOO\",\"HEHEHE\",\n            \"HEY\",\"OH, YEAH\",\"OH WOW!\",\"HEEEY\",\n            \"OOPS\",\"OH MY\",\"EEK\",\"YAAAH\",\n            \"GIGGLE\",\"GWAHAHAHA\",\"UGH\",\"HEY!\",\n            \"WEEP\",\"TUT\",\"BLUSH\",\"HEY?\",\n            \"HUH?\",\"SIGH\",\"HAHAHA\",\"AIYEEH\",\n            \"HIYAH\",\"MUHAHAHA\",\"LOL\",\"SNORT\",\n            \"HUMPH\",\"HEY\",\"HE-HE-HE\",\"HEH\",\n            \"HOHOHO\",\"THERE YOU GO\",\"OH, DEAR\",\"ANGRY\",\n            \"MUFUFU\",\"MMM\",\"OK\",\"LALALA\",\n            \"YAY\",\"WAIL\",\"WOW\",\"BOO!\",\n            \"WAHAHA\"\n        };\n\n        // 1803+ is out of range.\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "library/Support/TrendyPhraseBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public abstract class TrendyPhraseBase\n    {\n        public TrendyPhraseBase(byte[] data)\n        {\n            Data = data;\n        }\n\n        private byte[] m_data;\n        public byte[] Data\n        {\n            get\n            {\n                return m_data;\n            }\n            set\n            {\n                if (m_data == value) return;\n                if (value == null)\n                {\n                    m_data = null;\n                    return;\n                }\n\n                if (value.Length != 8) throw new ArgumentException(\"Trendy phrase data must be 8 bytes.\");\n                m_data = value.ToArray();\n            }\n        }\n\n        public override string ToString()\n        {\n            return Render(\"{0}\");\n        }\n\n        public abstract string Render(string wordFormat);\n\n        internal static byte[] Pack(ushort mood, ushort index, ushort word1, ushort word2)\n        {\n            byte[] result = new byte[8];\n            Array.Copy(BitConverter.GetBytes(mood), 0, result, 0, 2);\n            Array.Copy(BitConverter.GetBytes(index), 0, result, 2, 2);\n            Array.Copy(BitConverter.GetBytes(word1), 0, result, 4, 2);\n            Array.Copy(BitConverter.GetBytes(word2), 0, result, 6, 2);\n            return result;\n        }\n\n        public ushort Mood\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 0);\n            }\n            set\n            {\n                Array.Copy(BitConverter.GetBytes(value), 0, Data, 0, 2);\n            }\n        }\n\n        public ushort Index\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 2);\n            }\n            set\n            {\n                Array.Copy(BitConverter.GetBytes(value), 0, Data, 2, 2);\n            }\n        }\n\n        public ushort Word1\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 4);\n            }\n            set\n            {\n                Array.Copy(BitConverter.GetBytes(value), 0, Data, 4, 2);\n            }\n        }\n\n        public ushort Word2\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 6);\n            }\n            set\n            {\n                Array.Copy(BitConverter.GetBytes(value), 0, Data, 6, 2);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "library/Support/ValidationSummary.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Support\n{\n    public struct ValidationSummary\n    {\n        public bool IsValid { get; set; }\n\n        // todo: Put reasons validation failed here, such as out-of-range values, bad egg, EVs > 510, etc.\n        // public bool TooMuchEvs {get; set;}\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BanStatus.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BanStatus\n    {\n        public BanStatus()\n        {\n\n        }\n\n        public BanStatus(BanLevels level, string reason, DateTime ? expires)\n        {\n            Level = level;\n            Reason = reason;\n            Expires = expires;\n        }\n\n        public BanLevels Level { get; set; }\n        public string Reason { get; set; }\n        public DateTime ? Expires { get; set; }\n    }\n\n    public enum BanLevels\n    {\n        None = 0,\n        Restricted = 1,\n        Banned = 2,\n        IAmATotalPieceOfShit = 9,\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleSubwayPokemon5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleSubwayPokemon5 : BattleTowerPokemonBase\n    {\n        public BattleSubwayPokemon5(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n        }\n\n        public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, int species, byte form, ushort held_item, ushort[] moveset,\n            uint ot, uint personality, uint ivs, byte[] evs, byte pp_ups,\n            Languages language, byte ability, byte happiness, EncodedString5 nickname, uint unknown2) : base(pokedex)\n        {\n            if (moveset == null) throw new ArgumentNullException(\"moveset\");\n            if (moveset.Length != 4) throw new ArgumentException(\"moveset\");\n            if (evs == null) throw new ArgumentNullException(\"evs\");\n            if (evs.Length != 6) throw new ArgumentException(\"evs\");\n            if (nickname == null) throw new ArgumentNullException(\"nickname\");\n            if (nickname.Size != 22) throw new ArgumentException(\"nickname\");\n\n            SpeciesID = species;\n            FormID = form;\n            HeldItemID = held_item;\n            GetMovesFromArray(Moves, pokedex, moveset, pp_ups);\n            TrainerID = ot;\n            Personality = personality;\n            IVs = new IvStatValues((int)ivs & 0x3fffffff);\n            IvFlags = ivs & 0xc0000000u;\n            EVs = new ByteStatValues(evs);\n            Language = language;\n            AbilityID = ability;\n            Happiness = happiness;\n            NicknameEncoded = nickname; // todo: clone\n            Unknown2 = unknown2;\n        }\n\n        public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, int species, byte form, ushort held_item,\n            ushort move1, ushort move2, ushort move3, ushort move4, uint ot, uint personality,\n            uint ivs, byte[] evs, byte pp_ups, Languages language, byte ability, byte happiness,\n            EncodedString5 nickname, uint unknown2) :\n            this(pokedex, species, form, held_item, new ushort[] { move1, move2, move3, move4 },\n                ot, personality, ivs, evs, pp_ups, language, ability, happiness, nickname, unknown2)\n        {\n        }\n\n        public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)\n        {\n            Load(data);\n        }\n\n        public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)\n        {\n            Load(data);\n        }\n\n        public BattleSubwayPokemon5(Pokedex.Pokedex pokedex, byte[] data, int offset) : base(pokedex)\n        {\n            Load(data, offset);\n        }\n\n        public EncodedString5 NicknameEncoded;\n        public uint Unknown2;\n\n        public override string Nickname\n        {\n            get\n            {\n                return (NicknameEncoded == null) ? null : NicknameEncoded.Text;\n            }\n            set\n            {\n                // xxx: This comes straight from Pokemon4. What we logically need here is an inheritance diamond.\n                if (Nickname == value) return;\n                if (NicknameEncoded == null) NicknameEncoded = new EncodedString5(value, 22);\n                else NicknameEncoded.Text = value;\n            }\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write(CombineSpeciesForm(SpeciesID, FormID));\n            writer.Write((ushort)HeldItemID);\n\n            ushort[] moveset = GetArrayFromMoves(Moves);\n            for (int i = 0; i < 4; i++)\n            {\n                writer.Write(moveset[i]);\n            }\n\n            writer.Write(TrainerID);\n            writer.Write(Personality);\n            writer.Write(IVs.ToInt32() | (int)IvFlags);\n            writer.Write(EVs.ToArray(), 0, 6);\n            writer.Write(GetPpUpsFromMoves(Moves));\n            writer.Write((byte)Language);\n            writer.Write((byte)AbilityID);\n            writer.Write(Happiness);\n            writer.Write(NicknameEncoded.RawData, 0, 22);\n            writer.Write(Unknown2); // new to G5\n\n            writer.Flush();\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            ushort species_form = reader.ReadUInt16();\n            SpeciesID = GetSpeciesFromCombined(species_form);\n            FormID = GetFormFromCombined(species_form);\n            HeldItemID = reader.ReadUInt16();\n\n            ushort[] moveset = new ushort[4];\n            for (int i = 0; i < 4; i++)\n            {\n                moveset[i] = reader.ReadUInt16();\n            }\n\n            TrainerID = reader.ReadUInt32();\n            Personality = reader.ReadUInt32();\n            uint ivs = reader.ReadUInt32();\n            IVs = new IvStatValues((int)ivs & 0x3fffffff);\n            IvFlags = ivs & 0xc0000000u;\n\n            EVs = new ByteStatValues(reader.ReadBytes(6));\n            byte ppUps = reader.ReadByte();\n            GetMovesFromArray(Moves, m_pokedex, moveset, ppUps);\n\n            Language = (Languages)reader.ReadByte();\n            AbilityID = reader.ReadByte();\n            Happiness = reader.ReadByte();\n            NicknameEncoded = new EncodedString5(reader.ReadBytes(22));\n            Unknown2 = reader.ReadUInt32(); // new to G5\n        }\n\n        public BattleSubwayPokemon5 Clone()\n        {\n            uint ivsField = (uint)(IVs.ToInt32() & 0x3fffffffu) | (IvFlags & 0xc0000000u);\n            ushort[] moveset = GetArrayFromMoves(Moves);\n            byte ppUps = GetPpUpsFromMoves(Moves);\n\n            BattleSubwayPokemon5 result = new BattleSubwayPokemon5(m_pokedex,\n                SpeciesID, FormID, (ushort)HeldItemID, moveset,\n                TrainerID, Personality, ivsField, EVs.ToArray(), ppUps,\n                Language, (byte)AbilityID, Happiness, NicknameEncoded, Unknown2);\n\n            return result;\n        }\n\n        public override Generations Generation\n        {\n            get\n            {\n                return Generations.Generation5;\n            }\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 60;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleSubwayProfile5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleSubwayProfile5 : BattleTowerProfileBase\n    {\n        public BattleSubwayProfile5()\n        {\n\n        }\n\n        public BattleSubwayProfile5(byte[] data)\n        {\n            Load(data, 0);\n        }\n\n        public BattleSubwayProfile5(byte[] data, int start)\n        {\n            Load(data, start);\n        }\n\n        public BattleSubwayProfile5(EncodedString5 name, Versions version,\n            Languages language, byte country, byte region, uint ot,\n            TrendyPhrase5 phrase_leader, byte gender, byte unknown)\n        {\n            if (name == null) throw new ArgumentNullException(\"name\");\n            if (name.Size != 16) throw new ArgumentException(\"name\");\n            if (phrase_leader == null) throw new ArgumentNullException(\"phrase_leader\");\n\n            Name = name; // todo: clone\n            Version = version;\n            Language = language;\n            Country = country;\n            Region = region;\n            OT = ot;\n            PhraseLeader = phrase_leader; // todo: clone\n            Gender = gender;\n            Unknown = unknown;\n        }\n\n        public EncodedString5 Name;\n        public Versions Version;\n        public Languages Language;\n        public byte Country;\n        public byte Region;\n        public uint OT;\n        public TrendyPhrase5 PhraseLeader;\n        // Different from GTS, 0 = male, 2 = female, 1 = Plato???? \n        public byte Gender;\n        public byte Unknown; // Probably trainer class.\n\n        public byte[] Save()\n        {\n            byte[] data = new byte[0x22];\n            MemoryStream ms = new MemoryStream(data);\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            writer.Write(Name.RawData, 0, 16);\n            writer.Write((byte)Version);\n            writer.Write((byte)Language);\n            writer.Write(Country);\n            writer.Write(Region);\n            writer.Write(OT);\n            writer.Write(PhraseLeader.Data, 0, 8);\n            writer.Write(Gender);\n            writer.Write(Unknown);\n\n            writer.Flush();\n            ms.Flush();\n            return data;\n        }\n\n        public void Load(byte[] data, int start)\n        {\n            if (start + 0x22 > data.Length) throw new ArgumentOutOfRangeException(\"start\");\n\n            Name = new EncodedString5(data, start, 0x10);\n            Version = (Versions)data[0x10 + start];\n            Language = (Languages)data[0x11 + start];\n            Country = data[0x12 + start];\n            Region = data[0x13 + start];\n            OT = BitConverter.ToUInt32(data, 0x14 + start);\n            byte[] trendyPhrase = new byte[8];\n            Array.Copy(data, 0x18 + start, trendyPhrase, 0, 8);\n            PhraseLeader = new TrendyPhrase5(trendyPhrase);\n            Gender = data[0x20 + start];\n            Unknown = data[0x21 + start];\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleSubwayRecord5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleSubwayRecord5 : BattleTowerRecordBase\n    {\n        public BattleSubwayRecord5(Pokedex.Pokedex pokedex)\n        {\n            Pokedex = pokedex;\n        }\n\n        public BattleSubwayRecord5(Pokedex.Pokedex pokedex, byte[] data)\n        {\n            Pokedex = pokedex;\n            Load(data, 0);\n        }\n\n        public BattleSubwayRecord5(Pokedex.Pokedex pokedex, byte[] data, int start)\n        {\n            Pokedex = pokedex;\n            Load(data, start);\n        }\n\n        public Pokedex.Pokedex Pokedex { get; set; }\n\n        private BattleSubwayPokemon5[] m_party;\n        private BattleSubwayProfile5 m_profile;\n        private TrendyPhrase5 m_phrase_challenged;\n        private TrendyPhrase5 m_phrase_won;\n        private TrendyPhrase5 m_phrase_lost;\n\n        public override IList<BattleTowerPokemonBase> Party\n        {\n            get\n            {\n                return m_party;\n            }\n            set\n            {\n                if (!(value is BattleSubwayPokemon5[])) throw new ArgumentException(\"value must be BattleSubwayPokemon5[]\");\n                BattleSubwayPokemon5[] party = (BattleSubwayPokemon5[])value;\n                if (party.Length != 3) throw new ArgumentException(\"value must have length 3\");\n                m_party = party;\n            }\n        }\n\n\n        public override BattleTowerProfileBase Profile\n        {\n            get\n            {\n                return m_profile;\n            }\n\n            set\n            {\n                m_profile = (BattleSubwayProfile5)value;\n            }\n        }\n\n        public override TrendyPhraseBase PhraseChallenged\n        {\n            get\n            {\n                return m_phrase_challenged;\n            }\n\n            set\n            {\n                m_phrase_challenged = (TrendyPhrase5)value;\n            }\n        }\n\n        public override TrendyPhraseBase PhraseWon\n        {\n            get\n            {\n                return m_phrase_won;\n            }\n\n            set\n            {\n                m_phrase_won = (TrendyPhrase5)value;\n            }\n        }\n\n        public override TrendyPhraseBase PhraseLost\n        {\n            get\n            {\n                return m_phrase_lost;\n            }\n\n            set\n            {\n                m_phrase_lost = (TrendyPhrase5)value;\n            }\n        }\n\n        public ushort Unknown3;\n\n        public byte Rank;\n        public byte RoomNum;\n        public byte BattlesWon;\n        public byte[] Unknown4; // 5 bytes, appears to always be 00 00 00 00 00?\n        public ulong Unknown5; // Appears to be zero on AdmiralCurtiss's scraped data, but is very big ints on data being uploaded.\n        public int PID;\n\n        public byte[] Save()\n        {\n            byte[] data = new byte[0xf0];\n            MemoryStream ms = new MemoryStream(data);\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            for (int x = 0; x < 3; x++)\n            {\n                writer.Write(Party[x].Save());\n            }\n            writer.Write(((BattleSubwayProfile5)Profile).Save());\n            writer.Write(PhraseChallenged.Data);\n            writer.Write(PhraseWon.Data);\n            writer.Write(PhraseLost.Data);\n            writer.Write(Unknown3);\n\n            writer.Flush();\n            ms.Flush();\n            return data;\n        }\n\n        public void Load(byte[] data, int start)\n        {\n            if (start + 0xf0 > data.Length) throw new ArgumentOutOfRangeException(\"start\");\n\n            Party = new BattleSubwayPokemon5[3];\n            for (int x = 0; x < 3; x++)\n            {\n                Party[x] = new BattleSubwayPokemon5(Pokedex, data, start + x * 0x3c);\n            }\n            Profile = new BattleSubwayProfile5(data, 0xb4 + start);\n\n            byte[] trendyPhrase = new byte[8];\n            Array.Copy(data, 0xd6 + start, trendyPhrase, 0, 8);\n            PhraseChallenged = new TrendyPhrase5(trendyPhrase);\n            trendyPhrase = new byte[8];\n            Array.Copy(data, 0xde + start, trendyPhrase, 0, 8);\n            PhraseWon = new TrendyPhrase5(trendyPhrase);\n            trendyPhrase = new byte[8];\n            Array.Copy(data, 0xe6 + start, trendyPhrase, 0, 8);\n            PhraseLost = new TrendyPhrase5(trendyPhrase);\n\n            Unknown3 = BitConverter.ToUInt16(data, 0xee + start);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleTowerPokemon4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleTowerPokemon4 : BattleTowerPokemonBase\n    {\n        public BattleTowerPokemon4(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n        }\n\n        public BattleTowerPokemon4(Pokedex.Pokedex pokedex, int species, byte form, ushort held_item, ushort[] moveset,\n            uint ot, uint personality, uint ivs, byte[] evs, byte pp_ups,\n            Languages language, byte ability, byte happiness, EncodedString4 nickname) : base(pokedex)\n        {\n            if (moveset == null) throw new ArgumentNullException(\"moveset\");\n            if (moveset.Length != 4) throw new ArgumentException(\"moveset\");\n            if (evs == null) throw new ArgumentNullException(\"evs\");\n            if (evs.Length != 6) throw new ArgumentException(\"evs\");\n            if (nickname == null) throw new ArgumentNullException(\"nickname\");\n            if (nickname.Size != 22) throw new ArgumentException(\"nickname\");\n\n            SpeciesID = species;\n            FormID = form;\n            HeldItemID = held_item;\n            GetMovesFromArray(Moves, pokedex, moveset, pp_ups);\n            TrainerID = ot;\n            Personality = personality;\n            IVs = new IvStatValues((int)ivs & 0x3fffffff);\n            IvFlags = ivs & 0xc0000000u;\n            EVs = new ByteStatValues(evs);\n            Language = language;\n            AbilityID = ability;\n            Happiness = happiness;\n            NicknameEncoded = nickname; // todo: clone\n        }\n\n        public BattleTowerPokemon4(Pokedex.Pokedex pokedex, int species, byte form, ushort held_item,\n            ushort move1, ushort move2, ushort move3, ushort move4, uint ot, uint personality, \n            uint ivs, byte[] evs, byte pp_ups, Languages language, byte ability, byte happiness,\n            EncodedString4 nickname) : \n            this(pokedex, species, form, held_item, new ushort[] { move1, move2, move3, move4 },\n                ot, personality, ivs, evs, pp_ups, language, ability, happiness, nickname)\n        {\n        }\n\n        public BattleTowerPokemon4(Pokedex.Pokedex pokedex, BinaryReader data) : base(pokedex)\n        {\n            Load(data);\n        }\n\n        public BattleTowerPokemon4(Pokedex.Pokedex pokedex, byte[] data) : base(pokedex)\n        {\n            Load(data);\n        }\n\n        public BattleTowerPokemon4(Pokedex.Pokedex pokedex, byte[] data, int offset) : base(pokedex)\n        {\n            Load(data, offset);\n        }\n\n        public EncodedString4 NicknameEncoded;\n        public override string Nickname\n        {\n            get\n            {\n                return (NicknameEncoded == null) ? null : NicknameEncoded.Text;\n            }\n            set\n            {\n                // xxx: This comes straight from Pokemon4. What we logically need here is an inheritance diamond.\n                if (Nickname == value) return;\n                if (NicknameEncoded == null) NicknameEncoded = new EncodedString4(value, 22);\n                else NicknameEncoded.Text = value;\n            }\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write(CombineSpeciesForm(SpeciesID, FormID));\n            writer.Write((ushort)HeldItemID);\n\n            ushort[] moveset = GetArrayFromMoves(Moves);\n            for (int i = 0; i < 4; i++)\n            {\n                writer.Write(moveset[i]);\n            }\n\n            writer.Write(TrainerID);\n            writer.Write(Personality);\n            writer.Write(IVs.ToInt32() | (int)IvFlags);\n            writer.Write(EVs.ToArray(), 0, 6);\n            writer.Write(GetPpUpsFromMoves(Moves));\n            writer.Write((byte)Language);\n            writer.Write((byte)AbilityID);\n            writer.Write(Happiness);\n            writer.Write(NicknameEncoded.RawData, 0, 22);\n\n            writer.Flush();\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            ushort species_form = reader.ReadUInt16();\n            SpeciesID = GetSpeciesFromCombined(species_form);\n            FormID = GetFormFromCombined(species_form);\n            HeldItemID = reader.ReadUInt16();\n\n            ushort[] moveset = new ushort[4];\n            for (int i = 0; i < 4; i++)\n            {\n                moveset[i] = reader.ReadUInt16();\n            }\n\n            TrainerID = reader.ReadUInt32();\n            Personality = reader.ReadUInt32();\n            uint ivs = reader.ReadUInt32();\n            IVs = new IvStatValues((int)ivs & 0x3fffffff);\n            IvFlags = ivs & 0xc0000000u;\n\n            EVs = new ByteStatValues(reader.ReadBytes(6));\n            byte ppUps = reader.ReadByte();\n            GetMovesFromArray(Moves, m_pokedex, moveset, ppUps);\n\n            Language = (Languages)reader.ReadByte();\n            AbilityID = reader.ReadByte();\n            Happiness = reader.ReadByte();\n            NicknameEncoded = new EncodedString4(reader.ReadBytes(22));\n        }\n\n        public BattleTowerPokemon4 Clone()\n        {\n            uint ivsField = (uint)(IVs.ToInt32() & 0x3fffffffu) | (IvFlags & 0xc0000000u);\n            ushort[] moveset = GetArrayFromMoves(Moves);\n            byte ppUps = GetPpUpsFromMoves(Moves);\n\n            BattleTowerPokemon4 result = new BattleTowerPokemon4(m_pokedex,\n                SpeciesID, FormID, (ushort)HeldItemID, moveset,\n                TrainerID, Personality, ivsField, EVs.ToArray(), ppUps,\n                Language, (byte)AbilityID, Happiness, NicknameEncoded);\n\n            return result;\n        }\n\n        public override Generations Generation\n        {\n            get\n            {\n                return Generations.Generation4;\n            }\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 56;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleTowerPokemonBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public abstract class BattleTowerPokemonBase : PokemonBase\n    {\n        public BattleTowerPokemonBase(Pokedex.Pokedex pokedex) : base(pokedex)\n        {\n\n        }\n\n        // In the main PKM structure, the remaining 2 bits on the IVs field\n        // represents whether it's nicknamed and if it's an egg. Clearly, eggs\n        // shouldn't be brought into Battle Tower.\n        public uint IvFlags;\n\n        public override byte Level\n        {\n            get\n            {\n                // todo: fact check that everything's lv50?\n                return 50;\n            }\n\n            set\n            {\n                throw new NotSupportedException();\n            }\n        }\n\n        protected static ushort CombineSpeciesForm(int species, byte form)\n        {\n            if (species > 0x7ff || species < 0) throw new ArgumentOutOfRangeException(\"species\");\n            if (form > 0x1f) throw new ArgumentOutOfRangeException(\"form\");\n            return (ushort)(species & 0x7ff | form << 11);\n        }\n\n        protected static int GetSpeciesFromCombined(ushort combined)\n        {\n            return combined & 0x7ff;\n        }\n\n        protected static byte GetFormFromCombined(ushort combined)\n        {\n            return (byte)(combined >> 11);\n        }\n\n        internal static void GetMovesFromArray(IList<MoveSlot> result, Pokedex.Pokedex pokedex, ushort[] moves, byte ppUps)\n        {\n            if (moves.Length != 4) throw new ArgumentException(\"moves\");\n            if (result.Count != 4) throw new ArgumentException(\"movesOut\");\n\n            for (int i = 0; i < 4; i++)\n            {\n                result[i] = MoveFromValues(pokedex, moves[i], (byte)(ppUps & 0x03));\n\n                ppUps >>= 2;\n            }\n        }\n\n        internal static MoveSlot MoveFromValues(Pokedex.Pokedex pokedex, ushort move, byte ppUps)\n        {\n            MoveSlot result = new MoveSlot(pokedex, move, ppUps, 0);\n            result.RemainingPP = (byte)result.PP;\n            return result;\n        }\n\n        internal static ushort[] GetArrayFromMoves(IList<MoveSlot> moves)\n        {\n            if (moves.Count != 4) throw new ArgumentException(\"moves\");\n            ushort[] result = new ushort[4];\n\n            for (int i = 0; i < 4; i++)\n            {\n                result[i] = (ushort)moves[i].MoveID;\n            }\n            return result;\n        }\n\n        internal static byte GetPpUpsFromMoves(IList<MoveSlot> moves)\n        {\n            // The first move uses the least significant bits, moving up from there.\n            // [1, 3, 0, 0] -> 0x0d\n            byte ppUps = 0;\n            for (int i = 0; i < 4; i++)\n            {\n                ppUps |= (byte)(moves[i].PPUps << (i * 2));\n            }\n            return ppUps;\n        }\n\n        public ushort[] GetMoveIds()\n        {\n            return GetArrayFromMoves(Moves);\n        }\n\n        public byte GetPpUps()\n        {\n            return GetPpUpsFromMoves(Moves);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleTowerProfile4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleTowerProfile4 : BattleTowerProfileBase\n    {\n        public BattleTowerProfile4()\n        {\n        }\n\n        public BattleTowerProfile4(EncodedString4 name, Versions version, \n            Languages language, byte country, byte region, uint ot,\n            TrendyPhrase4 phrase_leader, byte gender, byte unknown)\n        {\n            if (name == null) throw new ArgumentNullException(\"name\");\n            if (name.Size != 16) throw new ArgumentException(\"name\");\n            if (phrase_leader == null) throw new ArgumentNullException(\"phrase_leader\");\n            \n            Name = name; // todo: clone\n            Version = version;\n            Language = language;\n            Country = country;\n            Region = region;\n            OT = ot;\n            PhraseLeader = phrase_leader; // todo: clone\n            Gender = gender;\n            Unknown = unknown;\n        }\n\n        public BattleTowerProfile4(byte[] data)\n        {\n            Load(data, 0);\n        }\n\n        public BattleTowerProfile4(byte[] data, int start)\n        {\n            Load(data, start);\n        }\n\n        public EncodedString4 Name;\n        public Versions Version;\n        public Languages Language;\n        public byte Country;\n        public byte Region;\n        public uint OT;\n        public TrendyPhrase4 PhraseLeader;\n        // Different from GTS, 0 = male, 2 = female, 1 = Plato???? \n        public byte Gender;\n\n        // 3: Lass\n        // 6: Bug Catcher\n        // 10: Battle Girl\n        // 14: Black Belt\n        // 18: Cowgirl\n        // 24: Ace Trainer M\n        // 25: Ace Trainer F\n        // 32: Rich Boy\n        // 33: Lady\n        // 35: Socialite F\n        // 36: Beauty\n        // 48: Ruin Maniac\n        // 49: Psychic M\n        // 57: Roughneck\n        // 60: School Kid M\n        // 85: Idol\n        public byte Unknown; // Probably trainer class.\n\n        public byte[] Save()\n        {\n            byte[] data = new byte[0x22];\n            MemoryStream ms = new MemoryStream(data);\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            writer.Write(Name.RawData, 0, 16);\n            writer.Write((byte)Version);\n            writer.Write((byte)Language);\n            writer.Write(Country);\n            writer.Write(Region);\n            writer.Write(OT);\n            writer.Write(PhraseLeader.Data, 0, 8);\n            writer.Write(Gender);\n            writer.Write(Unknown);\n\n            writer.Flush();\n            ms.Flush();\n            return data;\n        }\n\n        public void Load(byte[] data, int start)\n        {\n            if (start + 0x22 > data.Length) throw new ArgumentOutOfRangeException(\"start\");\n\n            Name = new EncodedString4(data, start, 0x10);\n            Version = (Versions)data[0x10 + start];\n            Language = (Languages)data[0x11 + start];\n            Country = data[0x12 + start];\n            Region = data[0x13 + start];\n            OT = BitConverter.ToUInt32(data, 0x14 + start);\n            byte[] trendyPhrase = new byte[8];\n            Array.Copy(data, 0x18 + start, trendyPhrase, 0, 8);\n            PhraseLeader = new TrendyPhrase4(trendyPhrase);\n            Gender = data[0x20 + start];\n            Unknown = data[0x21 + start];\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleTowerProfileBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public abstract class BattleTowerProfileBase\n    {\n        // todo: move much of implementation in here from derived classes\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleTowerRecord4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleTowerRecord4 : BattleTowerRecordBase\n    {\n        public BattleTowerRecord4(Pokedex.Pokedex pokedex)\n        {\n            Pokedex = pokedex;\n        }\n\n        public BattleTowerRecord4(Pokedex.Pokedex pokedex, byte[] data)\n        {\n            Pokedex = pokedex;\n            Load(data, 0);\n        }\n\n        public BattleTowerRecord4(Pokedex.Pokedex pokedex, byte[] data, int start)\n        {\n            Pokedex = pokedex;\n            Load(data, start);\n        }\n\n        public Pokedex.Pokedex Pokedex { get; set; }\n\n        private BattleTowerPokemon4[] m_party;\n        private BattleTowerProfile4 m_profile;\n        private TrendyPhrase4 m_phrase_challenged;\n        private TrendyPhrase4 m_phrase_won;\n        private TrendyPhrase4 m_phrase_lost;\n\n        public override IList<BattleTowerPokemonBase> Party\n        {\n            get\n            {\n                return m_party;\n            }\n            set\n            {\n                if (!(value is BattleTowerPokemon4[])) throw new ArgumentException(\"value must be BattleTowerPokemon4[]\");\n                BattleTowerPokemon4[] party = (BattleTowerPokemon4[])value;\n                if (party.Length != 3) throw new ArgumentException(\"value must have length 3\");\n                m_party = party;\n            }\n        }\n\n        public override BattleTowerProfileBase Profile\n        {\n            get\n            {\n                return m_profile;\n            }\n\n            set\n            {\n                m_profile = (BattleTowerProfile4)value;\n            }\n        }\n\n        public override TrendyPhraseBase PhraseChallenged\n        {\n            get\n            {\n                return m_phrase_challenged;\n            }\n\n            set\n            {\n                m_phrase_challenged = (TrendyPhrase4)value;\n            }\n        }\n\n        public override TrendyPhraseBase PhraseWon\n        {\n            get\n            {\n                return m_phrase_won;\n            }\n\n            set\n            {\n                m_phrase_won = (TrendyPhrase4)value;\n            }\n        }\n\n        public override TrendyPhraseBase PhraseLost\n        {\n            get\n            {\n                return m_phrase_lost;\n            }\n\n            set\n            {\n                m_phrase_lost = (TrendyPhrase4)value;\n            }\n        }\n\n\n        public ushort Unknown3; // Seems to be some sort of Elo rating. Goes up to about 8000.\n\n        public byte Rank;\n        public byte RoomNum;\n        public byte BattlesWon;\n        public ulong Unknown5; // Appears to be zero on AdmiralCurtiss's scraped data, but is very big ints on data being uploaded.\n        public int PID;\n\n        public byte[] Save()\n        {\n            byte[] data = new byte[0xe4];\n            MemoryStream ms = new MemoryStream(data);\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            for (int x = 0; x < 3; x++)\n            {\n                writer.Write(Party[x].Save());\n            }\n            writer.Write(((BattleTowerProfile4)Profile).Save());\n            writer.Write(PhraseChallenged.Data);\n            writer.Write(PhraseWon.Data);\n            writer.Write(PhraseLost.Data);\n            writer.Write(Unknown3);\n\n            writer.Flush();\n            ms.Flush();\n            return data;\n        }\n\n        public void Load(byte[] data, int start)\n        {\n            if (start + 0xe4 > data.Length) throw new ArgumentOutOfRangeException(\"start\");\n\n            m_party = new BattleTowerPokemon4[3];\n            for (int x = 0; x < 3; x++)\n            {\n                Party[x] = new BattleTowerPokemon4(Pokedex, data, start + x * 0x38);\n            }\n            Profile = new BattleTowerProfile4(data, 0xa8 + start);\n\n            byte[] trendyPhrase = new byte[8];\n            Array.Copy(data, 0xca + start, trendyPhrase, 0, 8);\n            PhraseChallenged = new TrendyPhrase4(trendyPhrase);\n            trendyPhrase = new byte[8];\n            Array.Copy(data, 0xd2 + start, trendyPhrase, 0, 8);\n            PhraseWon = new TrendyPhrase4(trendyPhrase);\n            trendyPhrase = new byte[8];\n            Array.Copy(data, 0xda + start, trendyPhrase, 0, 8);\n            PhraseLost = new TrendyPhrase4(trendyPhrase);\n\n            Unknown3 = BitConverter.ToUInt16(data, 0xe2 + start);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleTowerRecordBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public abstract class BattleTowerRecordBase\n    {\n        // todo: move much of implementation in here from derived classes\n\n        public abstract IList<BattleTowerPokemonBase> Party { get; set; }\n\n        public abstract BattleTowerProfileBase Profile { get; set; }\n\n        public abstract TrendyPhraseBase PhraseChallenged { get; set; }\n        public abstract TrendyPhraseBase PhraseWon { get; set; }\n        public abstract TrendyPhraseBase PhraseLost { get; set; }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleVideoHeader4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleVideoHeader4\n    {\n        public BattleVideoHeader4()\n        {\n        }\n\n        public BattleVideoHeader4(int pid, ulong serial_number, byte[] data)\n        {\n            if (data.Length != 228) throw new ArgumentException(\"Battle video header data must be 228 bytes.\");\n\n            PID = pid;\n            SerialNumber = serial_number;\n            Data = data;\n        }\n\n        // todo: encapsulate these so calculated fields are always correct\n        public int PID;\n        public ulong SerialNumber;\n        public byte[] Data;\n\n        public ushort Streak\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 0xa4);\n            }\n        }\n\n        public ushort[] Party\n        {\n            get\n            {\n                ushort[] result = new ushort[12];\n                for (int x = 0; x < result.Length; x++)\n                {\n                    result[x] = BitConverter.ToUInt16(Data, 0x80 + x * 2);\n                }\n                return result;\n            }\n        }\n\n        public byte[] TrainerName\n        {\n            get\n            {\n                byte[] result = new byte[16];\n                Array.Copy(Data, 0, result, 0, 16);\n                return result;\n            }\n        }\n\n        public BattleVideoMetagames4 Metagame\n        {\n            get\n            {\n                return (BattleVideoMetagames4)Data[0xa6];\n            }\n        }\n\n        public byte Country\n        {\n            get\n            {\n                return Data[0x17];\n            }\n        }\n\n        public byte Region\n        {\n            get\n            {\n                return Data[0x18];\n            }\n        }\n\n        public BattleVideoHeader4 Clone()\n        {\n            return new BattleVideoHeader4(PID, SerialNumber, Data.ToArray());\n        }\n\n        #region ID number calculation\n        // Generating battle video IDs:\n        //\n        // STEP 1: Prepping the Template:\n        // Start with an auto-incrementing primary key. Treat as a string of 12\n        // decimal digits. Pad with 0s. We call this the Key.\n        //\n        // The ones place (rightmost) is used to select one of ten fixed \n        // Templates. A Template has 12 (11 useful) digits. They are basically\n        // hardcoded random-looking numbers. The rightmost digit of each \n        // template is undefined/unused. The leftmost digit is never 0.\n        //\n        // The Key’s tens place and hundreds place are added together mod-10 to\n        // get a constant which is used to roll each of the digits in the\n        // Template by. Here, rolling means adding in mod-10.\n        //\n        // The Template’s leftmost digit is rolled in mod-9 instead of 10.\n        // (While rolling, skip the number 0.) If the value in the \n        // second-leftmost digit wraps around to or past 0, this leftmost digit\n        // is rolled one less time than it would be otherwise.\n        //\n        // Note: There is probably a better way to represent this algorithm\n        // that doesn't require special handling for the leftmost digit based\n        // on what the second one is doing. It would involve choosing different\n        // Template constants and using a different roll formula.\n        //\n        // STEP 2: Prepping the Key:\n        // Remove the tens place from the Key, then shift all the digits\n        // EXCEPT the leftmost and rightmost one place to the right to fill the\n        // gap. The second leftmost digit is filled with a constant 0.\n        // (Example: 123333345678 becomes 102333334568)\n        //\n        // Note: This handling of the left two digits is an extrapolation on\n        // my part. It gives us the maximum possible range of 10-00000-00000\n        // through to 99-99999-99999 in a 1:1 mapping.\n        //\n        // STEP 3: Putting it together:\n        // Overwrite the rightmost digit of the Template with the Key’s ones\n        // place digit.\n        //\n        // For each remaining digit, roll the Template *backwards* a number of\n        // times equal to the Key’s digit in that place.\n\n        private static byte[][] m_templates = new byte[][]{\n            new byte[]{6, 9, 3, 6, 1, 2, 7, 5, 2, 2, 4, 0},\n            new byte[]{8, 0, 7, 2, 6, 2, 4, 9, 1, 4, 4, 1},\n            new byte[]{1, 4, 9, 7, 3, 8, 5, 7, 6, 4, 7, 2},\n            new byte[]{9, 4, 1, 7, 6, 3, 9, 6, 2, 7, 5, 3},\n            new byte[]{4, 6, 4, 2, 9, 9, 7, 3, 4, 6, 1, 4},\n            new byte[]{9, 5, 1, 0, 9, 7, 8, 6, 6, 3, 5, 5},\n            new byte[]{8, 8, 7, 4, 4, 4, 3, 4, 6, 2, 9, 6},\n            new byte[]{6, 3, 7, 7, 5, 6, 7, 6, 1, 9, 5, 7},\n            new byte[]{2, 6, 7, 2, 3, 2, 4, 5, 8, 9, 7, 8},\n            new byte[]{2, 1, 9, 1, 7, 9, 9, 1, 6, 5, 6, 9}\n        };\n\n        /// <summary>\n        /// Converts a primary key (auto incrementing) into a Battle Video ID.\n        /// </summary>\n        public static ulong KeyToSerial(ulong key)\n        {\n            if (key > 899999999999L || key < 0L) throw new ArgumentOutOfRangeException();\n\n            byte[] keyDigits = LongToDigits(key);\n            byte[] serialDigits = m_templates[keyDigits[11]].ToArray();\n\n            byte valueShift = 0;\n            valueShift += keyDigits[9];\n            valueShift += keyDigits[10];\n            valueShift %= 10;\n\n            if (valueShift + serialDigits[1] > 9)\n                serialDigits[0]--;\n\n            for (int x = 0; x < 11; x++)\n            {\n                serialDigits[x] += valueShift;\n            }\n\n            serialDigits[0] += 9;\n            serialDigits[0] -= keyDigits[0];\n            serialDigits[0] %= 9;\n            if (serialDigits[0] == 0) serialDigits[0] = 9;\n\n            serialDigits[1] %= 10;\n\n            for (int x = 1; x < 10; x++)\n            {\n                serialDigits[x + 1] += 10;\n                serialDigits[x + 1] -= keyDigits[x];\n                serialDigits[x + 1] %= 10;\n            }\n\n            return DigitsToLong(serialDigits);\n        }\n\n        /// <summary>\n        /// Converts Battle Video ID back into a primary key.\n        /// </summary>\n        public static ulong SerialToKey(ulong serial)\n        {\n            if (serial > 999999999999L || serial < 100000000000L)\n                throw new ArgumentOutOfRangeException();\n\n            byte[] serialDigits = LongToDigits(serial);\n            byte[] templateDigits = m_templates[serialDigits[11]];\n\n            serialDigits[0] = (byte)(10 + templateDigits[0] - serialDigits[0]);\n            for (int x = 1; x < 11; x++)\n            {\n                serialDigits[x] = (byte)(10 + templateDigits[x] - serialDigits[x]);\n            }\n\n            byte valueShift = (byte)(serialDigits[1] % 10);\n            if (templateDigits[1] - valueShift >= 0)\n                serialDigits[0]--;\n\n            serialDigits[0] += (byte)(9 - valueShift);\n            serialDigits[0] %= 9;\n\n            for (int x = 1; x < 11; x++)\n            {\n                serialDigits[x] += (byte)(10 - valueShift);\n                serialDigits[x] %= 10;\n            }\n            for (int x = 1; x < 10; x++)\n            {\n                serialDigits[x] = serialDigits[x + 1];\n            }\n\n            serialDigits[10] = (byte)((20 - valueShift - serialDigits[9]) % 10);\n\n            return DigitsToLong(serialDigits);\n        }\n\n        private static byte[] LongToDigits(ulong value)\n        {\n            if (value > 999999999999L || value < 0L) throw new ArgumentException();\n            byte[] result = new byte[12];\n            for (int x = 11; x >= 0; x--)\n            {\n                result[x] = (byte)(value % 10);\n                value /= 10;\n            }\n            return result;\n        }\n\n        private static ulong DigitsToLong(byte[] digits)\n        {\n            if (digits.Length != 12) throw new ArgumentException();\n            ulong result = 0;\n            ulong pow = 1;\n            for (int x = 11; x >= 0; x--)\n            {\n                if (digits[x] > 9) throw new ArgumentException();\n                result += digits[x] * pow;\n                pow *= 10;\n            }\n            return result;\n        }\n\n        #endregion\n\n        public static String FormatSerial(ulong serial)\n        {\n            String number = serial.ToString(\"D12\");\n            String[] split = new String[3];\n            split[0] = number.Substring(0, number.Length - 10);\n            split[1] = number.Substring(number.Length - 10, 5);\n            split[2] = number.Substring(number.Length - 5, 5);\n            return String.Join(\"-\", split);\n        }\n    }\n\n    public enum BattleVideoMetagames4 : byte\n    {\n        ColosseumSingleNoRestrictions = 0x00,\n        ColosseumSingleStandardCup = 0x01,\n        ColosseumSingleFancyCup = 0x02,\n        ColosseumSingleLittleCup = 0x03,\n        ColosseumSingleLightCup = 0x04,\n        ColosseumSingleDoubleCup = 0x05,\n        ColosseumSingleOtherCup = 0x06,\n\n        ColosseumDoubleNoRestrictions = 0x07,\n        ColosseumDoubleStandardCup = 0x08,\n        ColosseumDoubleFancyCup = 0x09,\n        ColosseumDoubleLittleCup = 0x0a,\n        ColosseumDoubleLightCup = 0x0b,\n        ColosseumDoubleDoubleCup = 0x0c,\n        ColosseumDoubleOtherCup = 0x0d,\n\n        ColosseumMulti = 0x0e,\n\n        BattleTowerSingle = 0x0f,\n        BattleTowerDouble = 0x10,\n        BattleTowerMulti = 0x11,\n\n        BattleFactoryLv50Single = 0x12,\n        BattleFactoryLv50Double = 0x13,\n        BattleFactoryLv50Multi = 0x14,\n\n        BattleFactoryOpenSingle = 0x15,\n        BattleFactoryOpenDouble = 0x16,\n        BattleFactoryOpenMulti = 0x17,\n\n        BattleHallSingle = 0x18,\n        BattleHallDouble = 0x19,\n        BattleHallMulti = 0x1a,\n\n        BattleCastleSingle = 0x1b,\n        BattleCastleDouble = 0x1c,\n        BattleCastleMulti = 0x1d,\n\n        BattleArcadeSingle = 0x1e,\n        BattleArcadeDouble = 0x1f,\n        BattleArcadeMulti = 0x20,\n\n        SearchColosseumSingleNoRestrictions = 0xfa,\n        SearchColosseumSingleCupMatch = 0xfb,\n        SearchColosseumDoubleNoRestrictions = 0xfc,\n        SearchColosseumDoubleCupMatch = 0xfd,\n        SearchNoBattleFrontier = 0xfe,\n        SearchLatest30 = 0xff,\n    }\n\n    public enum BattleVideoRankings4 : uint\n    {\n        None = 0x00000000,\n        Colosseum = 0x00000001,\n        BattleFrontier = 0x00000002,\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleVideoHeader5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleVideoHeader5\n    {\n        public BattleVideoHeader5()\n        {\n        }\n\n        public BattleVideoHeader5(int pid, ulong serial_number, byte[] data)\n        {\n            if (data.Length != 196) throw new ArgumentException(\"Battle video header data must be 196 bytes.\");\n\n            PID = pid;\n            SerialNumber = serial_number;\n            Data = data;\n        }\n\n        // todo: encapsulate these so calculated fields are always correct\n        public int PID;\n        public ulong SerialNumber;\n        public byte[] Data;\n\n        public ushort Streak\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 0xa4);\n            }\n        }\n\n        public ushort[] Party\n        {\n            get\n            {\n                ushort[] result = new ushort[12];\n                for (int x = 0; x < result.Length; x++)\n                {\n                    result[x] = BitConverter.ToUInt16(Data, 0x80 + x * 2);\n                }\n                return result;\n            }\n        }\n\n        public byte[] TrainerName\n        {\n            get\n            {\n                byte[] result = new byte[16];\n                Array.Copy(Data, 0, result, 0, 16);\n                return result;\n            }\n        }\n\n        public BattleVideoMetagames5 Metagame\n        {\n            get\n            {\n                return (BattleVideoMetagames5)Data[0xa6];\n            }\n        }\n\n        public byte Country\n        {\n            get\n            {\n                return Data[0x17];\n            }\n        }\n\n        public byte Region\n        {\n            get\n            {\n                return Data[0x18];\n            }\n        }\n\n        public BattleVideoHeader5 Clone()\n        {\n            return new BattleVideoHeader5(PID, SerialNumber, Data.ToArray());\n        }\n    }\n\n    public enum BattleVideoMetagames5 : byte\n    {\n        ColosseumSingleNoLauncher = 0x18,\n        ColosseumDoubleNoLauncher = 0x19,\n        ColosseumTripleNoLauncher = 0x1a,\n        ColosseumRotationNoLauncher = 0x1b,\n        ColosseumMultiNoLauncher = 0x1c,\n\n        ColosseumSingleLauncher = 0x98,\n        ColosseumDoubleLauncher = 0x99,\n        ColosseumTripleLauncher = 0x9a,\n        ColosseumRotationLauncher = 0x9b,\n        ColosseumMultiLauncher = 0x9c,\n\n        BattleSubwaySingle = 0x00,\n        BattleSubwayDouble = 0x01,\n        BattleSubwayMulti = 0x04,\n\n        RandomMatchupSingle = 0x28,\n        RandomMatchupDouble = 0x29,\n        RandomMatchupTriple = 0x2a,\n        RandomMatchupRotation = 0x2b,\n        RandomMatchupLauncher = 0xaa,\n\n        RatingSingle = 0x68,\n        RatingDouble = 0x69,\n        RatingTriple = 0x6a,\n        RatingRotation = 0x6b,\n\n        BattleCompetitionSingle = 0x38,\n        BattleCompetitionDouble = 0x39,\n        BattleCompetitionTriple = 0x3a,\n        BattleCompetitionRotation = 0x3b,\n\n        SearchBattleCompetition = 0x38,\n        // This is not a legal value in either a search or a record.\n        // I'm using it to indicate that no search is being done\n        // (byte 0x148 in the search is 0).\n        // Otherwise, the value 00 collides with Battle Subway Single\n        // which is a legitimate search.\n        SearchNone = 0xff,\n    }\n\n    public enum BattleVideoRankings5 : uint\n    {\n        None = 0x00000000,\n        Newest30 = 0x00000001,\n        LinkBattles = 0x00000003,\n        SubwayBattles = 0x00000002,\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleVideoRecord4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleVideoRecord4\n    {\n        public BattleVideoRecord4()\n        {\n        }\n\n        public BattleVideoRecord4(int pid, ulong serial_number, byte[] data)\n        {\n            if (data.Length != 7500) throw new ArgumentException(\"Battle video data must be 7500 bytes.\");\n\n            byte[] data_head = new byte[228];\n            byte[] data_main = new byte[7272];\n\n            Array.Copy(data, 0, data_head, 0, 228);\n            Array.Copy(data, 228, data_main, 0, 7272);\n\n            PID = pid;\n            SerialNumber = serial_number;\n            Header = new BattleVideoHeader4(pid, serial_number, data_head);\n            Data = data_main;\n        }\n\n        public BattleVideoRecord4(int pid, ulong serial_number, BattleVideoHeader4 header, byte[] data_main)\n        {\n            if (data_main.Length != 7272) throw new ArgumentException(\"Battle video main data must be 7272 bytes.\");\n\n            PID = pid;\n            SerialNumber = serial_number;\n            Header = header;\n            Data = data_main;\n        }\n\n        public int PID;\n        public ulong SerialNumber;\n        public BattleVideoHeader4 Header;\n        public byte[] Data;\n\n        public BattleVideoRecord4 Clone()\n        {\n            return new BattleVideoRecord4(PID, SerialNumber, Header.Clone(), Data.ToArray());\n        }\n\n        public byte[] Save()\n        {\n            byte[] result = new byte[7500];\n            Array.Copy(Header.Data, 0, result, 0, 228);\n            Array.Copy(Data, 228, result, 0, 7272);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BattleVideoRecord5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BattleVideoRecord5\n    {\n        public BattleVideoRecord5()\n        {\n        }\n\n        public BattleVideoRecord5(int pid, ulong serial_number, byte[] data)\n        {\n            if (data.Length != 6308) throw new ArgumentException(\"Battle video data must be 6308 bytes.\");\n\n            byte[] data_head = new byte[196];\n            byte[] data_main = new byte[6112];\n\n            Array.Copy(data, 0, data_head, 0, 196);\n            Array.Copy(data, 196, data_main, 0, 6112);\n\n            PID = pid;\n            SerialNumber = serial_number;\n            Header = new BattleVideoHeader5(pid, serial_number, data_head);\n            Data = data_main;\n        }\n\n        public BattleVideoRecord5(int pid, ulong serial_number, BattleVideoHeader5 header, byte[] data_main)\n        {\n            if (data_main.Length != 6112) throw new ArgumentException(\"Battle video main data must be 6112 bytes.\");\n\n            PID = pid;\n            SerialNumber = serial_number;\n            Header = header;\n            Data = data_main;\n        }\n\n        public int PID;\n        public ulong SerialNumber;\n        public BattleVideoHeader5 Header;\n        public byte[] Data;\n\n        public BattleVideoRecord5 Clone()\n        {\n            return new BattleVideoRecord5(PID, SerialNumber, Header.Clone(), Data.ToArray());\n        }\n\n        public byte[] Save()\n        {\n            byte[] result = new byte[6308];\n            Array.Copy(Header.Data, 0, result, 0, 196);\n            Array.Copy(Data, 196, result, 0, 6112);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/BoxRecord4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class BoxRecord4 : BinarySerializableBase\n    {\n        public BoxRecord4()\n        {\n        }\n\n        public BoxRecord4(int pid, BoxLabels4 label, ulong serial_number, BinaryReader data)\n            : base()\n        {\n            PID = pid;\n            Label = label;\n            SerialNumber = serial_number;\n            Load(data);\n        }\n\n        public BoxRecord4(int pid, BoxLabels4 label, ulong serial_number, byte[] data)\n            : base()\n        {\n            PID = pid;\n            Label = label;\n            SerialNumber = serial_number;\n            Load(data);\n        }\n\n        public BoxRecord4(int pid, BoxLabels4 label, ulong serial_number, byte[] data, int offset)\n            : base()\n        {\n            PID = pid;\n            Label = label;\n            SerialNumber = serial_number;\n            Load(data, offset);\n        }\n\n        public int PID { get; set; }\n        public BoxLabels4 Label { get; set; }\n        public ulong SerialNumber { get; set; }\n\n        private byte[] m_data;\n        public byte[] Data\n        {\n            get\n            {\n                return m_data;\n            }\n            set\n            {\n                if (m_data == value) return;\n                if (value == null)\n                {\n                    m_data = null;\n                    return;\n                }\n\n                if (value.Length != 540) throw new ArgumentException(\"Box data must be 540 bytes.\");\n                m_data = value.ToArray();\n            }\n        }\n\n        public override int Size\n        {\n            get \n            {\n                return 540;\n            }\n        }\n\n        protected override void Load(System.IO.BinaryReader reader)\n        {\n            m_data = reader.ReadBytes(540);\n        }\n\n        protected override void Save(System.IO.BinaryWriter writer)\n        {\n            writer.Write(m_data);\n        }\n\n        public BoxRecord4 Clone()\n        {\n            return new BoxRecord4(PID, Label, SerialNumber, Data);\n        }\n    }\n\n    public enum BoxLabels4 : int\n    {\n        Favorite = 0x00,\n        Cool = 0x01,\n        Cute = 0x02,\n        Suggested = 0x03,\n        Fun = 0x04,\n        Select = 0x05\n    }\n}\n"
  },
  {
    "path": "library/Wfc/DressupRecord4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class DressupRecord4 : BinarySerializableBase\n    {\n        public DressupRecord4()\n        {\n        }\n\n        public DressupRecord4(int pid, ulong serial_number, BinaryReader data)\n            : base()\n        {\n            PID = pid;\n            SerialNumber = serial_number;\n            Load(data);\n        }\n\n        public DressupRecord4(int pid, ulong serial_number, byte[] data)\n            : base()\n        {\n            PID = pid;\n            SerialNumber = serial_number;\n            Load(data);\n        }\n\n        public DressupRecord4(int pid, ulong serial_number, byte[] data, int offset)\n            : base()\n        {\n            PID = pid;\n            SerialNumber = serial_number;\n            Load(data, offset);\n        }\n\n        public int PID { get; set; }\n        public ulong SerialNumber { get; set; }\n\n        // todo: Document this data structure.\n        // List of decorations: https://projectpokemon.org/rawdb/diamond/msg/338.php\n        private byte[] m_data;\n        public byte[] Data\n        {\n            get\n            {\n                return m_data;\n            }\n            set\n            {\n                if (m_data == value) return;\n                if (value == null)\n                {\n                    m_data = null;\n                    return;\n                }\n\n                if (value.Length != 224) throw new ArgumentException(\"Dressup data must be 224 bytes.\");\n                m_data = value.ToArray();\n            }\n        }\n\n        public ushort Species\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 0x8c);\n            }\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 224;\n            }\n        }\n\n        protected override void Load(System.IO.BinaryReader reader)\n        {\n            m_data = reader.ReadBytes(224);\n        }\n\n        protected override void Save(System.IO.BinaryWriter writer)\n        {\n            writer.Write(m_data);\n        }\n\n        public DressupRecord4 Clone()\n        {\n            return new DressupRecord4(PID, SerialNumber, Data);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/GtsRecord4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Runtime.Serialization;\nusing System.IO;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing System.Collections.ObjectModel;\n\nnamespace PkmnFoundations.Wfc\n{\n    /// <summary>\n    /// Structure used to represent Pokémon on the GTS in Generation IV.\n    /// Includes a Pokémon box structure and metadata related to the trainer\n    /// and request.\n    /// </summary>\n    public class GtsRecord4 : GtsRecordBase, IEquatable<GtsRecord4>\n    {\n        public GtsRecord4(Pokedex.Pokedex pokedex)\n            : base(pokedex)\n        {\n            Initialize();\n        }\n\n        public GtsRecord4(Pokedex.Pokedex pokedex, BinaryReader data)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public GtsRecord4(Pokedex.Pokedex pokedex, byte[] data)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public GtsRecord4(Pokedex.Pokedex pokedex, byte[] data, int offset)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data, offset);\n        }\n\n        private void Initialize()\n        {\n\n        }\n\n        /// <summary>\n        /// Obfuscated Pokémon (pkm) data. 236 bytes\n        /// </summary>\n        public IList<byte> Data\n        {\n            get\n            {\n                return m_data_readonly;\n            }\n            set\n            {\n                DataActual = value.ToArray();\n            }\n        }\n\n        private byte[] DataActual\n        {\n            get\n            {\n                return m_data;\n            }\n            set\n            {\n                if (value == null)\n                {\n                    m_data = null;\n                    m_data_readonly = null;\n                    m_pokemon = null;\n                    return;\n                }\n                if (value.Length != 0xEC) throw new ArgumentException(\"PKM length is incorrect\");\n                m_data = value;\n                m_data_readonly = new ReadOnlyCollection<byte>(m_data);\n                m_pokemon = null;\n            }\n        }\n        private byte[] m_data;\n        private ReadOnlyCollection<byte> m_data_readonly;\n        private PokemonParty4 m_pokemon;\n\n        public override PokemonPartyBase Pokemon\n        {\n            get\n            {\n                if (DataActual == null || m_pokedex == null)\n                    return null;\n                if (m_pokemon == null)\n                    m_pokemon = new PokemonParty4(m_pokedex, DataActual);\n\n                return m_pokemon;\n            }\n        }\n\n        public byte Unknown1;\n        public byte Unknown2;\n\n        /// <summary>\n        /// 16 bytes\n        /// </summary>\n        public EncodedString4 TrainerNameEncoded;\n\n        public override string TrainerName\n        {\n            get\n            {\n                if (TrainerNameEncoded == null) return null;\n                return TrainerNameEncoded.Text;\n            }\n            set\n            {\n                if (TrainerNameEncoded == null) TrainerNameEncoded = new EncodedString4(value, 16);\n                else TrainerNameEncoded.Text = value;\n            }\n        }\n\n        public ushort TrainerOT;\n\n        protected override void Save(BinaryWriter writer)\n        {\n            // todo: enclose in properties and validate these when assigning.\n            if (TrainerNameEncoded.RawData.Length != 0x10) throw new FormatException(\"Trainer name length is incorrect\");\n\n            writer.Write(DataActual, 0, 0xec);                           // 0000\n            writer.Write(Species);                                       // 00EC\n            writer.Write((byte)Gender);                                  // 00EE\n            writer.Write(Level);                                         // 00EF\n            writer.Write(RequestedSpecies);                              // 00F0\n            writer.Write((byte)RequestedGender);                         // 00F2\n            writer.Write(RequestedMinLevel);                             // 00F3\n            writer.Write(RequestedMaxLevel);                             // 00F4\n            writer.Write(Unknown1);                                      // 00F5\n            writer.Write((byte)TrainerGender);                           // 00F6\n            writer.Write(Unknown2);                                      // 00F7\n            writer.Write(DateToTimestamp(TimeDeposited));                // 00F8\n            writer.Write(DateToTimestamp(TimeExchanged));                // 0100\n            writer.Write(PID);                                           // 0108\n            writer.Write(TrainerNameEncoded.RawData, 0, 0x10);           // 010C\n            writer.Write(TrainerOT);                                     // 011C\n            writer.Write(TrainerCountry);                                // 011E\n            writer.Write(TrainerRegion);                                 // 011F\n            writer.Write(TrainerClass);                                  // 0120\n            writer.Write(IsExchanged);                                   // 0121\n            writer.Write((byte)TrainerVersion);                          // 0122\n            writer.Write((byte)TrainerLanguage);                         // 0123\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            DataActual = reader.ReadBytes(0xec);                         // 0000\n            Species = reader.ReadUInt16();                               // 00EC\n            Gender = (Genders)reader.ReadByte();                         // 00EE\n            Level = reader.ReadByte();                                   // 00EF\n            RequestedSpecies = reader.ReadUInt16();                      // 00F0\n            RequestedGender = (Genders)reader.ReadByte();                // 00F2\n            RequestedMinLevel = reader.ReadByte();                       // 00F3\n            RequestedMaxLevel = reader.ReadByte();                       // 00F4\n            Unknown1 = reader.ReadByte();                                // 00F5\n            TrainerGender = (TrainerGenders)reader.ReadByte();           // 00F6\n            Unknown2 = reader.ReadByte();                                // 00F7\n            TimeDeposited = TimestampToDate(reader.ReadUInt64());        // 00F8\n            TimeExchanged = TimestampToDate(reader.ReadUInt64());        // 0100\n            PID = reader.ReadInt32();                                    // 0108\n            TrainerNameEncoded = new EncodedString4(reader.ReadBytes(0x10)); // 010C\n            TrainerOT = reader.ReadUInt16();                             // 011C\n            TrainerCountry = reader.ReadByte();                          // 011E\n            TrainerRegion = reader.ReadByte();                           // 011F\n            TrainerClass = reader.ReadByte();                            // 0120\n            IsExchanged = reader.ReadByte();                             // 0121\n            TrainerVersion = (Versions)reader.ReadByte();                // 0122\n            TrainerLanguage = (Languages)reader.ReadByte();              // 0123\n        }\n\n        public override int Size\n        {\n            get { return 292; }\n        }\n\n        public GtsRecord4 Clone()\n        {\n            // todo: I am not very efficient\n            return new GtsRecord4(m_pokedex, Save());\n        }\n\n        public override bool Validate()\n        {\n            if (!base.Validate()) return false;\n\n            // Forbid ball capsules. Credit: Gannio\n            if (((PokemonParty4)Pokemon).CapsuleIndex != 0) return false;\n            if (!TrainerNameEncoded.IsValid) return false;\n\n            return true;\n        }\n\n        public bool CanTrade(GtsRecord4 other)\n        {\n            if (IsExchanged != 0 || other.IsExchanged != 0) return false;\n\n            if (Species != other.RequestedSpecies) return false;\n            if (other.RequestedGender != Genders.Either && Gender != other.RequestedGender) return false;\n            if (!CheckLevels(other.RequestedMinLevel, other.RequestedMaxLevel, Level)) return false;\n            \n            if (RequestedSpecies != other.Species) return false;\n            if (RequestedGender != Genders.Either && other.Gender != RequestedGender) return false;\n            if (!CheckLevels(RequestedMinLevel, RequestedMaxLevel, other.Level)) return false;\n\n            return true;\n        }\n\n        public void FlagTraded(GtsRecord4 other)\n        {\n            Species = other.Species;\n            Gender = other.Gender;\n            Level = other.Level;\n            RequestedSpecies = other.RequestedSpecies;\n            RequestedGender = other.RequestedGender;\n            RequestedMinLevel = other.RequestedMinLevel;\n            RequestedMaxLevel = other.RequestedMaxLevel;\n            TimeDeposited = other.TimeDeposited;\n            TimeExchanged = DateTime.UtcNow;\n            PID = other.PID;\n            IsExchanged = 0x01;\n        }\n\n        public override TrainerProfileBase ExtrapolateProfile()\n        {\n            TrainerProfile4 result = new TrainerProfile4();\n            result.PID = PID;\n            result.Version = TrainerVersion;\n            result.Language = TrainerLanguage;\n            result.Country = TrainerCountry;\n            result.Region = TrainerRegion;\n            result.OT = TrainerOT;\n            result.Name = TrainerNameEncoded.Clone();\n\n            return result;\n        }\n\n        public static bool operator ==(GtsRecord4 a, GtsRecord4 b)\n        {\n            if ((object)a == null && (object)b == null) return true;\n            if ((object)a == null || (object)b == null) return false;\n            // todo: optimize me\n            return a.Save().SequenceEqual(b.Save());\n        }\n\n        public static bool operator !=(GtsRecord4 a, GtsRecord4 b)\n        {\n            return !(a == b);\n        }\n\n        public override bool Equals(object obj)\n        {\n            return this.Equals(obj as GtsRecord4);\n        }\n\n        public bool Equals(GtsRecord4 other)\n        {\n            return this == other;\n        }\n\n        public override int GetHashCode()\n        {\n            return ((int)DateToBinary(TimeDeposited) + (int)DateToBinary(TimeExchanged)) ^ PID;\n        }\n\n        internal static long DateToBinary(DateTime ? dt)\n        {\n            if (dt == null) return 0L;\n            return ((DateTime)dt).ToBinary();\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/GtsRecord5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Runtime.Serialization;\nusing System.IO;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing System.Collections.ObjectModel;\n\nnamespace PkmnFoundations.Wfc\n{\n    /// <summary>\n    /// Structure used to represent Pokémon on the GTS in Generation V.\n    /// Includes a Pokémon box structure and metadata related to the trainer\n    /// and request.\n    /// </summary>\n    public class GtsRecord5 : GtsRecordBase, IEquatable<GtsRecord5>\n    {\n        public GtsRecord5(Pokedex.Pokedex pokedex)\n            : base(pokedex)\n        {\n            Initialize();\n        }\n\n        public GtsRecord5(Pokedex.Pokedex pokedex, BinaryReader data)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public GtsRecord5(Pokedex.Pokedex pokedex, byte[] data)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data);\n        }\n\n        public GtsRecord5(Pokedex.Pokedex pokedex, byte[] data, int offset)\n            : base(pokedex)\n        {\n            Initialize();\n            Load(data, offset);\n        }\n\n        private void Initialize()\n        {\n\n        }\n\n        /// <summary>\n        /// Obfuscated Pokémon (pkm) data. 236 bytes\n        /// </summary>\n        public IList<byte> Data\n        {\n            get\n            {\n                return m_data_readonly;\n            }\n            set\n            {\n                DataActual = value.ToArray();\n            }\n        }\n\n        private byte[] DataActual\n        {\n            get\n            {\n                return m_data;\n            }\n            set\n            {\n                if (value == null)\n                {\n                    m_data = null;\n                    m_data_readonly = null;\n                    m_pokemon = null;\n                    return;\n                }\n                if (value.Length != 0xEC) throw new ArgumentException(\"PKM length is incorrect\");\n                m_data = value;\n                m_data_readonly = new ReadOnlyCollection<byte>(m_data);\n                m_pokemon = null;\n            }\n        }\n        private byte[] m_data;\n        private ReadOnlyCollection<byte> m_data_readonly;\n        private PokemonParty5 m_pokemon;\n\n        public override PokemonPartyBase Pokemon\n        {\n            get\n            {\n                if (DataActual == null || m_pokedex == null)\n                    return null;\n                if (m_pokemon == null)\n                    m_pokemon = new PokemonParty5(m_pokedex, DataActual);\n\n                return m_pokemon;\n            }\n        }\n\n        public byte Unknown1;\n        public byte Unknown2;\n\n        public uint TrainerOT;\n\n        /// <summary>\n        /// 16 bytes\n        /// </summary>\n        public EncodedString5 TrainerNameEncoded;\n\n        public override string TrainerName\n        {\n            get\n            {\n                if (TrainerNameEncoded == null) return null;\n                return TrainerNameEncoded.Text;\n            }\n            set\n            {\n                if (TrainerNameEncoded == null) TrainerNameEncoded = new EncodedString5(value, 16);\n                else TrainerNameEncoded.Text = value;\n            }\n        }\n\n        public byte TrainerBadges; // speculative. Usually 8.\n        public byte TrainerUnityTower;\n\n        protected override void Save(BinaryWriter writer)\n        {\n            // todo: enclose in properties and validate these when assigning.\n            if (TrainerNameEncoded.RawData.Length != 0x10) throw new FormatException(\"Trainer name length is incorrect\");\n\n            writer.Write(DataActual, 0, 0xEC);                           // 0000\n            writer.Write(Species);                                       // 00EC\n            writer.Write((byte)Gender);                                  // 00EE\n            writer.Write(Level);                                         // 00EF\n            writer.Write(RequestedSpecies);                              // 00F0\n            writer.Write((byte)RequestedGender);                         // 00F2\n            writer.Write(RequestedMinLevel);                             // 00F3\n            writer.Write(RequestedMaxLevel);                             // 00F4\n            writer.Write(Unknown1);                                      // 00F5\n            writer.Write((byte)TrainerGender);                           // 00F6\n            writer.Write(Unknown2);                                      // 00F7\n            writer.Write(DateToTimestamp(TimeDeposited));                // 00F8\n            writer.Write(DateToTimestamp(TimeExchanged));                // 0100\n            writer.Write(PID);                                           // 0108\n            writer.Write(TrainerOT);                                     // 010C\n            writer.Write(TrainerNameEncoded.RawData, 0, 0x10);           // 0110\n            writer.Write(TrainerCountry);                                // 0120\n            writer.Write(TrainerRegion);                                 // 0121\n            writer.Write(TrainerClass);                                  // 0122\n            writer.Write(IsExchanged);                                   // 0123\n            writer.Write((byte)TrainerVersion);                          // 0124\n            writer.Write((byte)TrainerLanguage);                         // 0125\n            writer.Write(TrainerBadges);                                 // 0126\n            writer.Write(TrainerUnityTower);                             // 0127\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            DataActual = reader.ReadBytes(0xEC);                         // 0000\n            Species = reader.ReadUInt16();                               // 00EC\n            Gender = (Genders)reader.ReadByte();                         // 00EE\n            Level = reader.ReadByte();                                   // 00EF\n            RequestedSpecies = reader.ReadUInt16();                      // 00F0\n            RequestedGender = (Genders)reader.ReadByte();                // 00F2\n            RequestedMinLevel = reader.ReadByte();                       // 00F3\n            RequestedMaxLevel = reader.ReadByte();                       // 00F4\n            Unknown1 = reader.ReadByte();                                // 00F5\n            TrainerGender = (TrainerGenders)reader.ReadByte();           // 00F6\n            Unknown2 = reader.ReadByte();                                // 00F7\n            TimeDeposited = TimestampToDate(reader.ReadUInt64());        // 00F8\n            TimeExchanged = TimestampToDate(reader.ReadUInt64());        // 0100\n            PID = reader.ReadInt32();                                    // 0108\n            TrainerOT = reader.ReadUInt32();                             // 010C\n            TrainerNameEncoded = new EncodedString5(reader.ReadBytes(0x10)); // 0110\n            TrainerCountry = reader.ReadByte();                          // 0120\n            TrainerRegion = reader.ReadByte();                           // 0121\n            TrainerClass = reader.ReadByte();                            // 0122\n            IsExchanged = reader.ReadByte();                             // 0123\n            TrainerVersion = (Versions)reader.ReadByte();                // 0124\n            TrainerLanguage = (Languages)reader.ReadByte();              // 0125\n            TrainerBadges = reader.ReadByte();                           // 0126\n            TrainerUnityTower = reader.ReadByte();                       // 0127\n        }\n\n        public override int Size\n        {\n            get { return 296; }\n        }\n\n        public GtsRecord5 Clone()\n        {\n            // todo: I am not very efficient\n            return new GtsRecord5(m_pokedex, Save());\n        }\n\n        public override bool Validate()\n        {\n            if (!base.Validate()) return false;\n\n            if (!TrainerNameEncoded.IsValid) return false;\n\n            return true;\n        }\n\n        public bool CanTrade(GtsRecord5 other)\n        {\n            if (IsExchanged != 0 || other.IsExchanged != 0) return false;\n\n            if (Species != other.RequestedSpecies) return false;\n            if (other.RequestedGender != Genders.Either && Gender != other.RequestedGender) return false;\n            if (!CheckLevels(other.RequestedMinLevel, other.RequestedMaxLevel, Level)) return false;\n            \n            if (RequestedSpecies != other.Species) return false;\n            if (RequestedGender != Genders.Either && other.Gender != RequestedGender) return false;\n            if (!CheckLevels(RequestedMinLevel, RequestedMaxLevel, other.Level)) return false;\n\n            return true;\n        }\n\n        public void FlagTraded(GtsRecord5 other)\n        {\n            Species = other.Species;\n            Gender = other.Gender;\n            Level = other.Level;\n            RequestedSpecies = other.RequestedSpecies;\n            RequestedGender = other.RequestedGender;\n            RequestedMinLevel = other.RequestedMinLevel;\n            RequestedMaxLevel = other.RequestedMaxLevel;\n            TimeDeposited = other.TimeDeposited;\n            TimeExchanged = DateTime.UtcNow;\n            PID = other.PID;\n            IsExchanged = 0x01;\n        }\n\n        public override TrainerProfileBase ExtrapolateProfile()\n        {\n            TrainerProfile5 result = new TrainerProfile5();\n            result.PID = PID;\n            result.Version = TrainerVersion;\n            result.Language = TrainerLanguage;\n            result.Country = TrainerCountry;\n            result.Region = TrainerRegion;\n            result.OT = TrainerOT;\n            result.Name = TrainerNameEncoded.Clone();\n\n            return result;\n        }\n\n        public static bool operator ==(GtsRecord5 a, GtsRecord5 b)\n        {\n            if ((object)a == null && (object)b == null) return true;\n            if ((object)a == null || (object)b == null) return false;\n            // todo: optimize me\n            return a.Save().SequenceEqual(b.Save());\n        }\n\n        public static bool operator !=(GtsRecord5 a, GtsRecord5 b)\n        {\n            return !(a == b);\n        }\n\n        public override bool Equals(object obj)\n        {\n            return this.Equals(obj as GtsRecord5);\n        }\n\n        public bool Equals(GtsRecord5 other)\n        {\n            return this == other;\n        }\n\n        public override int GetHashCode()\n        {\n            return ((int)GtsRecord4.DateToBinary(TimeDeposited) + (int)GtsRecord4.DateToBinary(TimeExchanged)) ^ PID;\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/GtsRecordBase.cs",
    "content": "﻿using PkmnFoundations.Support;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\n\nnamespace PkmnFoundations.Wfc\n{\n    public abstract class GtsRecordBase : BinarySerializableBase\n    {\n        public GtsRecordBase(Pokedex.Pokedex pokedex) : base()\n        {\n            m_pokedex = pokedex;\n        }\n\n        protected Pokedex.Pokedex m_pokedex;\n        public Pokedex.Pokedex Pokedex\n        {\n            get\n            {\n                return m_pokedex;\n            }\n            set\n            {\n                m_pokedex = value;\n            }\n        }\n\n        public abstract PokemonPartyBase Pokemon\n        {\n            get;\n        }\n\n        /// <summary>\n        /// National Dex species number\n        /// </summary>\n        public ushort Species;\n\n        /// <summary>\n        /// Pokémon gender\n        /// </summary>\n        public Genders Gender;\n\n        /// <summary>\n        /// Pokémon level\n        /// </summary>\n        public byte Level;\n\n        /// <summary>\n        /// Requested National Dex species number\n        /// </summary>\n        public ushort RequestedSpecies;\n\n        public Genders RequestedGender;\n\n        public byte RequestedMinLevel;\n        public byte RequestedMaxLevel;\n\n        public TrainerGenders TrainerGender;\n\n        public DateTime? TimeDeposited;\n        public DateTime? TimeExchanged;\n\n        /// <summary>\n        /// User ID of the player (not Personality Value)\n        /// </summary>\n        public int PID;\n\n        public byte TrainerCountry;\n        public byte TrainerRegion;\n        public byte TrainerClass;\n\n        public abstract string TrainerName\n        {\n            get;\n            set;\n        }\n\n        public byte IsExchanged;\n\n        public Versions TrainerVersion;\n        public Languages TrainerLanguage;\n\n        public ulong TradeId;\n\n        public virtual bool Validate()\n        {\n            // note that IsExchanged only becomes true after FlagTraded is\n            // called, which currently happens right as the exchanged record\n            // is written to the database. So both post.asp and exchange.asp\n            // validation is with IsExchanged == 0.\n            bool isExchanged = IsExchanged != 0;\n            ushort species = isExchanged ? RequestedSpecies : Species;\n            Genders gender = isExchanged ? RequestedGender : Gender;\n            byte minLevel = isExchanged ? RequestedMinLevel : Level;\n            byte maxLevel = isExchanged ? RequestedMaxLevel : Level;\n\n            PokemonPartyBase thePokemon = Pokemon;\n            if (thePokemon.IsEgg) return false;\n            if (thePokemon.SpeciesID != species) return false;\n            if (gender != Genders.Either && thePokemon.Gender != gender) return false;\n            if (!CheckLevels(minLevel, maxLevel, thePokemon.Level)) return false;\n\n            // todo: move these checks to PokemonBase.Validate()\n            if (thePokemon.IsBadEgg) return false;\n            if (thePokemon.Level > 100) return false;\n            if (thePokemon.EVs.ToArray().Select(i => (int)i).Sum() > 510) return false;\n\n            ValidationSummary summary = Pokemon.Validate();\n            if (!summary.IsValid) return false;\n\n            // pkhex check:\n            // https://github.com/mm201/pkmn-classic-framework/pull/71\n            //var decrypted = PKX.DecryptArray45(DataActual);\n            //var la = new LegalityAnalysis(decrypted);\n            //report = la.Report();\n            //if (report != \"Legal!\") return false;\n\n            return true;\n        }\n\n        public abstract TrainerProfileBase ExtrapolateProfile();\n\n        public static bool CheckLevels(byte min, byte max, byte other)\n        {\n            if (max == 0) max = 255;\n            return other >= min && other <= max;\n        }\n\n        public static ulong DateToTimestamp(DateTime? date)\n        {\n            if (date == null) return 0;\n            DateTime date2 = (DateTime)date;\n\n            return (ulong)(date2.Year & 0xffff) << 0x30\n                | (ulong)(date2.Month & 0xff) << 0x28\n                | (ulong)(date2.Day & 0xff) << 0x20\n                | (ulong)(date2.Hour & 0xff) << 0x18\n                | (ulong)(date2.Minute & 0xff) << 0x10\n                | (ulong)(date2.Second & 0xff) << 0x08;\n        }\n\n        public static DateTime? TimestampToDate(ulong timestamp)\n        {\n            if (timestamp == 0) return null;\n\n            ushort year = (ushort)((timestamp >> 0x30) & 0xffff);\n            byte month = (byte)((timestamp >> 0x28) & 0xff);\n            byte day = (byte)((timestamp >> 0x20) & 0xff);\n            byte hour = (byte)((timestamp >> 0x18) & 0xff);\n            byte minute = (byte)((timestamp >> 0x10) & 0xff);\n            byte second = (byte)((timestamp >> 0x08) & 0xff);\n            //byte fractional = (byte)(timestamp & 0xff); // always 0\n\n            try\n            {\n                return new DateTime(year, month, day, hour, minute, second);\n            }\n            catch (ArgumentOutOfRangeException)\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/MusicalRecord5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class MusicalRecord5 : BinarySerializableBase\n    {\n        public MusicalRecord5()\n        {\n        }\n\n        public MusicalRecord5(int pid, ulong serial_number, BinaryReader data)\n            : base()\n        {\n            PID = pid;\n            SerialNumber = serial_number;\n            Load(data);\n        }\n\n        public MusicalRecord5(int pid, ulong serial_number, byte[] data)\n            : base()\n        {\n            PID = pid;\n            SerialNumber = serial_number;\n            Load(data);\n        }\n\n        public MusicalRecord5(int pid, ulong serial_number, byte[] data, int offset)\n            : base()\n        {\n            PID = pid;\n            SerialNumber = serial_number;\n            Load(data, offset);\n        }\n\n        // todo: encapsulate these so calculated fields are always correct\n        public int PID { get; set; }\n        public ulong SerialNumber { get; set; }\n\n        private byte[] m_data;\n        public byte[] Data\n        {\n            get\n            {\n                // fixme: Participants don't update if the consumer modifies this array directly.\n                return m_data;\n            }\n            set\n            {\n                if (m_data == value) return;\n                if (value == null)\n                {\n                    m_data = null;\n                    return;\n                }\n\n                if (value.Length != 560) throw new ArgumentException(\"Musical data must be 560 bytes.\");\n                m_data = value.ToArray();\n                UpdateParticipants();\n            }\n        }\n\n        private MusicalParticipant5[] m_participants;\n        public MusicalParticipant5[] Participants\n        {\n            get\n            {\n                // fixme: Data doesn't update if the consumer modifies this array.\n                // todo: Split out participants from main data.\n                return m_participants;\n            }\n        }\n\n        public void UpdateParticipants()\n        {\n            if (m_data == null)\n            {\n                m_participants = null;\n                return;\n            }\n\n            m_participants = new MusicalParticipant5[4];\n            for (int x = 0; x < 4; x++)\n            {\n                Participants[x] = new MusicalParticipant5(m_data, x * 0x58 + 0x84);\n            }\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 560;\n            }\n        }\n\n        protected override void Load(System.IO.BinaryReader reader)\n        {\n            m_data = reader.ReadBytes(560);\n            UpdateParticipants();\n        }\n\n        protected override void Save(System.IO.BinaryWriter writer)\n        {\n            writer.Write(m_data);\n        }\n\n        public MusicalRecord5 Clone()\n        {\n            return new MusicalRecord5(PID, SerialNumber, Data);\n        }\n    }\n\n    public class MusicalParticipant5 : BinarySerializableBase\n    {\n        public MusicalParticipant5()\n        {\n        }\n\n        public MusicalParticipant5(BinaryReader data)\n            : base()\n        {\n            Load(data);\n        }\n\n        public MusicalParticipant5(byte[] data)\n            : base()\n        {\n            Load(data);\n        }\n\n        public MusicalParticipant5(byte[] data, int offset)\n            : base()\n        {\n            Load(data, offset);\n        }\n\n        private byte[] m_data;\n        public byte[] Data\n        {\n            get\n            {\n                return m_data;\n            }\n            set\n            {\n                if (m_data == value) return;\n                if (value == null)\n                {\n                    m_data = null;\n                    return;\n                }\n\n                if (value.Length != 88) throw new ArgumentException(\"Musical Participant data must be 88 bytes.\");\n                m_data = value.ToArray();\n            }\n        }\n\n        public ushort Species\n        {\n            get\n            {\n                return BitConverter.ToUInt16(Data, 0);\n            }\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 88;\n            }\n        }\n\n        protected override void Load(System.IO.BinaryReader reader)\n        {\n            m_data = reader.ReadBytes(88);\n        }\n\n        protected override void Save(System.IO.BinaryWriter writer)\n        {\n            writer.Write(m_data);\n        }\n\n        public MusicalParticipant5 Clone()\n        {\n            return new MusicalParticipant5(Data);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/PlazaQuestionnaire.cs",
    "content": "﻿using System;\nusing System.IO;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class PlazaQuestionnaire\n    {\n        public PlazaQuestion CurrentQuestion;\n        public PlazaQuestion LastWeeksQuestion;\n        private int[] lastWeeksResults;\n        public byte[] Unk;\n\n        public PlazaQuestionnaire(PlazaQuestion currentQuestion, PlazaQuestion lastQuestion, int[] results, byte[] unk)\n        {\n            CurrentQuestion = currentQuestion;\n            LastWeeksQuestion = lastQuestion;\n            LastWeeksResults = results;\n            Unk = unk;\n        }\n\n        public int[] LastWeeksResults\n        {\n            get\n            {\n                return lastWeeksResults;\n            }\n\n            set\n            {\n                if (value.Length != 3)\n                {\n                    throw new ArgumentException(\"Results must be 3 integers! which represent the total count of each answer!\");\n                }\n                lastWeeksResults = value;\n            }\n        }\n\n        public byte[] Save()\n        {\n            byte[] serialized = new byte[728];\n            MemoryStream ms = new MemoryStream(serialized);\n            // BinaryWriter uses little endian which is what we want.\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            writer.Write(CurrentQuestion.Save());\n            writer.Write(LastWeeksQuestion.Save());\n            foreach (int answer in LastWeeksResults)\n            {\n                writer.Write(answer);\n            }\n            writer.Write(Unk);\n\n            writer.Flush();\n            ms.Flush();\n            return serialized;\n        }\n\n        public static PlazaQuestionnaire Load(byte[] data, int start)\n        {\n            PlazaQuestion question = PlazaQuestion.Load(data, start);\n            PlazaQuestion lastWeeksQuestion = PlazaQuestion.Load(data, start + 352);\n            int[] lastResults = new int[3];\n\n            int dataIdx = 704;\n            for (byte idx = 0; idx < 3; ++idx)\n            {\n                lastResults[idx] = BitConverter.ToInt32(data, start + dataIdx);\n                dataIdx += 4;\n            }\n\n            return new PlazaQuestionnaire(\n                question,\n                lastWeeksQuestion,\n                lastResults,\n                new byte[] {\n                    data[start + dataIdx],\n                    data[start + dataIdx + 1],\n                    data[start + dataIdx + 2],\n                    data[start + dataIdx + 3],\n                    data[start + dataIdx + 4],\n                    data[start + dataIdx + 5],\n                    data[start + dataIdx + 6],\n                    data[start + dataIdx + 7],\n                    data[start + dataIdx + 8],\n                    data[start + dataIdx + 9],\n                    data[start + dataIdx + 10],\n                    data[start + dataIdx + 11],\n            });\n        }\n    }\n\n    /// <summary>\n    /// A question that can be sent to a client for answering within the Wifi-Plaza.\n    /// </summary>\n    public class PlazaQuestion\n    {\n        /// <summary>\n        /// Seems to be an internal ID as it's much higher than the week number should too the device\n        /// from the responses we have captured.\n        ///\n        /// For us we just keep the IDs the same.\n        ///\n        /// The ID needs to be bigger than 1000 to show 'custom user text'.\n        /// Otherwise, it overwrites the answers\n        /// </summary>\n        public int ID;\n\n        /// <summary>The public ID, or week number shown to devices.</summary>\n        public int PublicID;\n\n        /// <summary>\n        /// The sentence of the question, to actually show.\n        ///\n        /// Although the final question can't be more than 220 bytes encoded (110 characters since it's UTF-16).\n        /// Although in reality, each line can only be 35 characters before needing a 'new line', spanned across\n        /// two lines.\n        ///\n        /// Extra newlines are ignored.\n        /// </summary>\n        private string QuestionSentence;\n\n        /// <summary>\n        /// The three answers to the question.\n        ///\n        /// Each answer should be 36 bytes encoded (18 characters since it's UTF-16).\n        /// If there is an unprintable character, they repeat the last printable character.\n        /// Answers should not have newlines otherwise they can overwrite other lines.\n        /// </summary>\n        private string[] QuestionAnswers;\n\n        /// <summary>A series of unknown bytes.</summary>\n        public byte[] Unk;\n\n        /// <summary>If the question is a 'special' question, and the man in the plaza will say so.</summary>\n        public bool IsSpecial;\n\n        public PlazaQuestion(int id, string sentence, string[] answers, byte[] unk, bool isSpecial)\n        {\n            ID = id;\n            PublicID = id;\n            Unk = unk;\n            Sentence = sentence;\n            Answers = answers;\n            IsSpecial = isSpecial;\n        }\n\n        private PlazaQuestion(int id, int publicID, string sentence, string[] answers, byte[] unk, bool isSpecial)\n        {\n            ID = id;\n            PublicID = publicID;\n            Unk = unk;\n            QuestionSentence = sentence;\n            QuestionAnswers = answers;\n            IsSpecial = isSpecial;\n        }\n\n        public string Sentence\n        {\n            get\n            {\n                return QuestionSentence;\n            }\n\n            set\n            {\n                // TODO add some validation on max length here.\n                QuestionSentence = value;\n            }\n        }\n\n        public string[] Answers\n        {\n            get\n            {\n                return QuestionAnswers;\n            }\n\n            set\n            {\n                if (value.Length != 3)\n                {\n                    throw new ArgumentException(\"You MUST supply 3 answers for a particular question!\");\n                }\n                // TODO validate encoded size\n                QuestionAnswers = value;\n            }\n        }\n\n        public byte[] Save()\n        {\n            byte[] serialized = new byte[352];\n            MemoryStream ms = new MemoryStream(serialized);\n            // BinaryWriter uses little endian which is what we want.\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            writer.Write(ID);\n            writer.Write(PublicID);\n\n            byte[] encodedQuestion = Support.EncodedString4.EncodeString_impl(QuestionSentence, 220);\n            writer.Write(encodedQuestion);\n            foreach (string answer in QuestionAnswers)\n            {\n                byte[] encodedAnswer = Support.EncodedString4.EncodeString_impl(answer, 36);\n                writer.Write(encodedAnswer);\n            }\n            writer.Write(Unk);\n            writer.Write((int)(IsSpecial ? 1 : 0));\n\n            writer.Flush();\n            ms.Flush();\n            return serialized;\n        }\n\n        public static PlazaQuestion Load(byte[] data, int start)\n        {\n            int internalID = BitConverter.ToInt32(data, start);\n            int publicID = BitConverter.ToInt32(data, start + 4);\n\n            byte[] questionBytes = new byte[220];\n            Array.Copy(data, 8 + start, questionBytes, 0, 220);\n            string question = Support.EncodedString4.DecodeString_impl(questionBytes);\n\n            string[] answers = new string[3];\n            int dataIdx = 228 + start;\n            for (byte idx = 0; idx < 3; idx++)\n            {\n                byte[] answerBytes = new byte[36];\n                Array.Copy(data, dataIdx, answerBytes, 0, 36);\n                answers[idx] = Support.EncodedString4.DecodeString_impl(answerBytes);\n                dataIdx += 36;\n            }\n\n            byte[] unk = new byte[] {\ndata[start + 336], data[start + 337], data[start + 338], data[start + 339], data[start + 340],\ndata[start + 341], data[start + 342], data[start + 343], data[start + 344], data[start + 345],\ndata[start + 346], data[start + 347],\n};\n            bool isSpecial = BitConverter.ToInt32(data, start + 348) != 0;\n\n            return new PlazaQuestion(internalID, publicID, question, answers, unk, isSpecial);\n        }\n    }\n\n    public class SubmittedQuestionnaire\n    {\n        public int ID;\n        public int PublicID;\n        private int answerNo;\n        public uint OT;\n        public Structures.TrainerGenders TrainerGender;\n        public uint Country;\n        public uint Region;\n\n        public SubmittedQuestionnaire(int id, int publicID, int answerNumber, uint ot, Structures.TrainerGenders gender, uint country, uint region)\n        {\n            ID = id;\n            PublicID = publicID;\n            AnswerNumber = answerNumber;\n            OT = ot;\n            TrainerGender = gender;\n            Country = country;\n            Region = region;\n        }\n\n        public int AnswerNumber\n        {\n            get\n            {\n                return answerNo;\n            }\n\n            set\n            {\n                if (value > 3 || value < 0)\n                {\n                    throw new ArgumentException(\"Answer can only be 0-3!\");\n                }\n                answerNo = value;\n            }\n        }\n\n        public byte[] Save()\n        {\n            byte[] serialized = new byte[24];\n            MemoryStream ms = new MemoryStream(serialized);\n            // BinaryWriter uses little endian which is what we want.\n            BinaryWriter writer = new BinaryWriter(ms);\n\n            writer.Write(ID);\n            writer.Write(PublicID);\n            writer.Write(answerNo);\n            writer.Write(OT);\n            writer.Write((int)TrainerGender);\n            writer.Write(Country);\n            writer.Write(Region);\n\n            writer.Flush();\n            ms.Flush();\n            return serialized;\n        }\n\n        public static SubmittedQuestionnaire Load(byte[] data, int start)\n        {\n            int id = BitConverter.ToInt32(data, start);\n            int publicId = BitConverter.ToInt32(data, start + 4);\n            int answerNo = BitConverter.ToInt32(data, start + 8);\n            uint ot = BitConverter.ToUInt32(data, start + 12);\n            int genderNum = BitConverter.ToInt32(data, start + 16);\n            ushort country = BitConverter.ToUInt16(data, start + 20);\n            ushort region = BitConverter.ToUInt16(data, start + 22);\n\n            return new SubmittedQuestionnaire(id, publicId, answerNo, ot, (Structures.TrainerGenders)genderNum, country, region);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/PlazaSchedule.cs",
    "content": "﻿using PkmnFoundations.Support;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class PlazaSchedule : BinarySerializableBase\n    {\n        public PlazaSchedule()\n        {\n        }\n\n        public PlazaSchedule(uint duration, int unknown1, PlazaFootprintOptions footprintOptions,\n            PlazaRoomTypes roomType, PlazaSeasons season, PlazaScheduleEntry[] schedule)\n        {\n            Duration = duration;\n            Unknown1 = unknown1;\n            FootprintOptions = footprintOptions;\n            RoomType = roomType;\n            Season = season;\n            Schedule = schedule;\n        }\n\n        public PlazaSchedule(byte[] data)\n        {\n            Load(data);\n        }\n\n        public uint Duration; // Duration the room remains open for (seconds)\n        public int Unknown1; // Unknown, Mythra thinks it may be a random seed\n        public PlazaFootprintOptions FootprintOptions;\n        public PlazaRoomTypes RoomType;\n        public PlazaSeasons Season;\n        public PlazaScheduleEntry[] Schedule;\n\n        protected override void Load(BinaryReader reader)\n        {\n            Duration = reader.ReadUInt32();\n            Unknown1 = reader.ReadInt32();\n            FootprintOptions = (PlazaFootprintOptions)reader.ReadInt32();\n            RoomType = (PlazaRoomTypes)reader.ReadByte();\n            Season = (PlazaSeasons)reader.ReadByte();\n\n            ushort schedLength = reader.ReadUInt16();\n            Schedule = new PlazaScheduleEntry[schedLength];\n            for (int i = 0; i < schedLength; i++)\n            {\n                Schedule[i] = new PlazaScheduleEntry(reader.ReadBytes(8));\n            }\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write(Duration);\n            writer.Write(Unknown1);\n            writer.Write((int)FootprintOptions);\n            writer.Write((byte)RoomType);\n            writer.Write((byte)Season);\n\n            var schedule = Schedule;\n            writer.Write((ushort)schedule.Length);\n            foreach (var entry in schedule)\n            {\n                writer.Write(entry.Save());\n            }\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 16 + (Schedule?.Length ?? 0) * 8;\n            }\n        }\n    }\n\n    public class PlazaScheduleEntry : BinarySerializableBase\n    {\n        public PlazaScheduleEntry()\n        {\n        }\n\n        public PlazaScheduleEntry(int time, PlazaEventTypes eventType)\n        {\n            Time = time;\n            EventType = eventType;\n        }\n\n        public PlazaScheduleEntry(byte[] data)\n        {\n            Load(data);\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            Time = reader.ReadInt32();\n            EventType = (PlazaEventTypes)reader.ReadInt32();\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write(Time);\n            writer.Write((int)EventType);\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 8;\n            }\n        }\n\n        public int Time;\n        public PlazaEventTypes EventType;\n    }\n\n    public enum PlazaFootprintOptions : int\n    {\n        Normal = 0,\n        Arceus = 1,\n    }\n\n    public enum PlazaRoomTypes : byte\n    {\n        Fire = 0,\n        Water = 1,\n        Electric = 2,\n        Grass = 3,\n        Mew = 4,\n    }\n\n    public enum PlazaSeasons : byte\n    {\n        None = 0,\n        Spring = 1,\n        Summer = 2,\n        Fall = 3,\n        Winter = 4,\n    }\n\n    public enum PlazaEventTypes : int\n    {\n        // todo: Catalogue all of these and identify which ones are valid when.\n    }\n}\n"
  },
  {
    "path": "library/Wfc/TrainerProfile4.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class TrainerProfile4 : TrainerProfileBase\n    {\n        public TrainerProfile4() : base()\n        {\n        }\n\n        public TrainerProfile4(int pid, byte[] data, string ip_address) : base(pid, data, ip_address)\n        {\n        }\n\n        public EncodedString4 Name\n        {\n            get\n            {\n                return new EncodedString4(Data, 8, 16);\n            }\n            set\n            {\n                Array.Copy(value.RawData, 0, Data, 8, 16);\n            }\n        }\n\n        public TrainerProfile4 Clone()\n        {\n            return new TrainerProfile4(PID, Data.ToArray(), IpAddress);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/TrainerProfile5.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class TrainerProfile5 : TrainerProfileBase\n    {\n        public TrainerProfile5() : base()\n        {\n        }\n\n        public TrainerProfile5(int pid, byte[] data, string ip_address) : base(pid, data, ip_address)\n        {\n        }\n\n        public EncodedString5 Name\n        {\n            get\n            {\n                return new EncodedString5(Data, 8, 16);\n            }\n            set\n            {\n                Array.Copy(value.RawData, 0, Data, 8, 16);\n            }\n        }\n\n        public TrainerProfile5 Clone()\n        {\n            return new TrainerProfile5(PID, Data.ToArray(), IpAddress);\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/TrainerProfileBase.cs",
    "content": "﻿using PkmnFoundations.Structures;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public abstract class TrainerProfileBase\n    {\n        protected TrainerProfileBase()\n        {\n\n        }\n\n        protected TrainerProfileBase(int pid, byte[] data, string ip_address)\n        {\n            if (data == null) throw new ArgumentNullException(\"data\");\n            if (data.Length != 100) throw new ArgumentException(\"Profile data must be 100 bytes.\");\n\n            PID = pid;\n            Data = data;\n            IpAddress = ip_address;\n        }\n\n        // todo: encapsulate these so calculated fields are always correct\n        public int PID;\n        public byte[] Data; // 100 bytes\n        public string IpAddress;\n\n        public Versions Version\n        {\n            get\n            {\n                return (Versions)Data[0];\n            }\n            set\n            {\n                Data[0] = (byte)value;\n            }\n        }\n\n        public Languages Language\n        {\n            get\n            {\n                return (Languages)Data[1];\n            }\n            set\n            {\n                Data[1] = (byte)value;\n            }\n        }\n\n        public byte Country\n        {\n            get\n            {\n                return Data[2];\n            }\n            set\n            {\n                Data[2] = value;\n            }\n        }\n\n        public byte Region\n        {\n            get\n            {\n                return Data[3];\n            }\n            set\n            {\n                Data[3] = value;\n            }\n        }\n\n        public uint OT\n        {\n            get\n            {\n                return BitConverter.ToUInt32(Data, 4);\n            }\n            set\n            {\n                Array.Copy(BitConverter.GetBytes(value), 0, Data, 4, 4);\n            }\n        }\n\n        /*\n        // xxx: This would require C# 9 covariant return types to work. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/covariant-returns\n        public abstract EncodedStringBase Name\n        {\n            get;\n        }\n        */\n\n        public byte[] MacAddress\n        {\n            get\n            {\n                byte[] result = new byte[6];\n                Array.Copy(Data, 28, result, 0, 6);\n                return result;\n            }\n        }\n\n        public string Email\n        {\n            get\n            {\n                StreamReader br = new StreamReader(new MemoryStream(Data, 36, 56), Encoding.UTF8);\n                string result = br.ReadToEnd().TrimEnd('\\0');\n                br.Close();\n                return result;\n            }\n        }\n\n        public bool HasNotifications\n        {\n            get\n            {\n                return Data[92] != 0;\n            }\n        }\n\n        public short ClientSecret\n        {\n            get\n            {\n                return BitConverter.ToInt16(Data, 96);\n            }\n        }\n\n        public short MailSecret\n        {\n            get\n            {\n                return BitConverter.ToInt16(Data, 98);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/TrainerProfilePlaza.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class TrainerProfilePlaza\n    {\n        public TrainerProfilePlaza()\n        {\n\n        }\n\n        public TrainerProfilePlaza(int pid, byte[] data)\n        {\n            if (data.Length != 164) throw new ArgumentException(\"Profile data must be 164 bytes.\");\n\n            PID = pid;\n            Data = data;\n        }\n\n        // todo: encapsulate these so calculated fields are always correct\n        public int PID;\n        public byte[] Data; // 164 bytes\n\n        // todo: Add more fields\n        public Versions Version\n        {\n            get\n            {\n                return (Versions)Data[0x02];\n            }\n        }\n\n        public Languages Language\n        {\n            get\n            {\n                return (Languages)Data[0x03];\n            }\n        }\n\n        public byte[] MacAddress\n        {\n            get\n            {\n                byte[] result = new byte[6];\n                Array.Copy(Data, 0x04, result, 0, 0x06);\n                return result;\n            }\n        }\n\n        public uint OT\n        {\n            get\n            {\n                return BitConverter.ToUInt32(Data, 0x14);\n            }\n        }\n\n        public EncodedString4 Name\n        {\n            get\n            {\n                return new EncodedString4(Data, 0x18, 0x10);\n            }\n        }\n\n        // todo: favourite pokemon\n\n        public TrainerGenders Gender\n        {\n            get\n            {\n                return (TrainerGenders)Data[0x48];\n            }\n        }\n\n        public byte Country\n        {\n            get\n            {\n                return Data[0x4c];\n            }\n        }\n\n        public byte Region\n        {\n            get\n            {\n                return Data[0x4e];\n            }\n        }\n\n        public TrainerProfilePlaza Clone()\n        {\n            return new TrainerProfilePlaza(PID, Data.ToArray());\n        }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/TrainerRankings.cs",
    "content": "﻿using PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class TrainerRankingsReport\n    {\n        public TrainerRankingsReport(DateTime start_date, DateTime end_date, TrainerRankingsLeaderboardGroup[] leaderboards)\n        {\n            StartDate = start_date;\n            EndDate = end_date;\n            Leaderboards = leaderboards;\n        }\n\n        public DateTime StartDate { get; set; }\n        public DateTime EndDate { get; set; }\n\n        public TrainerRankingsLeaderboardGroup[] Leaderboards { get; set; }\n\n        public void PadResults()\n        {\n            foreach (var group in Leaderboards)\n            {\n                group.PadResults(StartDate);\n            }\n        }\n    }\n\n    public class TrainerRankingsLeaderboardGroup\n    {\n        public TrainerRankingsLeaderboardGroup(TrainerRankingsRecordTypes record_type, TrainerRankingsLeaderboard leaderboard_trainer_class,\n            TrainerRankingsLeaderboard leaderboard_birth_month, TrainerRankingsLeaderboard leaderboard_favourite_pokemon)\n        {\n            RecordType = record_type;\n            LeaderboardTrainerClass = leaderboard_trainer_class;\n            LeaderboardBirthMonth = leaderboard_birth_month;\n            LeaderboardFavouritePokemon = leaderboard_favourite_pokemon;\n        }\n\n        public TrainerRankingsRecordTypes RecordType { get; set; }\n\n        public TrainerRankingsLeaderboard LeaderboardTrainerClass { get; set; }\n        public TrainerRankingsLeaderboard LeaderboardBirthMonth { get; set; }\n        public TrainerRankingsLeaderboard LeaderboardFavouritePokemon { get; set; }\n\n        public void PadResults(DateTime startDate)\n        {\n            LeaderboardTrainerClass.PadResults(startDate, 16, 0, 16);\n            LeaderboardBirthMonth.PadResults(startDate, 12, 1, 12);\n            LeaderboardFavouritePokemon.PadResults(startDate, 20, 1, 493);\n        }\n    }\n\n    public class TrainerRankingsLeaderboard\n    {\n        public TrainerRankingsLeaderboard(TrainerRankingsTeamCategories team_category, TrainerRankingsLeaderboardEntry[] entries)\n        {\n            TeamCategory = team_category;\n            Entries = entries;\n        }\n\n        public TrainerRankingsTeamCategories TeamCategory { get; set; }\n\n        public TrainerRankingsLeaderboardEntry[] Entries { get; set; }\n\n        public void PadResults(DateTime startDate, int entryCount, int minTeam, int teamCount)\n        {\n            IEnumerable<TrainerRankingsLeaderboardEntry> working = Entries;\n            if (Entries.Length < teamCount)\n            {\n                var unusedValues = Enumerable.Range(minTeam, teamCount)\n                    .DrawWithoutReplacement(new Random((int)startDate.Ticks + 69420))\n                    .Take(entryCount)\n                    .Where(i => !Entries.Select(e => e.Team).Contains(i));\n\n                working = Entries.Concat(unusedValues.Select(i => new TrainerRankingsLeaderboardEntry(i, 0)));\n            }\n\n            // todo: shuffle ties maybe...\n\n            Entries = working.Take(entryCount).ToArray();\n        }\n    }\n\n    public class TrainerRankingsLeaderboardEntry\n    {\n        public TrainerRankingsLeaderboardEntry(int team, long score)\n        {\n            Team = team;\n            Score = score;\n        }\n\n        public int Team { get; set; }\n        public long Score { get; set; }\n    }\n\n    public enum TrainerRankingsRecordTypes : int\n    {\n        // todo: document these\n        //Invalid = 0x00, // Seems to trigger a 'there is no data' if used.\n        HallOfFameEntries = 0x01,\n        //Blank02 = 0x02,\n        //Blank03 = 0x03,\n        //Blank04 = 0x04,\n        //BattleTowerSingleBattleWinStreak = 0x05, // crashes when asked for\n        //Blank06 = 0x06, // crashes when asked for\n        //BattleTowerDoubleBattleWinStreak = 0x07, // crashes when asked for\n        //Blank08 = 0x08, // crashes when asked for\n        //BattleTowerMultiBattleWinStreak = 0x09, // crashes when asked for\n        //Blank0a = 0x0a, // crashes when asked for\n        //BattleTowerPartneredMultiBattleWinStreak = 0x0b, // crashes when asked for\n        //Blank0c = 0x0c, // crashes when asked for\n        //WiFiBattleTowerWinStreak = 0x0d, // crashes when asked for\n        //Blank0e = 0x0e, // crashes when asked for\n        ContestsEnteredAlone = 0x0f,\n        ContestsEnteredWithFriends = 0x10,\n        ContestsEnteredAloneAndWon = 0x11,\n        ContestsEnteredWithFriendsAndWon = 0x12,\n        //Blank13 = 0x13,\n        //Blank14 = 0x14,\n        //Blank15 = 0x15,\n        //Blank16 = 0x16,\n        //Blank17 = 0x17,\n        TimesWildPokemonFled = 0x18,\n        //Blank19 = 0x19,\n        BerriesPlanted = 0x1a,\n        StepsWalked = 0x1b,\n        TimesBattledWildPokemon = 0x1c,\n        TrainerBattlesExcludingUnionRoomAndFrontier = 0x1d,\n        PokemonCaught = 0x1e,\n        PokemonCaughtFishing = 0x1f,\n        EggsHatched = 0x20,\n        TimesOwnPokemonEvolved = 0x21,\n        GameCornerSlotJackpots = 0x22,\n        BattleTowerChallenges = 0x23, // seems to say Frontier on Platinum but Tower on HGSS\n        //Blank24 = 0x24,\n        //Blank25 = 0x25,\n        //Blank26 = 0x26,\n        //Blank27 = 0x27,\n        CompletedGtsPokemonTrades = 0x28,\n        BattlesWonOverNintendoWiFiConnection = 0x29,\n        //Blank2a = 0x2a,\n        BattlesTiedOverNintendoWiFiConnection = 0x2b,\n        BattlesWonAtTheBattleTower = 0x2c,\n        TotalMoneySpentShopping = 0x2d,\n        PokemonLeftWithTheDayCare = 0x2e,\n        PokemonDefeated = 0x2f,\n        PokemonOfferedOnGts = 0x30,\n        TimesPokemonWereTradedWithFriendsAtTheWiFiClub = 0x31,\n        TimesYouSignedYourTrainerCard = 0x32,\n        PokemonExtractedFromFossils = 0x33,\n        TimesFootprintsWereCheckedByDrFootstep = 0x34,\n        TimesMailWasSent = 0x35,\n        WildPokemonLuredUsingHoney = 0x36,\n        TimesYouTalkedToSomeoneInTheWiFiPlaza = 0x37,\n        NumberOfSpheresBuriedInTheUnderground = 0x38,\n        TimesWatchedTv = 0x39,\n        TimesPokemonWereGivenNicknames = 0x3a,\n        PremierBallsReceived = 0x3b,\n        ItemsFoundByPokemonInAmitySquare = 0x3c,\n        PoffinsCookedAlone = 0x3d,\n        PoffinsCookedWithFriends = 0x3e,\n        PokemonDressUpDataPhotosTaken = 0x3f,\n        BouldersPushedUsingTheHiddenMoveStrength = 0x40,\n        TimesMiredInASwamp = 0x41,\n        MatchesAgainstYourRivalAndGymLeadersAtTheBattleground = 0x42,\n        FacilitiesChallengedAtTheBattleFrontier = 0x43,\n        TimesYouMetTheFrontierBrains = 0x44,\n        WinsAtTheBattleFactory = 0x45,\n        WinsAtTheBattleCastle = 0x46,\n        WinsAtTheBattleHall = 0x47,\n        WinsAtTheBattleArcade = 0x48,\n        PokemonTradesAtTheBattleFactory = 0x49,\n        TotalCastlePointsEarnedAtTheBattleCastle = 0x4a,\n        WinsOverRank10PokemonAtTheBattleHall = 0x4b,\n        BattlePointsEarnedFromTheBattleArcadeGameBoard = 0x4c,\n        TotalBattlePointsWon = 0x4d,\n        TotalBattlePointsSpent = 0x4e,\n        WiFiPlazaGamesPlayed = 0x4f,\n        EggsTradedUsingSpinTrade = 0x50,\n        StarPiecesTradedAtTheFuegoIronworks = 0x51,\n        //BattlePointsEarnedFromTheBattleArcadeGameBoard52 = 0x52, // crashes when asked for\n        //ItemsAndBerriesEarnedFromTheBattleArcadeGameBoard53 = 0x53, // crashes when asked for\n        //TotalBattlePointsWon54 = 0x54, // crashes when asked for\n        //TotalBattlePointsSpent55 = 0x55, // crashes when asked for\n        //WinsInWiFiPlazaGames = 0x56, // crashes when asked for\n        //EggsTradedUsingSpinTrade57 = 0x57, // crashes when asked for\n        //Blank58 = 0x58, // crashes when asked for\n        //Blank59 = 0x59, // crashes when asked for\n        //Blank5a = 0x5a, // crashes when asked for\n        //BlueScreen = 0x5b\n    }\n\n    public enum TrainerClass : int\n    {\n        SchoolKidMale = 0x00,\n        BugCatcher = 0x01,\n        AceTrainerMale = 0x02,\n        Roughneck = 0x03,\n        RuinManiac = 0x04,\n        BlackBelt = 0x05,\n        RichBoy = 0x06,\n        PsychicMale = 0x07,\n        Lass = 0x08,\n        BattleGirl = 0x09,\n        Beauty = 0x0a,\n        AceTrainerFemale = 0x0b,\n        Idol = 0x0c,\n        Socialite = 0x0d,\n        Cowgirl = 0x0e,\n        Lady = 0x0f,\n        // Plato = 0x10, // ??? o_O\n        // 0x11 and up blue screen\n    }\n\n    public enum TrainerRankingsTeamCategories\n    {\n        BirthMonth, TrainerClass, FavouritePokemon\n    }\n\n    public class TrainerRankingsSubmission : BinarySerializableBase\n    {\n        public TrainerRankingsSubmission(int pid, Versions version,\n            Languages language, byte birth_month, byte trainer_class,\n            ushort favourite_pokemon, ushort unknown1, ushort unknown2,\n            ushort unknown3, TrainerRankingsSubmissionEntry[] entries)\n        {\n            PID = pid;\n            Version = version;\n            Language = language;\n            BirthMonth = birth_month;\n            TrainerClass = trainer_class;\n            FavouritePokemon = favourite_pokemon;\n            Unknown1 = unknown1; // usually 0 but I've seen the occasional 1.\n            Unknown2 = unknown2; // seems to max at 999. Probably play time in hours\n            Unknown3 = unknown3; // seems to max around 15163.\n            Entries = entries;\n        }\n\n        public TrainerRankingsSubmission(int pid, byte[] data, int offset)\n        {\n            PID = pid;\n            Load(data, offset);\n        }\n\n        public TrainerRankingsSubmission(int pid, byte[] data)\n        {\n            PID = pid;\n            Load(data);\n        }\n\n        public TrainerRankingsSubmission(int pid, BinaryReader reader)\n        {\n            PID = pid;\n            Load(reader);\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            // AdmiralCurtiss's request:\n            // 0140: 0c02050900000000 1800303b01000000\n            // 0150: 0100000028000000 0000000043000000\n            // 0160: 00000000\n\n            // Hikari's request:\n            // Platinum EN July [I forget] Gallade\n            // 0140: 0c02070bdb010000 e200350f01000000\n            // 0150: 0300000028000000 0800000043000000\n            // 0160: 28000000\n\n            // 140: Version\n            // 141: Language\n            // 142: Birth Month\n            // 143: Trainer Class\n            // 144-145: Favourite Pokémon\n            // 146-14b: Unknown\n            // 14c-163: Three record records\n\n            // Record record contains 4 bytes of category and 4 bytes of my score in the category.\n\n            Version = (Versions)reader.ReadByte();                   // 00-00\n            Language = (Languages)reader.ReadByte();                 // 01-01\n            BirthMonth = reader.ReadByte();                          // 02-02\n            TrainerClass = reader.ReadByte();                        // 03-03\n            FavouritePokemon = reader.ReadUInt16();                  // 04-05\n            Unknown1 = reader.ReadUInt16();                          // 06-07\n            Unknown2 = reader.ReadUInt16();                          // 08-09\n            Unknown3 = reader.ReadUInt16();                          // 0a-0b\n            var entries = new TrainerRankingsSubmissionEntry[3];\n            entries[0] = new TrainerRankingsSubmissionEntry(reader); // 0c-13\n            entries[1] = new TrainerRankingsSubmissionEntry(reader); // 14-1b\n            entries[2] = new TrainerRankingsSubmissionEntry(reader); // 1c-23\n            Entries = entries;\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write((byte)Version);     // 00-00\n            writer.Write((byte)Language);    // 01-01\n            writer.Write(BirthMonth);        // 02-02\n            writer.Write(TrainerClass);      // 03-03\n            writer.Write(FavouritePokemon);  // 04-05\n            writer.Write(Unknown1);          // 06-07\n            writer.Write(Unknown2);          // 08-09\n            writer.Write(Unknown3);          // 0a-0b\n            writer.Write(Entries[0].Save()); // 0c-13\n            writer.Write(Entries[1].Save()); // 14-1b\n            writer.Write(Entries[2].Save()); // 1c-23\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 36;\n            }\n        }\n\n        public int PID { get; set; }\n\n        public Versions Version { get; set; }\n        public Languages Language { get; set; }\n        public byte BirthMonth { get; set; }\n        public byte TrainerClass { get; set; }\n        public ushort FavouritePokemon { get; set; }\n\n        public ushort Unknown1 { get; set; }\n        public ushort Unknown2 { get; set; }\n        public ushort Unknown3 { get; set; }\n\n        private TrainerRankingsSubmissionEntry[] m_entries;\n        public TrainerRankingsSubmissionEntry[] Entries\n        {\n            get\n            {\n                return m_entries;\n            }\n            set\n            {\n                if (value == null) throw new ArgumentNullException();\n                if (value.Length != 3) throw new ArgumentException(\"TrainerRankingsSubmission must have exactly 3 entries.\");\n                m_entries = value;\n            }\n        }\n    }\n\n    public class TrainerRankingsSubmissionEntry : BinarySerializableBase\n    {\n        public TrainerRankingsSubmissionEntry(TrainerRankingsRecordTypes record_type, uint score)\n        {\n            RecordType = record_type;\n            Score = score;\n        }\n\n        public TrainerRankingsSubmissionEntry(byte[] data, int offset)\n        {\n            Load(data, offset);\n        }\n\n        public TrainerRankingsSubmissionEntry(byte[] data)\n        {\n            Load(data);\n        }\n\n        public TrainerRankingsSubmissionEntry(BinaryReader reader)\n        {\n            Load(reader);\n        }\n\n        protected override void Load(BinaryReader reader)\n        {\n            RecordType = (TrainerRankingsRecordTypes)reader.ReadInt32(); // 00\n            Score = reader.ReadUInt32();                                 // 04\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write((int)RecordType); // 00\n            writer.Write(Score);           // 04\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 8;\n            }\n        }\n\n        public TrainerRankingsRecordTypes RecordType { get; set; }\n        public uint Score { get; set; }\n    }\n}\n"
  },
  {
    "path": "library/Wfc/VipRecord.cs",
    "content": "using PkmnFoundations.Support;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace PkmnFoundations.Wfc\n{\n    public class VipRecord : BinarySerializableBase\n    {\n        public VipRecord()\n        {\n          Pid = 0;\n          WordPartA = 0;\n          WordPartB = 0;\n          WordPartC = 0;\n          WordPartD = 0;\n        }\n\n        public VipRecord(uint pid)\n        {\n          Pid = pid;\n          WordPartA = 0;\n          WordPartB = 0;\n          WordPartC = 0;\n          WordPartD = 0;\n        }\n\n        public VipRecord(uint pid, byte wordA, byte wordB, byte wordC, byte wordD)\n        {\n            Pid = pid;\n            WordPartA = wordA;\n            WordPartB = wordB;\n            WordPartC = wordC;\n            WordPartD = wordD;\n        }\n\n        public VipRecord(byte[] data)\n        {\n            Load(data);\n        }\n\n        public uint Pid; // Profile id of the user who is a VIP.\n        public byte WordPartA; // D + A creates first word, A + B creates second word.\n        public byte WordPartB; // A + B creates second word, B + C creates third word.\n        public byte WordPartC; // B + C creates third word, C + D creates fourth word.\n        public byte WordPartD; // D + A creates first word, C + D creates fourth word.\n\n        protected override void Load(BinaryReader reader)\n        {\n            Pid = reader.ReadUInt32();\n            WordPartA = reader.ReadByte();\n            WordPartB = reader.ReadByte();\n            WordPartC = reader.ReadByte();\n            WordPartD = reader.ReadByte();\n        }\n\n        protected override void Save(BinaryWriter writer)\n        {\n            writer.Write(Pid);\n            writer.Write(WordPartA);\n            writer.Write(WordPartB);\n            writer.Write(WordPartC);\n            writer.Write(WordPartD);\n        }\n\n        public override int Size\n        {\n            get\n            {\n                return 8;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <system.data>\n    <DbProviderFactories>\n      <add name=\"SQLite Data Provider\" invariant=\"System.Data.SQLite\" \n           description=\".NET Framework Data Provider for SQLite\" \n           type=\"System.Data.SQLite.SQLiteFactory, System.Data.SQLite\" />\n      <remove invariant=\"MySql.Data.MySqlClient\" />\n      <add name=\"MySQL Data Provider\" invariant=\"MySql.Data.MySqlClient\" \n           description=\".Net Framework Data Provider for MySQL\" \n           type=\"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d\" />\n    </DbProviderFactories>\n  </system.data>\n</configuration>"
  },
  {
    "path": "library/database.sql",
    "content": "-- --------------------------------------------------------\n-- Host:                         127.0.0.1\n-- Server version:               10.5.16-MariaDB - mariadb.org binary distribution\n-- Server OS:                    Win64\n-- HeidiSQL Version:             12.1.0.6537\n-- --------------------------------------------------------\n\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n/*!40101 SET NAMES utf8 */;\n/*!50503 SET NAMES utf8mb4 */;\n/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;\n/*!40103 SET TIME_ZONE='+00:00' */;\n/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;\n/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;\n\n-- Dumping structure for table gts.BattleVideoCrawlQueue\nCREATE TABLE IF NOT EXISTS `BattleVideoCrawlQueue` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `SerialNumber` bigint(11) unsigned DEFAULT NULL,\n  `Timestamp` datetime DEFAULT NULL,\n  `Complete` bit(1) DEFAULT b'0',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.BattleVideoCrawlQueue5\nCREATE TABLE IF NOT EXISTS `BattleVideoCrawlQueue5` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `SerialNumber` bigint(11) unsigned DEFAULT NULL,\n  `Timestamp` datetime DEFAULT NULL,\n  `Complete` bit(1) DEFAULT b'0',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.BattleVideoSearchHistory\nCREATE TABLE IF NOT EXISTS `BattleVideoSearchHistory` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `Metagame` int(11) DEFAULT NULL,\n  `Species` int(11) DEFAULT NULL,\n  `Country` int(11) DEFAULT NULL,\n  `Region` int(11) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.BattleVideoSearchHistory5\nCREATE TABLE IF NOT EXISTS `BattleVideoSearchHistory5` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `Metagame` int(11) DEFAULT NULL,\n  `Species` int(11) DEFAULT NULL,\n  `Country` int(11) DEFAULT NULL,\n  `Region` int(11) DEFAULT NULL,\n  `Special` int(11) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsBattleSubway5\nCREATE TABLE IF NOT EXISTS `GtsBattleSubway5` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `pid` int(11) NOT NULL,\n  `Name` binary(16) DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `TrainerID` int(10) unsigned DEFAULT NULL,\n  `PhraseLeader` binary(8) DEFAULT NULL,\n  `Gender` tinyint(3) unsigned DEFAULT NULL,\n  `Unknown2` tinyint(3) unsigned DEFAULT NULL,\n  `PhraseChallenged` binary(8) DEFAULT NULL,\n  `PhraseWon` binary(8) DEFAULT NULL,\n  `PhraseLost` binary(8) DEFAULT NULL,\n  `Unknown3` smallint(5) unsigned DEFAULT NULL,\n  `Unknown4` binary(5) DEFAULT NULL,\n  `Unknown5` bigint(20) DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `Rank` tinyint(3) unsigned DEFAULT NULL,\n  `RoomNum` tinyint(3) unsigned NOT NULL DEFAULT 0,\n  `BattlesWon` tinyint(3) unsigned DEFAULT NULL,\n  `Position` int(10) unsigned DEFAULT NULL,\n  `TimeAdded` datetime DEFAULT NULL,\n  `TimeUpdated` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `RoomNum` (`RoomNum`,`Rank`,`Position`),\n  KEY `pid` (`pid`,`RoomNum`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsBattleSubwayLeaders5\nCREATE TABLE IF NOT EXISTS `GtsBattleSubwayLeaders5` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `pid` int(11) NOT NULL DEFAULT 0,\n  `Name` binary(16) DEFAULT NULL,\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `TrainerID` int(10) unsigned DEFAULT NULL,\n  `PhraseLeader` binary(8) DEFAULT NULL,\n  `Gender` tinyint(3) unsigned DEFAULT NULL,\n  `Unknown2` tinyint(3) unsigned DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `Rank` tinyint(3) unsigned DEFAULT NULL,\n  `RoomNum` tinyint(3) unsigned NOT NULL DEFAULT 0,\n  `TimeAdded` datetime DEFAULT NULL,\n  `TimeUpdated` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `RoomNum` (`RoomNum`,`Rank`,`TimeAdded`),\n  KEY `pid` (`pid`,`RoomNum`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsBattleSubwayPokemon5\nCREATE TABLE IF NOT EXISTS `GtsBattleSubwayPokemon5` (\n  `party_id` bigint(20) unsigned NOT NULL,\n  `Slot` tinyint(3) unsigned NOT NULL,\n  `Species` smallint(5) unsigned DEFAULT NULL,\n  `Form` smallint(5) unsigned DEFAULT NULL,\n  `HeldItem` smallint(5) unsigned DEFAULT NULL,\n  `Move1` smallint(5) unsigned DEFAULT NULL,\n  `Move2` smallint(5) unsigned DEFAULT NULL,\n  `Move3` smallint(5) unsigned DEFAULT NULL,\n  `Move4` smallint(5) unsigned DEFAULT NULL,\n  `TrainerID` int(10) unsigned DEFAULT NULL,\n  `Personality` int(10) unsigned DEFAULT NULL,\n  `IVs` int(10) unsigned DEFAULT NULL,\n  `EVs` binary(6) DEFAULT NULL,\n  `Unknown1` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Ability` tinyint(3) unsigned DEFAULT NULL,\n  `Happiness` tinyint(3) unsigned DEFAULT NULL,\n  `Nickname` binary(22) DEFAULT NULL,\n  `Unknown2` int(10) unsigned DEFAULT NULL,\n  PRIMARY KEY (`party_id`,`Slot`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsBattleTower4\nCREATE TABLE IF NOT EXISTS `GtsBattleTower4` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `pid` int(11) NOT NULL,\n  `Name` binary(16) DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `TrainerID` int(10) unsigned DEFAULT NULL,\n  `PhraseLeader` binary(8) DEFAULT NULL,\n  `Gender` tinyint(3) unsigned DEFAULT NULL,\n  `Unknown2` tinyint(3) unsigned DEFAULT NULL,\n  `PhraseChallenged` binary(8) DEFAULT NULL,\n  `PhraseWon` binary(8) DEFAULT NULL,\n  `PhraseLost` binary(8) DEFAULT NULL,\n  `Unknown3` smallint(5) unsigned DEFAULT NULL,\n  `Unknown5` bigint(20) DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `Rank` tinyint(3) unsigned DEFAULT NULL,\n  `RoomNum` tinyint(3) unsigned NOT NULL DEFAULT 0,\n  `BattlesWon` tinyint(3) unsigned DEFAULT NULL,\n  `Position` int(10) unsigned DEFAULT NULL,\n  `TimeAdded` datetime DEFAULT NULL,\n  `TimeUpdated` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `RoomNum` (`RoomNum`,`Rank`,`Position`),\n  KEY `pid` (`pid`,`RoomNum`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsBattleTowerLeaders4\nCREATE TABLE IF NOT EXISTS `GtsBattleTowerLeaders4` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `pid` int(11) NOT NULL DEFAULT 0,\n  `Name` binary(16) DEFAULT NULL,\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `TrainerID` int(10) unsigned DEFAULT NULL,\n  `PhraseLeader` binary(8) DEFAULT NULL,\n  `Gender` tinyint(3) unsigned DEFAULT NULL,\n  `Unknown2` tinyint(3) unsigned DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `Rank` tinyint(3) unsigned DEFAULT NULL,\n  `RoomNum` tinyint(3) unsigned NOT NULL DEFAULT 0,\n  `TimeAdded` datetime DEFAULT NULL,\n  `TimeUpdated` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `RoomNum` (`RoomNum`,`Rank`,`TimeAdded`),\n  KEY `pid` (`pid`,`RoomNum`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsBattleTowerPokemon4\nCREATE TABLE IF NOT EXISTS `GtsBattleTowerPokemon4` (\n  `party_id` bigint(20) unsigned NOT NULL,\n  `Slot` tinyint(3) unsigned NOT NULL,\n  `Species` smallint(5) unsigned DEFAULT NULL,\n  `Form` smallint(5) unsigned DEFAULT NULL,\n  `HeldItem` smallint(5) unsigned DEFAULT NULL,\n  `Move1` smallint(5) unsigned DEFAULT NULL,\n  `Move2` smallint(5) unsigned DEFAULT NULL,\n  `Move3` smallint(5) unsigned DEFAULT NULL,\n  `Move4` smallint(5) unsigned DEFAULT NULL,\n  `TrainerID` int(10) unsigned DEFAULT NULL,\n  `Personality` int(10) unsigned DEFAULT NULL,\n  `IVs` int(10) unsigned DEFAULT NULL,\n  `EVs` binary(6) DEFAULT NULL,\n  `Unknown1` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Ability` tinyint(3) unsigned DEFAULT NULL,\n  `Happiness` tinyint(3) unsigned DEFAULT NULL,\n  `Nickname` binary(22) DEFAULT NULL,\n  PRIMARY KEY (`party_id`,`Slot`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsHistory4\nCREATE TABLE IF NOT EXISTS `GtsHistory4` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `trade_id` bigint(20) unsigned DEFAULT NULL,\n  `Data` blob NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  `Gender` tinyint(3) unsigned NOT NULL,\n  `Level` tinyint(3) unsigned NOT NULL,\n  `RequestedSpecies` smallint(5) unsigned NOT NULL,\n  `RequestedGender` tinyint(3) unsigned NOT NULL,\n  `RequestedMinLevel` tinyint(3) unsigned NOT NULL,\n  `RequestedMaxLevel` tinyint(3) unsigned NOT NULL,\n  `Unknown1` tinyint(3) unsigned NOT NULL,\n  `TrainerGender` tinyint(3) unsigned NOT NULL,\n  `Unknown2` tinyint(3) unsigned NOT NULL,\n  `TimeDeposited` datetime DEFAULT NULL,\n  `TimeExchanged` datetime DEFAULT NULL,\n  `pid` int(11) NOT NULL,\n  `TrainerName` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TrainerOT` smallint(5) unsigned NOT NULL,\n  `TrainerCountry` tinyint(3) unsigned NOT NULL,\n  `TrainerRegion` tinyint(3) unsigned NOT NULL,\n  `TrainerClass` tinyint(3) unsigned NOT NULL,\n  `IsExchanged` tinyint(3) unsigned NOT NULL,\n  `TrainerVersion` tinyint(3) unsigned NOT NULL,\n  `TrainerLanguage` tinyint(3) unsigned NOT NULL,\n  `ParseVersion` int(11) unsigned DEFAULT NULL,\n  `TimeWithdrawn` datetime DEFAULT NULL,\n  `partner_pid` int(11) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `pid` (`pid`),\n  KEY `Species` (`Species`),\n  KEY `Gender` (`Gender`),\n  KEY `Level` (`Level`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsHistory5\nCREATE TABLE IF NOT EXISTS `GtsHistory5` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `trade_id` bigint(20) unsigned DEFAULT NULL,\n  `Data` blob NOT NULL,\n  `Unknown0` blob NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  `Gender` tinyint(3) unsigned NOT NULL,\n  `Level` tinyint(3) unsigned NOT NULL,\n  `RequestedSpecies` smallint(5) unsigned NOT NULL,\n  `RequestedGender` tinyint(3) unsigned NOT NULL,\n  `RequestedMinLevel` tinyint(3) unsigned NOT NULL,\n  `RequestedMaxLevel` tinyint(3) unsigned NOT NULL,\n  `Unknown1` tinyint(3) unsigned NOT NULL,\n  `TrainerGender` tinyint(3) unsigned NOT NULL,\n  `Unknown2` tinyint(3) unsigned NOT NULL,\n  `TimeDeposited` datetime DEFAULT NULL,\n  `TimeExchanged` datetime DEFAULT NULL,\n  `pid` int(11) NOT NULL,\n  `TrainerOT` int(11) unsigned NOT NULL,\n  `TrainerName` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TrainerCountry` tinyint(3) unsigned NOT NULL,\n  `TrainerRegion` tinyint(3) unsigned NOT NULL,\n  `TrainerClass` tinyint(3) unsigned NOT NULL,\n  `IsExchanged` tinyint(3) unsigned NOT NULL,\n  `TrainerVersion` tinyint(3) unsigned NOT NULL,\n  `TrainerLanguage` tinyint(3) unsigned NOT NULL,\n  `TrainerBadges` tinyint(3) unsigned NOT NULL,\n  `TrainerUnityTower` tinyint(3) unsigned NOT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `TimeWithdrawn` datetime DEFAULT NULL,\n  `partner_pid` int(11) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `pid` (`pid`),\n  KEY `Species` (`Species`),\n  KEY `Gender` (`Gender`),\n  KEY `Level` (`Level`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsPokemon4\nCREATE TABLE IF NOT EXISTS `GtsPokemon4` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `Data` blob NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  `Gender` tinyint(3) unsigned NOT NULL,\n  `Level` tinyint(3) unsigned NOT NULL,\n  `RequestedSpecies` smallint(5) unsigned NOT NULL,\n  `RequestedGender` tinyint(3) unsigned NOT NULL,\n  `RequestedMinLevel` tinyint(3) unsigned NOT NULL,\n  `RequestedMaxLevel` tinyint(3) unsigned NOT NULL,\n  `Unknown1` tinyint(3) unsigned NOT NULL,\n  `TrainerGender` tinyint(3) unsigned NOT NULL,\n  `Unknown2` tinyint(3) unsigned NOT NULL,\n  `TimeDeposited` datetime DEFAULT NULL,\n  `TimeExchanged` datetime DEFAULT NULL,\n  `pid` int(11) NOT NULL,\n  `TrainerName` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TrainerOT` smallint(5) unsigned NOT NULL,\n  `TrainerCountry` tinyint(3) unsigned NOT NULL,\n  `TrainerRegion` tinyint(3) unsigned NOT NULL,\n  `TrainerClass` tinyint(3) unsigned NOT NULL,\n  `IsExchanged` tinyint(3) unsigned NOT NULL,\n  `TrainerVersion` tinyint(3) unsigned NOT NULL,\n  `TrainerLanguage` tinyint(3) unsigned NOT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `LockedBy` int(11) DEFAULT NULL,\n  `LockedUntil` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `pid` (`pid`),\n  KEY `Species` (`Species`),\n  KEY `Gender` (`Gender`),\n  KEY `Level` (`Level`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsPokemon5\nCREATE TABLE IF NOT EXISTS `GtsPokemon5` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `Data` blob NOT NULL,\n  `Unknown0` blob NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  `Gender` tinyint(3) unsigned NOT NULL,\n  `Level` tinyint(3) unsigned NOT NULL,\n  `RequestedSpecies` smallint(5) unsigned NOT NULL,\n  `RequestedGender` tinyint(3) unsigned NOT NULL,\n  `RequestedMinLevel` tinyint(3) unsigned NOT NULL,\n  `RequestedMaxLevel` tinyint(3) unsigned NOT NULL,\n  `Unknown1` tinyint(3) unsigned NOT NULL,\n  `TrainerGender` tinyint(3) unsigned NOT NULL,\n  `Unknown2` tinyint(3) unsigned NOT NULL,\n  `TimeDeposited` datetime DEFAULT NULL,\n  `TimeExchanged` datetime DEFAULT NULL,\n  `pid` int(11) NOT NULL,\n  `TrainerOT` int(11) unsigned NOT NULL,\n  `TrainerName` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TrainerCountry` tinyint(3) unsigned NOT NULL,\n  `TrainerRegion` tinyint(3) unsigned NOT NULL,\n  `TrainerClass` tinyint(3) unsigned NOT NULL,\n  `IsExchanged` tinyint(3) unsigned NOT NULL,\n  `TrainerVersion` tinyint(3) unsigned NOT NULL,\n  `TrainerLanguage` tinyint(3) unsigned NOT NULL,\n  `TrainerBadges` tinyint(3) unsigned NOT NULL,\n  `TrainerUnityTower` tinyint(3) unsigned NOT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `LockedBy` int(11) DEFAULT NULL,\n  `LockedUntil` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `pid` (`pid`),\n  KEY `Species` (`Species`),\n  KEY `Gender` (`Gender`),\n  KEY `Level` (`Level`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsProfiles4\nCREATE TABLE IF NOT EXISTS `GtsProfiles4` (\n  `pid` int(11) NOT NULL,\n  `Data` blob DEFAULT NULL,\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `OT` int(10) unsigned DEFAULT NULL,\n  `Name` binary(16) DEFAULT NULL,\n  `MacAddress` binary(6) DEFAULT NULL,\n  `Email` varchar(64) DEFAULT NULL,\n  `HasNotifications` bit(1) DEFAULT NULL,\n  `ClientSecret` smallint(6) DEFAULT NULL,\n  `MailSecret` smallint(6) DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `TimeAdded` datetime NOT NULL,\n  `TimeUpdated` datetime NOT NULL,\n  `TimeLastSearch` datetime DEFAULT NULL,\n  `IpAddress` varchar(64) DEFAULT NULL,\n  PRIMARY KEY (`pid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.GtsProfiles5\nCREATE TABLE IF NOT EXISTS `GtsProfiles5` (\n  `pid` int(11) NOT NULL,\n  `Data` blob DEFAULT NULL,\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `OT` int(10) unsigned DEFAULT NULL,\n  `Name` binary(16) DEFAULT NULL,\n  `MacAddress` binary(6) DEFAULT NULL,\n  `Email` varchar(64) DEFAULT NULL,\n  `HasNotifications` bit(1) DEFAULT NULL,\n  `ClientSecret` smallint(6) DEFAULT NULL,\n  `MailSecret` smallint(6) DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `TimeAdded` datetime NOT NULL,\n  `TimeUpdated` datetime NOT NULL,\n  `TimeLastSearch` datetime DEFAULT NULL,\n  `IpAddress` varchar(64) DEFAULT NULL,\n  PRIMARY KEY (`pid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_gamestats_bans_ip\nCREATE TABLE IF NOT EXISTS `pkmncf_gamestats_bans_ip` (\n  `IpAddress` varchar(64) NOT NULL,\n  `Level` int(11) NOT NULL,\n  `Reason` text DEFAULT NULL,\n  `Expires` datetime DEFAULT NULL,\n  PRIMARY KEY (`IpAddress`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_gamestats_bans_ipv4_range\nCREATE TABLE IF NOT EXISTS `pkmncf_gamestats_bans_ipv4_range` (\n  `IpAddressMin` int(10) unsigned NOT NULL,\n  `IpAddressMax` int(10) unsigned NOT NULL,\n  `Level` int(11) NOT NULL,\n  `Reason` text DEFAULT NULL,\n  `Expires` datetime DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_gamestats_bans_mac\nCREATE TABLE IF NOT EXISTS `pkmncf_gamestats_bans_mac` (\n  `MacAddress` binary(6) NOT NULL,\n  `Level` int(11) NOT NULL,\n  `Reason` text DEFAULT NULL,\n  `Expires` datetime DEFAULT NULL,\n  PRIMARY KEY (`MacAddress`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_gamestats_bans_pid\nCREATE TABLE IF NOT EXISTS `pkmncf_gamestats_bans_pid` (\n  `pid` int(11) NOT NULL,\n  `Level` int(11) NOT NULL,\n  `Reason` text DEFAULT NULL,\n  `Expires` datetime DEFAULT NULL,\n  PRIMARY KEY (`pid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_gamestats_bans_savefile\nCREATE TABLE IF NOT EXISTS `pkmncf_gamestats_bans_savefile` (\n  `Version` tinyint(3) unsigned NOT NULL,\n  `Language` tinyint(3) unsigned NOT NULL,\n  `OT` int(10) unsigned NOT NULL,\n  `Name` binary(16) NOT NULL,\n  `Level` int(11) NOT NULL,\n  `Reason` text DEFAULT NULL,\n  `Expires` datetime DEFAULT NULL,\n  PRIMARY KEY (`Version`,`Language`,`OT`,`Name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_plaza_profiles\nCREATE TABLE IF NOT EXISTS `pkmncf_plaza_profiles` (\n  `pid` int(11) NOT NULL,\n  `Data` blob DEFAULT NULL,\n  `Version` tinyint(3) unsigned DEFAULT NULL,\n  `Language` tinyint(3) unsigned DEFAULT NULL,\n  `Country` tinyint(3) unsigned DEFAULT NULL,\n  `Region` tinyint(3) unsigned DEFAULT NULL,\n  `OT` int(10) unsigned DEFAULT NULL,\n  `Name` binary(16) DEFAULT NULL,\n  `ParseVersion` int(10) unsigned DEFAULT NULL,\n  `TimeAdded` datetime NOT NULL,\n  `TimeUpdated` datetime NOT NULL,\n  PRIMARY KEY (`pid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_abilities\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_abilities` (\n  `Value` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `Name_JA` varchar(30) DEFAULT '',\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  PRIMARY KEY (`Value`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_countries\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_countries` (\n  `id` int(10) unsigned NOT NULL DEFAULT 0,\n  `Value4` tinyint(3) unsigned DEFAULT 0,\n  `Value5` tinyint(3) unsigned DEFAULT NULL,\n  `iso-3166-1` char(2) DEFAULT NULL,\n  `Name_JA` varchar(30) DEFAULT '',\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `Name` (`Name_JA`),\n  KEY `Value4` (`Value4`),\n  KEY `Value5` (`Value5`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_country_regions\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_country_regions` (\n  `id` int(10) unsigned NOT NULL DEFAULT 0,\n  `country_id` int(10) unsigned NOT NULL DEFAULT 0,\n  `Value4` tinyint(3) unsigned NOT NULL DEFAULT 0,\n  `Value5` tinyint(3) unsigned DEFAULT NULL,\n  `iso-3166-2` varchar(4) DEFAULT NULL,\n  `Name_JA` varchar(30) DEFAULT '',\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `country_id` (`country_id`),\n  KEY `country_id_2` (`country_id`,`Value4`),\n  KEY `country_id_3` (`country_id`,`Value5`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_encounters_random\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_encounters_random` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `room_id` int(10) unsigned NOT NULL,\n  `Version` int(10) unsigned NOT NULL,\n  `Method` int(10) unsigned NOT NULL,\n  `EncounterSlot` tinyint(3) unsigned NOT NULL,\n  `form_id` int(10) unsigned NOT NULL,\n  `MinLevel` tinyint(3) unsigned NOT NULL,\n  `MaxLevel` tinyint(3) unsigned NOT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_items\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_items` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `Value3` int(10) unsigned DEFAULT NULL,\n  `Value4` int(10) unsigned DEFAULT NULL,\n  `Value5` int(10) unsigned DEFAULT NULL,\n  `Value6` int(10) unsigned DEFAULT NULL,\n  `PokeballValue` int(10) unsigned DEFAULT NULL,\n  `Name_JA` varchar(30) DEFAULT '',\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  `Price` int(10) unsigned DEFAULT NULL,\n  `HoldGeneration` int(11) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `Value3` (`Value3`),\n  KEY `Value4` (`Value4`),\n  KEY `Value5` (`Value5`),\n  KEY `Value6` (`Value6`),\n  KEY `ValueBall` (`PokeballValue`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_locations\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_locations` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `region_id` int(11) unsigned NOT NULL,\n  `Name_JA` varchar(30) DEFAULT NULL,\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  `Value3` int(11) unsigned DEFAULT NULL,\n  `Value_Colo` int(11) unsigned DEFAULT NULL,\n  `Value_XD` int(11) unsigned DEFAULT NULL,\n  `Value4` int(11) unsigned DEFAULT NULL,\n  `Value5` int(11) unsigned DEFAULT NULL,\n  `Value6` int(11) unsigned DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_moves\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_moves` (\n  `Value` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `type_id` int(10) unsigned DEFAULT NULL,\n  `DamageClass` tinyint(3) unsigned NOT NULL,\n  `Name_JA` varchar(30) DEFAULT '',\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  `Damage` int(11) DEFAULT NULL,\n  `PP` int(11) DEFAULT NULL,\n  `Accuracy` int(11) DEFAULT NULL,\n  `Priority` int(11) DEFAULT NULL,\n  `Target` int(11) DEFAULT NULL,\n  PRIMARY KEY (`Value`),\n  KEY `Type` (`type_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_pokemon\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_pokemon` (\n  `NationalDex` int(10) unsigned NOT NULL,\n  `family_id` int(10) unsigned NOT NULL,\n  `Name_JA` varchar(36) DEFAULT '',\n  `Name_EN` varchar(36) DEFAULT NULL,\n  `Name_FR` varchar(36) DEFAULT NULL,\n  `Name_IT` varchar(36) DEFAULT NULL,\n  `Name_DE` varchar(36) DEFAULT NULL,\n  `Name_ES` varchar(36) DEFAULT NULL,\n  `Name_KO` varchar(36) DEFAULT NULL,\n  `GrowthRate` int(10) unsigned NOT NULL,\n  `GenderRatio` tinyint(3) unsigned NOT NULL,\n  `EggGroup1` tinyint(3) unsigned NOT NULL,\n  `EggGroup2` tinyint(3) unsigned NOT NULL,\n  `EggSteps` int(10) unsigned NOT NULL,\n  `GenderVariations` bit(1) DEFAULT NULL,\n  PRIMARY KEY (`NationalDex`),\n  KEY `family_id` (`family_id`),\n  KEY `EggGroup1` (`EggGroup1`),\n  KEY `EggGroup2` (`EggGroup2`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_pokemon_families\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_pokemon_families` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `BasicMale` int(10) unsigned NOT NULL,\n  `BasicFemale` int(10) unsigned NOT NULL,\n  `BabyMale` int(10) unsigned DEFAULT NULL,\n  `BabyFemale` int(10) unsigned DEFAULT NULL,\n  `Incense` int(10) unsigned DEFAULT NULL,\n  `GenderRatio` tinyint(3) unsigned NOT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_pokemon_forms\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_pokemon_forms` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `NationalDex` int(11) unsigned NOT NULL,\n  `FormValue` tinyint(3) unsigned NOT NULL,\n  `Name_JA` varchar(30) DEFAULT NULL,\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  `FormSuffix` varchar(30) DEFAULT NULL,\n  `Height` int(10) unsigned DEFAULT NULL,\n  `Weight` int(10) unsigned DEFAULT NULL,\n  `Experience` int(10) unsigned DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `NationalDex` (`NationalDex`),\n  KEY `FormValue` (`FormValue`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_pokemon_form_abilities\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_pokemon_form_abilities` (\n  `form_id` int(10) unsigned NOT NULL,\n  `MinGeneration` int(10) unsigned NOT NULL,\n  `Ability1` int(10) unsigned DEFAULT NULL,\n  `Ability2` int(10) unsigned DEFAULT NULL,\n  `HiddenAbility1` int(10) unsigned DEFAULT NULL,\n  PRIMARY KEY (`form_id`,`MinGeneration`),\n  KEY `Ability1` (`Ability1`),\n  KEY `Ability2` (`Ability2`),\n  KEY `HiddenAbility1` (`HiddenAbility1`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_pokemon_form_stats\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_pokemon_form_stats` (\n  `form_id` int(10) unsigned NOT NULL,\n  `MinGeneration` int(10) unsigned NOT NULL,\n  `Type1` int(10) unsigned DEFAULT NULL,\n  `Type2` int(10) unsigned DEFAULT NULL,\n  `BaseHP` int(11) DEFAULT NULL,\n  `BaseAttack` int(11) DEFAULT NULL,\n  `BaseDefense` int(11) DEFAULT NULL,\n  `BaseSpeed` int(11) DEFAULT NULL,\n  `BaseSpAttack` int(11) DEFAULT NULL,\n  `BaseSpDefense` int(11) DEFAULT NULL,\n  `RewardHP` tinyint(3) unsigned DEFAULT NULL,\n  `RewardAttack` tinyint(3) unsigned DEFAULT NULL,\n  `RewardDefense` tinyint(3) unsigned DEFAULT NULL,\n  `RewardSpeed` tinyint(3) unsigned DEFAULT NULL,\n  `RewardSpAttack` tinyint(3) unsigned DEFAULT NULL,\n  `RewardSpDefense` tinyint(3) unsigned DEFAULT NULL,\n  PRIMARY KEY (`form_id`,`MinGeneration`),\n  KEY `form_id` (`form_id`,`MinGeneration`),\n  KEY `Type1` (`Type1`),\n  KEY `Type2` (`Type2`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_regions\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_regions` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `Name_JA` varchar(30) DEFAULT NULL,\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_ribbons\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_ribbons` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `Position3` int(10) unsigned DEFAULT NULL,\n  `Position4` int(10) unsigned DEFAULT NULL,\n  `Position5` int(10) unsigned DEFAULT NULL,\n  `Position6` int(10) unsigned DEFAULT NULL,\n  `Value3` int(10) unsigned DEFAULT NULL,\n  `Value4` int(10) unsigned DEFAULT NULL,\n  `Value5` int(10) unsigned DEFAULT NULL,\n  `Value6` int(10) unsigned DEFAULT NULL,\n  `Name_JA` varchar(30) DEFAULT NULL,\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  `Description_JA` varchar(300) DEFAULT NULL,\n  `Description_EN` varchar(300) DEFAULT NULL,\n  `Description_FR` varchar(300) DEFAULT NULL,\n  `Description_IT` varchar(300) DEFAULT NULL,\n  `Description_DE` varchar(300) DEFAULT NULL,\n  `Description_ES` varchar(300) DEFAULT NULL,\n  `Description_KO` varchar(300) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_rooms\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_rooms` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `location_id` int(11) unsigned NOT NULL,\n  `Comment` varchar(300) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_pokedex_types\nCREATE TABLE IF NOT EXISTS `pkmncf_pokedex_types` (\n  `id` int(10) unsigned NOT NULL,\n  `Name_JA` varchar(30) DEFAULT '',\n  `Name_EN` varchar(30) DEFAULT NULL,\n  `Name_FR` varchar(30) DEFAULT NULL,\n  `Name_IT` varchar(30) DEFAULT NULL,\n  `Name_DE` varchar(30) DEFAULT NULL,\n  `Name_ES` varchar(30) DEFAULT NULL,\n  `Name_KO` varchar(30) DEFAULT NULL,\n  `DamageClass` tinyint(3) unsigned DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for procedure gts.pkmncf_terminal_proc_create_leaderboards_for_record\nDELIMITER //\nCREATE PROCEDURE `pkmncf_terminal_proc_create_leaderboards_for_record`(\n\tIN `_report_id` INT,\n\tIN `_record_type` INT\n)\n    SQL SECURITY INVOKER\nBEGIN\n\n\tSELECT @start_date := StartDate\n\t\tFROM pkmncf_terminal_trainer_rankings_reports WHERE report_id = _report_id;\n\n\tINSERT INTO pkmncf_terminal_trainer_rankings_leaderboards_class\n\t\tSELECT _report_id AS report_id, TrainerClass, _record_type AS RecordType, SUM(Score) AS Score \n\t\tFROM pkmncf_terminal_trainer_rankings_records\n\t\tINNER JOIN pkmncf_terminal_trainer_rankings_teams \n\t\t\tON pkmncf_terminal_trainer_rankings_records.pid = pkmncf_terminal_trainer_rankings_teams.pid\n\t\tWHERE pkmncf_terminal_trainer_rankings_records.LastUpdated >= @start_date\n\t\t\tAND RecordType = _record_type\n\t\tGROUP BY TrainerClass;\n\n\tINSERT INTO pkmncf_terminal_trainer_rankings_leaderboards_month\n\t\tSELECT _report_id AS report_id, BirthMonth, _record_type AS RecordType, SUM(Score) AS Score \n\t\tFROM pkmncf_terminal_trainer_rankings_records\n\t\tINNER JOIN pkmncf_terminal_trainer_rankings_teams \n\t\t\tON pkmncf_terminal_trainer_rankings_records.pid = pkmncf_terminal_trainer_rankings_teams.pid\n\t\tWHERE pkmncf_terminal_trainer_rankings_records.LastUpdated >= @start_date\n\t\t\tAND RecordType = _record_type\n\t\tGROUP BY BirthMonth;\n\t\t\n\tINSERT INTO pkmncf_terminal_trainer_rankings_leaderboards_pokemon\n\t\tSELECT _report_id AS report_id, FavouritePokemon, _record_type AS RecordType, SUM(Score) AS Score \n\t\tFROM pkmncf_terminal_trainer_rankings_records\n\t\tINNER JOIN pkmncf_terminal_trainer_rankings_teams \n\t\t\tON pkmncf_terminal_trainer_rankings_records.pid = pkmncf_terminal_trainer_rankings_teams.pid\n\t\tWHERE pkmncf_terminal_trainer_rankings_records.LastUpdated >= @start_date\n\t\t\tAND RecordType = _record_type\n\t\tGROUP BY FavouritePokemon;\n\nEND//\nDELIMITER ;\n\n-- Dumping structure for procedure gts.pkmncf_terminal_proc_create_leaderboards_for_report\nDELIMITER //\nCREATE PROCEDURE `pkmncf_terminal_proc_create_leaderboards_for_report`(\n\tIN `_report_id` INT\n)\n    SQL SECURITY INVOKER\nBEGIN\n\tSELECT @record_type_1 := RecordType1, @record_type_2 := RecordType2, @record_type_3 := RecordType3\n\tFROM pkmncf_terminal_trainer_rankings_reports WHERE report_id = _report_id;\n\t\n\tDELETE FROM pkmncf_terminal_trainer_rankings_leaderboards_class WHERE report_id = _report_id;\n\tDELETE FROM pkmncf_terminal_trainer_rankings_leaderboards_month WHERE report_id = _report_id;\n\tDELETE FROM pkmncf_terminal_trainer_rankings_leaderboards_pokemon WHERE report_id = _report_id;\n\t\n\tCALL pkmncf_terminal_proc_create_leaderboards_for_record(_report_id, @record_type_1);\n\tCALL pkmncf_terminal_proc_create_leaderboards_for_record(_report_id, @record_type_2);\n\tCALL pkmncf_terminal_proc_create_leaderboards_for_record(_report_id, @record_type_3);\nEND//\nDELIMITER ;\n\n-- Dumping structure for table gts.pkmncf_terminal_trainer_rankings_leaderboards_class\nCREATE TABLE IF NOT EXISTS `pkmncf_terminal_trainer_rankings_leaderboards_class` (\n  `report_id` int(11) NOT NULL,\n  `TrainerClass` int(11) NOT NULL,\n  `RecordType` int(11) NOT NULL,\n  `Score` bigint(20) NOT NULL DEFAULT 0,\n  PRIMARY KEY (`report_id`,`TrainerClass`,`RecordType`) USING BTREE,\n  KEY `leaderboard_id` (`report_id`) USING BTREE,\n  CONSTRAINT `FK_pkmncf_terminal_trainer_rankings_byclass4_reports` FOREIGN KEY (`report_id`) REFERENCES `pkmncf_terminal_trainer_rankings_reports` (`report_id`) ON DELETE CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_terminal_trainer_rankings_leaderboards_month\nCREATE TABLE IF NOT EXISTS `pkmncf_terminal_trainer_rankings_leaderboards_month` (\n  `report_id` int(11) NOT NULL,\n  `Month` int(11) NOT NULL,\n  `RecordType` int(11) NOT NULL,\n  `Score` bigint(20) NOT NULL DEFAULT 0,\n  PRIMARY KEY (`report_id`,`Month`,`RecordType`) USING BTREE,\n  KEY `leaderboard_id` (`report_id`) USING BTREE,\n  CONSTRAINT `FK_pkmncf_terminal_trainer_rankings_bymonth4_reports` FOREIGN KEY (`report_id`) REFERENCES `pkmncf_terminal_trainer_rankings_reports` (`report_id`) ON DELETE CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_terminal_trainer_rankings_leaderboards_pokemon\nCREATE TABLE IF NOT EXISTS `pkmncf_terminal_trainer_rankings_leaderboards_pokemon` (\n  `report_id` int(11) NOT NULL,\n  `pokemon_id` int(11) NOT NULL,\n  `RecordType` int(11) NOT NULL,\n  `Score` bigint(20) NOT NULL,\n  PRIMARY KEY (`report_id`,`pokemon_id`,`RecordType`) USING BTREE,\n  KEY `leaderboard_id` (`report_id`) USING BTREE,\n  CONSTRAINT `FK_pkmncf_terminal_trainer_rankings_bypokemon4_reports` FOREIGN KEY (`report_id`) REFERENCES `pkmncf_terminal_trainer_rankings_reports` (`report_id`) ON DELETE CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_terminal_trainer_rankings_records\nCREATE TABLE IF NOT EXISTS `pkmncf_terminal_trainer_rankings_records` (\n  `pid` int(11) NOT NULL,\n  `RecordType` int(11) NOT NULL,\n  `Score` bigint(20) NOT NULL DEFAULT 0,\n  `LastUpdated` datetime NOT NULL,\n  PRIMARY KEY (`pid`,`RecordType`),\n  KEY `LastUpdated` (`LastUpdated`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_terminal_trainer_rankings_reports\nCREATE TABLE IF NOT EXISTS `pkmncf_terminal_trainer_rankings_reports` (\n  `report_id` int(11) NOT NULL AUTO_INCREMENT,\n  `StartDate` datetime NOT NULL,\n  `EndDate` datetime NOT NULL,\n  `RecordType1` int(11) NOT NULL,\n  `RecordType2` int(11) NOT NULL,\n  `RecordType3` int(11) NOT NULL,\n  PRIMARY KEY (`report_id`) USING BTREE,\n  KEY `StartDate` (`StartDate`),\n  KEY `EndDate` (`EndDate`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_terminal_trainer_rankings_teams\nCREATE TABLE IF NOT EXISTS `pkmncf_terminal_trainer_rankings_teams` (\n  `pid` int(11) NOT NULL,\n  `TrainerClass` int(11) NOT NULL,\n  `BirthMonth` int(11) NOT NULL,\n  `FavouritePokemon` int(11) NOT NULL,\n  `Unknown1` smallint(5) unsigned NOT NULL DEFAULT 0,\n  `Unknown2` smallint(5) unsigned NOT NULL DEFAULT 0,\n  `Unknown3` smallint(5) unsigned NOT NULL DEFAULT 0,\n  `LastUpdated` datetime NOT NULL,\n  PRIMARY KEY (`pid`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.pkmncf_web_news\nCREATE TABLE IF NOT EXISTS `pkmncf_web_news` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalBattleVideoPokemon4\nCREATE TABLE IF NOT EXISTS `TerminalBattleVideoPokemon4` (\n  `video_id` bigint(20) unsigned NOT NULL,\n  `Slot` tinyint(3) unsigned NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  PRIMARY KEY (`video_id`,`Slot`),\n  KEY `Species` (`Species`),\n  CONSTRAINT `terminalbattlevideopokemon4_ibfk_1` FOREIGN KEY (`video_id`) REFERENCES `TerminalBattleVideos4` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalBattleVideoPokemon5\nCREATE TABLE IF NOT EXISTS `TerminalBattleVideoPokemon5` (\n  `video_id` bigint(20) unsigned NOT NULL,\n  `Slot` tinyint(3) unsigned NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  PRIMARY KEY (`video_id`,`Slot`),\n  KEY `Species` (`Species`),\n  CONSTRAINT `terminalbattlevideopokemon5_ibfk_1` FOREIGN KEY (`video_id`) REFERENCES `TerminalBattleVideos5` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalBattleVideos4\nCREATE TABLE IF NOT EXISTS `TerminalBattleVideos4` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `pid` int(11) NOT NULL,\n  `SerialNumber` bigint(20) unsigned DEFAULT NULL,\n  `Header` blob NOT NULL,\n  `Data` blob NOT NULL,\n  `md5` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TimeAdded` datetime NOT NULL,\n  `ParseVersion` int(10) unsigned NOT NULL,\n  `TrainerName` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `Streak` smallint(5) unsigned DEFAULT NULL,\n  `Metagame` tinyint(3) unsigned NOT NULL,\n  `Country` tinyint(3) unsigned NOT NULL,\n  `Region` tinyint(3) unsigned NOT NULL,\n  `Views` int(10) unsigned NOT NULL DEFAULT 0,\n  `Saves` int(10) unsigned NOT NULL DEFAULT 0,\n  `Hype` double DEFAULT 0,\n  `HypeTimestamp` datetime DEFAULT '0000-00-00 00:00:00',\n  PRIMARY KEY (`id`),\n  KEY `SerialNumber` (`SerialNumber`),\n  KEY `TimeAdded` (`TimeAdded`),\n  KEY `Metagame` (`Metagame`),\n  KEY `pid` (`pid`),\n  KEY `Country` (`Country`,`Region`),\n  KEY `md5` (`md5`),\n  KEY `Hype` (`Hype`),\n  KEY `HypeTimestamp` (`HypeTimestamp`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalBattleVideos5\nCREATE TABLE IF NOT EXISTS `TerminalBattleVideos5` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `pid` int(11) NOT NULL,\n  `SerialNumber` bigint(20) unsigned DEFAULT NULL,\n  `Header` blob NOT NULL,\n  `Data` blob NOT NULL,\n  `md5` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TimeAdded` datetime NOT NULL,\n  `ParseVersion` int(10) unsigned NOT NULL,\n  `TrainerName` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `Streak` smallint(5) unsigned DEFAULT NULL,\n  `Metagame` tinyint(3) unsigned NOT NULL,\n  `Country` tinyint(3) unsigned NOT NULL,\n  `Region` tinyint(3) unsigned NOT NULL,\n  `Views` int(10) unsigned NOT NULL DEFAULT 0,\n  `Saves` int(10) unsigned NOT NULL DEFAULT 0,\n  `Hype` double DEFAULT 0,\n  `HypeTimestamp` datetime DEFAULT '0000-00-00 00:00:00',\n  PRIMARY KEY (`id`),\n  KEY `SerialNumber` (`SerialNumber`),\n  KEY `TimeAdded` (`TimeAdded`),\n  KEY `Metagame` (`Metagame`),\n  KEY `pid` (`pid`),\n  KEY `Country` (`Country`,`Region`),\n  KEY `md5` (`md5`),\n  KEY `Hype` (`Hype`),\n  KEY `HypeTimestamp` (`HypeTimestamp`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalBoxes4\nCREATE TABLE IF NOT EXISTS `TerminalBoxes4` (\n  `pid` int(11) NOT NULL,\n  `SerialNumber` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `Data` blob NOT NULL,\n  `md5` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TimeAdded` datetime NOT NULL,\n  `ParseVersion` int(11) unsigned NOT NULL,\n  `Label` int(11) unsigned NOT NULL,\n  PRIMARY KEY (`SerialNumber`),\n  KEY `md5` (`md5`),\n  KEY `Label` (`Label`),\n  KEY `TimeAdded` (`TimeAdded`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalDressup4\nCREATE TABLE IF NOT EXISTS `TerminalDressup4` (\n  `pid` int(11) NOT NULL,\n  `SerialNumber` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `Data` blob NOT NULL,\n  `md5` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TimeAdded` datetime NOT NULL,\n  `ParseVersion` int(11) unsigned NOT NULL,\n  `Species` smallint(5) unsigned NOT NULL,\n  PRIMARY KEY (`SerialNumber`),\n  KEY `md5` (`md5`),\n  KEY `Species` (`Species`),\n  KEY `TimeAdded` (`TimeAdded`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalMusicalPokemon5\nCREATE TABLE IF NOT EXISTS `TerminalMusicalPokemon5` (\n  `musical_id` bigint(20) unsigned NOT NULL,\n  `Slot` tinyint(3) unsigned NOT NULL,\n  `Species` smallint(6) unsigned NOT NULL,\n  PRIMARY KEY (`musical_id`,`Slot`),\n  KEY `Species` (`Species`),\n  CONSTRAINT `terminalmusicalpokemon5_ibfk_1` FOREIGN KEY (`musical_id`) REFERENCES `TerminalMusicals5` (`SerialNumber`) ON DELETE NO ACTION ON UPDATE NO ACTION\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n-- Dumping structure for table gts.TerminalMusicals5\nCREATE TABLE IF NOT EXISTS `TerminalMusicals5` (\n  `pid` int(11) NOT NULL,\n  `SerialNumber` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `Data` blob NOT NULL,\n  `md5` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n  `TimeAdded` datetime NOT NULL,\n  `ParseVersion` int(11) unsigned NOT NULL,\n  PRIMARY KEY (`SerialNumber`),\n  KEY `md5` (`md5`),\n  KEY `TimeAdded` (`TimeAdded`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- Data exporting was unselected.\n\n/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;\n/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;\n/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;\n/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;\n"
  },
  {
    "path": "library/lib/SQLite.Designer.xml",
    "content": "<?xml version=\"1.0\"?>\r\n<doc>\r\n    <assembly>\r\n        <name>SQLite.Designer</name>\r\n    </assembly>\r\n    <members>\r\n        <member name=\"F:SQLite.Designer.ChangePasswordDialog.components\">\r\n            <summary>\r\n            Required designer variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.ChangePasswordDialog.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Clean up any resources being used.\r\n            </summary>\r\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.ChangePasswordDialog.InitializeComponent\">\r\n            <summary>\r\n            Required method for Designer support - do not modify\r\n            the contents of this method with the code editor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:SQLite.Designer.ChangeScriptDialog.components\">\r\n            <summary>\r\n            Required designer variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.ChangeScriptDialog.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Clean up any resources being used.\r\n            </summary>\r\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.ChangeScriptDialog.InitializeComponent\">\r\n            <summary>\r\n            Required method for Designer support - do not modify\r\n            the contents of this method with the code editor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:SQLite.Designer.Editors.TableDesignerDoc.components\">\r\n            <summary>\r\n            Required designer variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.Editors.TableDesignerDoc.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Clean up any resources being used.\r\n            </summary>\r\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.Editors.TableDesignerDoc.InitializeComponent\">\r\n            <summary>\r\n            Required method for Designer support - do not modify\r\n            the contents of this method with the code editor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:SQLite.Designer.Editors.ViewDesignerDoc.components\">\r\n            <summary> \r\n            Required designer variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.Editors.ViewDesignerDoc.Dispose(System.Boolean)\">\r\n            <summary> \r\n            Clean up any resources being used.\r\n            </summary>\r\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.Editors.ViewDesignerDoc.InitializeComponent\">\r\n            <summary> \r\n            Required method for Designer support - do not modify \r\n            the contents of this method with the code editor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteAdapterDesigner\">\r\n            <summary>\r\n            The purpose of this class is to provide context menus and event support when designing a \r\n            SQLite DataSet.  Most of the functionality is implemented by MS's VSDesigner object which we\r\n            instantiate through reflection since I don't really have a design-time reference to the object\r\n            and many of the objects in VSDesigner are internal.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteAdapterDesigner.#ctor\">\r\n            <summary>\r\n            Empty constructor\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteAdapterDesigner.Initialize(System.ComponentModel.IComponent)\">\r\n            <summary>\r\n            Initialize the designer by creating a SqlDataAdapterDesigner and delegating most of our\r\n            functionality to it.\r\n            </summary>\r\n            <param name=\"component\"></param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteAdapterDesigner.CanExtend(System.Object)\">\r\n            <summary>\r\n            We extend support for DbDataAdapter-derived objects\r\n            </summary>\r\n            <param name=\"extendee\">The object wanting to be extended</param>\r\n            <returns>Whether or not we extend that object</returns>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.SQLiteAdapterDesigner.Verbs\">\r\n            <summary>\r\n            Forwards to the SqlDataAdapterDesigner object\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.SQLiteAdapterDesigner.AssociatedComponents\">\r\n            <summary>\r\n            Forwards to the SqlDataAdapterDesigner object\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteCommandDesigner\">\r\n            <summary>\r\n            This object provides a designer for a SQLiteCommand.  The reason we provide an additional\r\n            CommandDesignTimeVisible property is because certain MS designer components will look for it and\r\n            fail if its not there.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteCommandDesigner.Initialize(System.ComponentModel.IComponent)\">\r\n            <summary>\r\n            Initialize the instance with the given SQLiteCommand component\r\n            </summary>\r\n            <param name=\"component\"></param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteCommandDesigner.PreFilterAttributes(System.Collections.IDictionary)\">\r\n            <summary>\r\n            Add our designtimevisible attribute to the attributes for the item\r\n            </summary>\r\n            <param name=\"attributes\"></param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteCommandDesigner.GetCommandDesignTimeVisible(System.Data.IDbCommand)\">\r\n            <summary>\r\n            Provide a get method for the CommandDesignTimeVisible provided property\r\n            </summary>\r\n            <param name=\"command\">The SQLiteCommand we're designing for</param>\r\n            <returns>True or false if the object is visible in design mode</returns>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteCommandDesigner.SetCommandDesignTimeVisible(System.Data.IDbCommand,System.Boolean)\">\r\n            <summary>\r\n            Provide a set method for our supplied CommandDesignTimeVisible property\r\n            </summary>\r\n            <param name=\"command\">The SQLiteCommand to set</param>\r\n            <param name=\"visible\">The new designtime visible property to assign to the command</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteCommandDesigner.CanExtend(System.Object)\">\r\n            <summary>\r\n            We extend any DbCommand\r\n            </summary>\r\n            <param name=\"extendee\">The object being tested</param>\r\n            <returns>True if the object derives from DbCommand</returns>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteCommandHandler.ExecuteCommand(System.Int32,Microsoft.VisualStudio.Data.OleCommand,Microsoft.VisualStudio.Data.OleCommandExecutionOption,System.Object)\">\r\n            <summary>\r\n            This method executes a specified command, potentially based\r\n            on parameters passed in from the data view support XML.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteConnectionProperties\">\r\n            <summary>\r\n            Provides rudimentary connectionproperties support\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteConnectionStringEditor\">\r\n            <summary>\r\n            This class provides connectionstring editing support in the properties window when\r\n            using a SQLiteConnection as a toolbox component on a form (for example).\r\n            \r\n            In order to provide the dropdown list, unless someone knows a better way, I have to use\r\n            the internal VsConnectionManager class since it utilizes some interfaces in the designer\r\n            that are internal to the VSDesigner object.  We instantiate it and utilize it through reflection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteConnectionUIControl\">\r\n            <summary>\r\n            Provides a UI to edit/create SQLite database connections\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:SQLite.Designer.SQLiteConnectionUIControl.components\">\r\n            <summary>\r\n            Required designer variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteConnectionUIControl.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Clean up any resources being used.\r\n            </summary>\r\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteConnectionUIControl.InitializeComponent\">\r\n            <summary>\r\n            Required method for Designer support - do not modify\r\n            the contents of this method with the code editor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteDataAdapterToolboxItem\">\r\n            <summary>\r\n            Provides a toolboxitem for a SQLiteDataAdapter.  This is required in order for us to \r\n            pop up the connection wizard when you drop the tool on a form, and to create the hidden commands\r\n            that are assigned to the data adapter and keep them hidden.  The hiding at runtime of the controls\r\n            is accomplished both here during the creation of the components and in the SQLiteCommandDesigner\r\n            which provides properties to hide the objects when they're supposed to be hidden.\r\n            \r\n            The connection wizard is instantiated in the VSDesigner through reflection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteDataAdapterToolboxItem.CreateComponentsCore(System.ComponentModel.Design.IDesignerHost)\">\r\n            <summary>\r\n            Creates the necessary components associated with this data adapter instance\r\n            </summary>\r\n            <param name=\"host\">The designer host</param>\r\n            <returns>The components created by this toolbox item</returns>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteDataAdapterToolboxItem.GenerateName(System.ComponentModel.IContainer,System.String)\">\r\n            <summary>\r\n            Generates a unique name for the given object\r\n            </summary>\r\n            <param name=\"container\">The container where we're being instantiated</param>\r\n            <param name=\"baseName\">The core name of the object to create a unique instance of</param>\r\n            <returns>A unique name within the given container</returns>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteDataConnectionSupport\">\r\n            <summary>\r\n            This class creates many of the DDEX components when asked for by the server explorer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteDataObjectIdentifierResolver\">\r\n            <summary>\r\n            This class is used to build identifier arrays and contract them.  Typically they are \r\n            passed to SQLiteConnection.GetSchema() or are contracted for display on the screen or in the\r\n            properties window.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteDataObjectIdentifierResolver.QuickContractIdentifier(System.String,System.Object[])\">\r\n            <summary>\r\n            Strips out the schema, which we don't really support but has to be there for certain operations internal\r\n            to MS's designer implementation.\r\n            </summary>\r\n            <param name=\"typeName\">The type of identifier to contract</param>\r\n            <param name=\"fullIdentifier\">The full identifier array</param>\r\n            <returns>A contracted identifier array</returns>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.SQLiteDataObjectIdentifierResolver.Microsoft#VisualStudio#OLE#Interop#IObjectWithSite#GetSite(System.Guid@,System.IntPtr@)\">\r\n            <summary>\r\n            GetSite does not need to be implemented since\r\n            DDEX only calls SetSite to site the object.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteDataObjectSupport\">\r\n            <summary>\r\n            Doesn't do much other than provide the DataObjectSupport base object with a location\r\n            where the XML resource can be found.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteDataSourceInformation\">\r\n            <summary>\r\n            Provides basic DataSourceInformation about the underlying connection\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteDataViewSupport\">\r\n            <summary>\r\n            Provides DataViewSupport with a location where the XML file is for the Server Explorer's view.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLitePackage\">\r\n            <summary>\r\n            Ideally we'd be a package provider, but the VS Express Editions don't support us, so this class\r\n            exists so that in the future we can perhaps work with the Express Editions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.SQLiteProviderObjectFactory\">\r\n            <summary>\r\n            For a package-based provider, this factory creates instances of the main objects we support\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:SQLite.Designer.TableNameDialog.components\">\r\n            <summary>\r\n            Required designer variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.TableNameDialog.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Clean up any resources being used.\r\n            </summary>\r\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n        </member>\r\n        <member name=\"M:SQLite.Designer.TableNameDialog.InitializeComponent\">\r\n            <summary>\r\n            Required method for Designer support - do not modify\r\n            the contents of this method with the code editor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:SQLite.Designer.VSPackage\">\r\n            <summary>\r\n              A strongly-typed resource class, for looking up localized strings, etc.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage.ResourceManager\">\r\n            <summary>\r\n              Returns the cached ResourceManager instance used by this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage.Culture\">\r\n            <summary>\r\n              Overrides the current thread's CurrentUICulture property for all\r\n              resource lookups using this strongly typed resource class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage._400\">\r\n            <summary>\r\n              Looks up a localized string similar to RZE1PAAIMRZRE2CKM3CIRRIREIJQR1PTAEHTRHKTCPP1KKRRJQK9CTM9ZHMRETI9E9J8REKEA1MER9PDKQDIH8HMRRH2DIACHIP1KHK2IAZKM8R0EZRTKDHADII9ICCH.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage.Decrypt\">\r\n            <summary>\r\n              Looks up a localized string similar to The database and its metadata will be un-encrypted.  No password will be required to open the database and view its contents..\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage.Encrypt\">\r\n            <summary>\r\n              Looks up a localized string similar to The database and its metadata will be encrypted using the supplied password as a hash..\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage.ReEncrypt\">\r\n            <summary>\r\n              Looks up a localized string similar to The database and its metadata will be re-encrypted using the supplied password as a hash..\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:SQLite.Designer.VSPackage.ToolboxItems\">\r\n             <summary>\r\n               Looks up a localized string similar to [SQLite]\r\n            System.Data.SQLite.SQLiteConnection, System.Data.SQLite\r\n            System.Data.SQLite.SQLiteDataAdapter, System.Data.SQLite\r\n            System.Data.SQLite.SQLiteCommand, System.Data.SQLite\r\n            .\r\n             </summary>\r\n        </member>\r\n    </members>\r\n</doc>\r\n"
  },
  {
    "path": "library/lib/System.Data.SQLite.Linq.xml",
    "content": "<?xml version=\"1.0\"?>\r\n<doc>\r\n    <assembly>\r\n        <name>System.Data.SQLite.Linq</name>\r\n    </assembly>\r\n    <members>\r\n        <member name=\"T:System.Data.SQLite.Linq.Properties.Resources\">\r\n            <summary>\r\n              A strongly-typed resource class, for looking up localized strings, etc.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.Properties.Resources.ResourceManager\">\r\n            <summary>\r\n              Returns the cached ResourceManager instance used by this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.Properties.Resources.Culture\">\r\n            <summary>\r\n              Overrides the current thread's CurrentUICulture property for all\r\n              resource lookups using this strongly typed resource class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.Properties.Resources.SQL_CONSTRAINTCOLUMNS\">\r\n             <summary>\r\n               Looks up a localized string similar to CREATE TEMP VIEW SCHEMACONSTRAINTCOLUMNS AS\r\n            SELECT CONSTRAINT_CATALOG, NULL AS CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, NULL AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME\r\n            FROM TEMP.SCHEMAINDEXCOLUMNS\r\n            UNION\r\n            SELECT CONSTRAINT_CATALOG, NULL, CONSTRAINT_NAME, TABLE_CATALOG, NULL, TABLE_NAME, FKEY_FROM_COLUMN\r\n            FROM TEMP.SCHEMAFOREIGNKEYS;.\r\n             </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.Properties.Resources.SQL_CONSTRAINTS\">\r\n             <summary>\r\n               Looks up a localized string similar to CREATE TEMP VIEW SCHEMACONSTRAINTS AS\r\n            SELECT INDEX_CATALOG AS CONSTRAINT_CATALOG, NULL AS CONSTRAINT_SCHEMA, INDEX_NAME AS CONSTRAINT_NAME, TABLE_CATALOG, NULL AS TABLE_SCHEMA, TABLE_NAME, &apos;PRIMARY KEY&apos; AS CONSTRAINT_TYPE, 0 AS IS_DEFERRABLE, 0 AS INITIALLY_DEFERRED, NULL AS CHECK_CLAUSE\r\n            FROM TEMP.SCHEMAINDEXES WHERE PRIMARY_KEY = 1\r\n            UNION\r\n            SELECT INDEX_CATALOG, NULL, INDEX_NAME, TABLE_CATALOG, NULL, TABLE_NAME, &apos;UNIQUE&apos;, 0, 0, NULL\r\n            FROM TEMP.SCHEMAINDEXES WHERE PRIMARY_KEY = 0 AND [UNIQUE] = 1\r\n            UNION\r\n             [rest of string was truncated]&quot;;.\r\n             </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.DmlSqlGenerator\">\r\n            <summary>\r\n            Class generating SQL for a DML command tree.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.DmlSqlGenerator.GenerateReturningSql(System.Text.StringBuilder,System.Data.Common.CommandTrees.DbModificationCommandTree,System.Data.SQLite.Linq.DmlSqlGenerator.ExpressionTranslator,System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            Generates SQL fragment returning server-generated values.\r\n            Requires: translator knows about member values so that we can figure out\r\n            how to construct the key predicate.\r\n            <code>\r\n            Sample SQL:\r\n                \r\n                select IdentityValue\r\n                from dbo.MyTable\r\n                where @@ROWCOUNT > 0 and IdentityValue = scope_identity()\r\n            \r\n            or\r\n            \r\n                select TimestamptValue\r\n                from dbo.MyTable\r\n                where @@ROWCOUNT > 0 and Id = 1\r\n            \r\n            Note that we filter on rowcount to ensure no rows are returned if no rows were modified.\r\n            </code>\r\n            </summary>\r\n            <param name=\"commandText\">Builder containing command text</param>\r\n            <param name=\"tree\">Modification command tree</param>\r\n            <param name=\"translator\">Translator used to produce DML SQL statement\r\n            for the tree</param>\r\n            <param name=\"returning\">Returning expression. If null, the method returns\r\n            immediately without producing a SELECT statement.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.DmlSqlGenerator.ExpressionTranslator\">\r\n            <summary>\r\n            Lightweight expression translator for DML expression trees, which have constrained\r\n            scope and support.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.DmlSqlGenerator.ExpressionTranslator.#ctor(System.Text.StringBuilder,System.Data.Common.CommandTrees.DbModificationCommandTree,System.Boolean,System.String)\">\r\n            <summary>\r\n            Initialize a new expression translator populating the given string builder\r\n            with command text. Command text builder and command tree must not be null.\r\n            </summary>\r\n            <param name=\"commandText\">Command text with which to populate commands</param>\r\n            <param name=\"commandTree\">Command tree generating SQL</param>\r\n            <param name=\"preserveMemberValues\">Indicates whether the translator should preserve\r\n            member values while compiling t-SQL (only needed for server generation)</param>\r\n            <param name=\"kind\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.DmlSqlGenerator.ExpressionTranslator.RegisterMemberValue(System.Data.Common.CommandTrees.DbExpression,System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            Call this method to register a property value pair so the translator \"remembers\"\r\n            the values for members of the row being modified. These values can then be used\r\n            to form a predicate for server-generation (based on the key of the row)\r\n            </summary>\r\n            <param name=\"propertyExpression\">DbExpression containing the column reference (property expression).</param>\r\n            <param name=\"value\">DbExpression containing the value of the column.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.ISqlFragment\">\r\n            <summary>\r\n            Represents the sql fragment for any node in the query tree.\r\n            </summary>\r\n            <remarks>\r\n            The nodes in a query tree produce various kinds of sql\r\n            <list type=\"bullet\">\r\n            <item>A select statement.</item>\r\n            <item>A reference to an extent. (symbol)</item>\r\n            <item>A raw string.</item>\r\n            </list>\r\n            We have this interface to allow for a common return type for the methods\r\n            in the expression visitor <see cref=\"T:System.Data.Common.CommandTrees.DbExpressionVisitor`1\"/>\r\n            \r\n            At the end of translation, the sql fragments are converted into real strings.\r\n            </remarks>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.ISqlFragment.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\">\r\n            <summary>\r\n            Write the string represented by this fragment into the stream.\r\n            </summary>\r\n            <param name=\"writer\">The stream that collects the strings.</param>\r\n            <param name=\"sqlGenerator\">Context information used for renaming.\r\n            The global lists are used to generated new names without collisions.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.JoinSymbol\">\r\n            <summary>\r\n            A Join symbol is a special kind of Symbol.\r\n            It has to carry additional information\r\n            <list type=\"bullet\">\r\n            <item>ColumnList for the list of columns in the select clause if this\r\n            symbol represents a sql select statement.  This is set by <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.AddDefaultColumns(System.Data.SQLite.Linq.SqlSelectStatement)\"/>. </item>\r\n            <item>ExtentList is the list of extents in the select clause.</item>\r\n            <item>FlattenedExtentList - if the Join has multiple extents flattened at the \r\n            top level, we need this information to ensure that extent aliases are renamed\r\n            correctly in <see cref=\"M:System.Data.SQLite.Linq.SqlSelectStatement.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\"/></item>\r\n            <item>NameToExtent has all the extents in ExtentList as a dictionary.\r\n            This is used by <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbPropertyExpression)\"/> to flatten\r\n            record accesses.</item>\r\n            <item>IsNestedJoin - is used to determine whether a JoinSymbol is an \r\n            ordinary join symbol, or one that has a corresponding SqlSelectStatement.</item>\r\n            </list>\r\n            \r\n            All the lists are set exactly once, and then used for lookups/enumerated.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.Symbol\">\r\n             <summary>\r\n             <see cref=\"T:System.Data.SQLite.Linq.SymbolTable\"/>\r\n             This class represents an extent/nested select statement,\r\n             or a column.\r\n            \r\n             The important fields are Name, Type and NewName.\r\n             NewName starts off the same as Name, and is then modified as necessary.\r\n            \r\n            \r\n             The rest are used by special symbols.\r\n             e.g. NeedsRenaming is used by columns to indicate that a new name must\r\n             be picked for the column in the second phase of translation.\r\n            \r\n             IsUnnest is used by symbols for a collection expression used as a from clause.\r\n             This allows <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.AddFromSymbol(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.SQLite.Linq.Symbol,System.Boolean)\"/> to add the column list\r\n             after the alias.\r\n            \r\n             </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.Symbol.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\">\r\n             <summary>\r\n             Write this symbol out as a string for sql.  This is just\r\n             the new name of the symbol (which could be the same as the old name).\r\n            \r\n             We rename columns here if necessary.\r\n             </summary>\r\n             <param name=\"writer\"></param>\r\n             <param name=\"sqlGenerator\"></param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.MetadataHelpers\">\r\n            <summary>\r\n            A set of static helpers for type metadata\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.NullableFacetName\">\r\n            <summary>\r\n            Name of the Nullable Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.GetEdmType``1(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Cast the EdmType of the given type usage to the given TEdmType\r\n            </summary>\r\n            <typeparam name=\"TEdmType\"></typeparam>\r\n            <param name=\"typeUsage\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.GetElementTypeUsage(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Gets the TypeUsage of the elment if the given type is a collection type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.GetProperties(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Retrieves the properties of in the EdmType underlying the input type usage, \r\n             if that EdmType is a structured type (EntityType, RowType). \r\n            </summary>\r\n            <param name=\"typeUsage\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.GetProperties(System.Data.Metadata.Edm.EdmType)\">\r\n            <summary>\r\n            Retrieves the properties of the given EdmType, if it is\r\n             a structured type (EntityType, RowType). \r\n            </summary>\r\n            <param name=\"edmType\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.IsCollectionType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Is the given type usage over a collection type\r\n            </summary>\r\n            <param name=\"typeUsage\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.IsCollectionType(System.Data.Metadata.Edm.EdmType)\">\r\n            <summary>\r\n            Is the given type a collection type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.IsPrimitiveType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Is the given type usage over a primitive type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.IsPrimitiveType(System.Data.Metadata.Edm.EdmType)\">\r\n            <summary>\r\n            Is the given type a primitive type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.IsRowType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Is the given type usage over a row type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.IsRowType(System.Data.Metadata.Edm.EdmType)\">\r\n            <summary>\r\n            Is the given type a row type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.TryGetPrimitiveTypeKind(System.Data.Metadata.Edm.TypeUsage,System.Data.Metadata.Edm.PrimitiveTypeKind@)\">\r\n            <summary>\r\n            Gets the type of the given type usage if it is a primitive type\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <param name=\"typeKind\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.TryGetValueForMetadataProperty``1(System.Data.Metadata.Edm.MetadataItem,System.String)\">\r\n            <summary>\r\n            Gets the value for the metadata property with the given name\r\n            </summary>\r\n            <typeparam name=\"T\"></typeparam>\r\n            <param name=\"item\"></param>\r\n            <param name=\"propertyName\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.MaxLengthFacetName\">\r\n            <summary>\r\n            Name of the MaxLength Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.UnicodeFacetName\">\r\n            <summary>\r\n            Name of the Unicode Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.FixedLengthFacetName\">\r\n            <summary>\r\n            Name of the FixedLength Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.PreserveSecondsFacetName\">\r\n            <summary>\r\n            Name of the PreserveSeconds Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.PrecisionFacetName\">\r\n            <summary>\r\n            Name of the Precision Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.ScaleFacetName\">\r\n            <summary>\r\n            Name of the Scale Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.MetadataHelpers.DefaultValueFacetName\">\r\n            <summary>\r\n            Name of the DefaultValue Facet\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.GetFacetValueOrDefault``1(System.Data.Metadata.Edm.TypeUsage,System.String,``0)\">\r\n            <summary>\r\n            Get the value specified on the given type usage for the given facet name.\r\n            If the faces does not have a value specifid or that value is null returns\r\n            the default value for that facet.\r\n            </summary>\r\n            <typeparam name=\"T\"></typeparam>\r\n            <param name=\"type\"></param>\r\n            <param name=\"facetName\"></param>\r\n            <param name=\"defaultValue\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.MetadataHelpers.TryGetTypeFacetDescriptionByName(System.Data.Metadata.Edm.EdmType,System.String,System.Data.Metadata.Edm.FacetDescription@)\">\r\n            <summary>\r\n            Given a facet name and an EdmType, tries to get that facet's description.\r\n            </summary>\r\n            <param name=\"edmType\"></param>\r\n            <param name=\"facetName\"></param>\r\n            <param name=\"facetDescription\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SkipClause\">\r\n            <summary>\r\n            SkipClause represents the a SKIP expression in a SqlSelectStatement.\r\n            It has a count property, which indicates how many rows should be skipped.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SkipClause.#ctor(System.Data.SQLite.Linq.ISqlFragment)\">\r\n            <summary>\r\n            Creates a SkipClause with the given skipCount.\r\n            </summary>\r\n            <param name=\"skipCount\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SkipClause.#ctor(System.Int32)\">\r\n            <summary>\r\n            Creates a SkipClause with the given skipCount.\r\n            </summary>\r\n            <param name=\"skipCount\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SkipClause.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\">\r\n            <summary>\r\n            Write out the SKIP part of sql select statement \r\n            It basically writes OFFSET (X).\r\n            </summary>\r\n            <param name=\"writer\"></param>\r\n            <param name=\"sqlGenerator\"></param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.SkipClause.SkipCount\">\r\n            <summary>\r\n            How many rows should be skipped.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SqlBuilder\">\r\n            <summary>\r\n            This class is like StringBuilder.  While traversing the tree for the first time, \r\n            we do not know all the strings that need to be appended e.g. things that need to be\r\n            renamed, nested select statements etc.  So, we use a builder that can collect\r\n            all kinds of sql fragments.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlBuilder.Append(System.Object)\">\r\n            <summary>\r\n            Add an object to the list - we do not verify that it is a proper sql fragment\r\n            since this is an internal method.\r\n            </summary>\r\n            <param name=\"s\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlBuilder.AppendLine\">\r\n            <summary>\r\n            This is to pretty print the SQL.  The writer <see cref=\"M:System.Data.SQLite.Linq.SqlWriter.Write(System.String)\"/>\r\n            needs to know about new lines so that it can add the right amount of \r\n            indentation at the beginning of lines.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlBuilder.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\">\r\n            <summary>\r\n            We delegate the writing of the fragment to the appropriate type.\r\n            </summary>\r\n            <param name=\"writer\"></param>\r\n            <param name=\"sqlGenerator\"></param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.SqlBuilder.IsEmpty\">\r\n            <summary>\r\n            Whether the builder is empty.  This is used by the <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbProjectExpression)\"/>\r\n            to determine whether a sql statement can be reused.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SqlGenerator\">\r\n             <summary>\r\n             Translates the command object into a SQL string that can be executed on\r\n             SQLite.\r\n             </summary>\r\n             <remarks>\r\n             The translation is implemented as a visitor <see cref=\"T:System.Data.Common.CommandTrees.DbExpressionVisitor`1\"/>\r\n             over the query tree.  It makes a single pass over the tree, collecting the sql\r\n             fragments for the various nodes in the tree <see cref=\"T:System.Data.SQLite.Linq.ISqlFragment\"/>.\r\n            \r\n             The major operations are\r\n             <list type=\"bullet\">\r\n             <item>Select statement minimization.  Multiple nodes in the query tree\r\n             that can be part of a single SQL select statement are merged. e.g. a\r\n             Filter node that is the input of a Project node can typically share the\r\n             same SQL statement.</item>\r\n             <item>Alpha-renaming.  As a result of the statement minimization above, there\r\n             could be name collisions when using correlated subqueries\r\n             <example>\r\n             <code>\r\n             Filter(\r\n                 b = Project( c.x\r\n                     c = Extent(foo)\r\n                     )\r\n                 exists (\r\n                     Filter(\r\n                         c = Extent(foo)\r\n                         b.x = c.x\r\n                         )\r\n                 )\r\n             )\r\n             </code>\r\n             The first Filter, Project and Extent will share the same SQL select statement.\r\n             The alias for the Project i.e. b, will be replaced with c.\r\n             If the alias c for the Filter within the exists clause is not renamed,\r\n             we will get <c>c.x = c.x</c>, which is incorrect.\r\n             Instead, the alias c within the second filter should be renamed to c1, to give\r\n             <c>c.x = c1.x</c> i.e. b is renamed to c, and c is renamed to c1.\r\n             </example>\r\n             </item>\r\n             <item>Join flattening.  In the query tree, a list of join nodes is typically\r\n             represented as a tree of Join nodes, each with 2 children. e.g.\r\n             <example>\r\n             <code>\r\n             a = Join(InnerJoin\r\n                 b = Join(CrossJoin\r\n                     c = Extent(foo)\r\n                     d = Extent(foo)\r\n                     )\r\n                 e = Extent(foo)\r\n                 on b.c.x = e.x\r\n                 )\r\n             </code>\r\n             If translated directly, this will be translated to\r\n             <code>\r\n             FROM ( SELECT c.*, d.*\r\n                     FROM foo as c\r\n                     CROSS JOIN foo as d) as b\r\n             INNER JOIN foo as e on b.x' = e.x\r\n             </code>\r\n             It would be better to translate this as\r\n             <code>\r\n             FROM foo as c\r\n             CROSS JOIN foo as d\r\n             INNER JOIN foo as e on c.x = e.x\r\n             </code>\r\n             This allows the optimizer to choose an appropriate join ordering for evaluation.\r\n             </example>\r\n             </item>\r\n             <item>Select * and column renaming.  In the example above, we noticed that\r\n             in some cases we add <c>SELECT * FROM ...</c> to complete the SQL\r\n             statement. i.e. there is no explicit PROJECT list.\r\n             In this case, we enumerate all the columns available in the FROM clause\r\n             This is particularly problematic in the case of Join trees, since the columns\r\n             from the extents joined might have the same name - this is illegal.  To solve\r\n             this problem, we will have to rename columns if they are part of a SELECT *\r\n             for a JOIN node - we do not need renaming in any other situation.\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.AddDefaultColumns(System.Data.SQLite.Linq.SqlSelectStatement)\"/>.\r\n             </item>\r\n             </list>\r\n            \r\n             <para>\r\n             Renaming issues.\r\n             When rows or columns are renamed, we produce names that are unique globally\r\n             with respect to the query.  The names are derived from the original names,\r\n             with an integer as a suffix. e.g. CustomerId will be renamed to CustomerId1,\r\n             CustomerId2 etc.\r\n            \r\n             Since the names generated are globally unique, they will not conflict when the\r\n             columns of a JOIN SELECT statement are joined with another JOIN. \r\n            \r\n             </para>\r\n            \r\n             <para>\r\n             Record flattening.\r\n             SQL server does not have the concept of records.  However, a join statement\r\n             produces records.  We have to flatten the record accesses into a simple\r\n             <c>alias.column</c> form.  <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbPropertyExpression)\"/>\r\n             </para>\r\n            \r\n             <para>\r\n             Building the SQL.\r\n             There are 2 phases\r\n             <list type=\"numbered\">\r\n             <item>Traverse the tree, producing a sql builder <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></item>\r\n             <item>Write the SqlBuilder into a string, renaming the aliases and columns\r\n             as needed.</item>\r\n             </list>\r\n            \r\n             In the first phase, we traverse the tree.  We cannot generate the SQL string\r\n             right away, since\r\n             <list type=\"bullet\">\r\n             <item>The WHERE clause has to be visited before the from clause.</item>\r\n             <item>extent aliases and column aliases need to be renamed.  To minimize\r\n             renaming collisions, all the names used must be known, before any renaming\r\n             choice is made.</item>\r\n             </list>\r\n             To defer the renaming choices, we use symbols <see cref=\"T:System.Data.SQLite.Linq.Symbol\"/>.  These\r\n             are renamed in the second phase.\r\n            \r\n             Since visitor methods cannot transfer information to child nodes through\r\n             parameters, we use some global stacks,\r\n             <list type=\"bullet\">\r\n             <item>A stack for the current SQL select statement.  This is needed by\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbVariableReferenceExpression)\"/> to create a\r\n             list of free variables used by a select statement.  This is needed for\r\n             alias renaming.\r\n             </item>\r\n             <item>A stack for the join context.  When visiting a <see cref=\"T:System.Data.Common.CommandTrees.DbScanExpression\"/>,\r\n             we need to know whether we are inside a join or not.  If we are inside\r\n             a join, we do not create a new SELECT statement.</item>\r\n             </list>\r\n             </para>\r\n            \r\n             <para>\r\n             Global state.\r\n             To enable renaming, we maintain\r\n             <list type=\"bullet\">\r\n             <item>The set of all extent aliases used.</item>\r\n             <item>The set of all column aliases used.</item>\r\n             </list>\r\n            \r\n             Finally, we have a symbol table to lookup variable references.  All references\r\n             to the same extent have the same symbol.\r\n             </para>\r\n            \r\n             <para>\r\n             Sql select statement sharing.\r\n            \r\n             Each of the relational operator nodes\r\n             <list type=\"bullet\">\r\n             <item>Project</item>\r\n             <item>Filter</item>\r\n             <item>GroupBy</item>\r\n             <item>Sort/OrderBy</item>\r\n             </list>\r\n             can add its non-input (e.g. project, predicate, sort order etc.) to\r\n             the SQL statement for the input, or create a new SQL statement.\r\n             If it chooses to reuse the input's SQL statement, we play the following\r\n             symbol table trick to accomplish renaming.  The symbol table entry for\r\n             the alias of the current node points to the symbol for the input in\r\n             the input's SQL statement.\r\n             <example>\r\n             <code>\r\n             Project(b.x\r\n                 b = Filter(\r\n                     c = Extent(foo)\r\n                     c.x = 5)\r\n                 )\r\n             </code>\r\n             The Extent node creates a new SqlSelectStatement.  This is added to the\r\n             symbol table by the Filter as {c, Symbol(c)}.  Thus, <c>c.x</c> is resolved to\r\n             <c>Symbol(c).x</c>.\r\n             Looking at the project node, we add {b, Symbol(c)} to the symbol table if the\r\n             SQL statement is reused, and {b, Symbol(b)}, if there is no reuse.\r\n            \r\n             Thus, <c>b.x</c> is resolved to <c>Symbol(c).x</c> if there is reuse, and to\r\n             <c>Symbol(b).x</c> if there is no reuse.\r\n             </example>\r\n             </para>\r\n             </remarks>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.SqlGenerator.selectStatementStack\">\r\n            <summary>\r\n            Every relational node has to pass its SELECT statement to its children\r\n            This allows them (DbVariableReferenceExpression eventually) to update the list of\r\n            outer extents (free variables) used by this select statement.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.SqlGenerator.isParentAJoinStack\">\r\n            <summary>\r\n            Nested joins and extents need to know whether they should create\r\n            a new Select statement, or reuse the parent's.  This flag\r\n            indicates whether the parent is a join or not.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.SqlGenerator.isVarRefSingle\">\r\n            <summary>\r\n            VariableReferenceExpressions are allowed only as children of DbPropertyExpression\r\n            or MethodExpression.  The cheapest way to ensure this is to set the following\r\n            property in DbVariableReferenceExpression and reset it in the allowed parent expressions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.InitializeBuiltInFunctionHandlers\">\r\n            <summary>\r\n            All special built-in functions and their handlers\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.InitializeCanonicalFunctionHandlers\">\r\n            <summary>\r\n            All special non-aggregate canonical functions and their handlers\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.InitializeDatepartKeywords\">\r\n            <summary>\r\n            Valid datepart values\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.InitializeFunctionNameToOperatorDictionary\">\r\n            <summary>\r\n            Initializes the mapping from functions to T-SQL operators\r\n            for all functions that translate to T-SQL operators\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.#ctor(System.Data.SQLite.Linq.SQLiteProviderManifest)\">\r\n            <summary>\r\n            Basic constructor. \r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.GenerateSql(System.Data.SQLite.Linq.SQLiteProviderManifest,System.Data.Common.CommandTrees.DbCommandTree,System.Collections.Generic.List{System.Data.Common.DbParameter}@,System.Data.CommandType@)\">\r\n            <summary>\r\n            General purpose static function that can be called from System.Data assembly\r\n            </summary>\r\n            <param name=\"manifest\"></param>\r\n            <param name=\"tree\">command tree</param>\r\n            <param name=\"parameters\">Parameters to add to the command tree corresponding\r\n            to constants in the command tree. Used only in ModificationCommandTrees.</param>\r\n            <param name=\"commandType\"></param>\r\n            <returns>The string representing the SQL to be executed.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.GenerateSql(System.Data.Common.CommandTrees.DbQueryCommandTree)\">\r\n             <summary>\r\n             Translate a command tree to a SQL string.\r\n            \r\n             The input tree could be translated to either a SQL SELECT statement\r\n             or a SELECT expression.  This choice is made based on the return type\r\n             of the expression\r\n             CollectionType => select statement\r\n             non collection type => select expression\r\n             </summary>\r\n             <param name=\"tree\"></param>\r\n             <returns>The string representing the SQL to be executed.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.GenerateFunctionSql(System.Data.Common.CommandTrees.DbFunctionCommandTree,System.Data.CommandType@)\">\r\n            <summary>\r\n            Translate a function command tree to a SQL string.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.WriteSql(System.Data.SQLite.Linq.ISqlFragment)\">\r\n            <summary>\r\n            Convert the SQL fragments to a string.\r\n            We have to setup the Stream for writing.\r\n            </summary>\r\n            <param name=\"sqlStatement\"></param>\r\n            <returns>A string representing the SQL to be executed.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbAndExpression)\">\r\n            <summary>\r\n            Translate(left) AND Translate(right)\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/>.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbApplyExpression)\">\r\n            <summary>\r\n            An apply is just like a join, so it shares the common join processing\r\n            in <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitJoinExpression(System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbExpressionBinding},System.Data.Common.CommandTrees.DbExpressionKind,System.String,System.Data.Common.CommandTrees.DbExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/>.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbArithmeticExpression)\">\r\n            <summary>\r\n            For binary expressions, we delegate to <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitBinaryExpression(System.String,System.Data.Common.CommandTrees.DbExpression,System.Data.Common.CommandTrees.DbExpression)\"/>.\r\n            We handle the other expressions directly.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbCaseExpression)\">\r\n            <summary>\r\n            If the ELSE clause is null, we do not write it out.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbCastExpression)\">\r\n             <summary>\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbComparisonExpression)\">\r\n            <summary>\r\n            The parser generates Not(Equals(...)) for &lt;&gt;.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/>.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbConstantExpression)\">\r\n            <summary>\r\n            Constants will be send to the store as part of the generated TSQL, not as parameters\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/>.  Strings are wrapped in single\r\n            quotes and escaped.  Numbers are written literally.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbDerefExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbDerefExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbDistinctExpression)\">\r\n            <summary>\r\n            The DISTINCT has to be added to the beginning of SqlSelectStatement.Select,\r\n            but it might be too late for that.  So, we use a flag on SqlSelectStatement\r\n            instead, and add the \"DISTINCT\" in the second phase.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbElementExpression)\">\r\n            <summary>\r\n            An element expression returns a scalar - so it is translated to\r\n            ( Select ... )\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbExceptExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbUnionAllExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            Only concrete expression types will be visited.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbScanExpression)\">\r\n             <summary>\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>If we are in a Join context, returns a <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/>\r\n             with the extent name, otherwise, a new <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/>\r\n             with the From field set.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.GetTargetTSql(System.Data.Metadata.Edm.EntitySetBase)\">\r\n            <summary>\r\n            Gets escaped TSql identifier describing this entity set.\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\">\r\n            <summary>\r\n            The bodies of <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/>, <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbGroupByExpression)\"/>,\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbProjectExpression)\"/>, <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbSortExpression)\"/> are similar.\r\n            Each does the following.\r\n            <list type=\"number\">\r\n            <item> Visit the input expression</item>\r\n            <item> Determine if the input's SQL statement can be reused, or a new\r\n            one must be created.</item>\r\n            <item>Create a new symbol table scope</item>\r\n            <item>Push the Sql statement onto a stack, so that children can\r\n            update the free variable list.</item>\r\n            <item>Visit the non-input expression.</item>\r\n            <item>Cleanup</item>\r\n            </list>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Lambda functions are not supported.\r\n            The functions supported are:\r\n            <list type=\"number\">\r\n            <item>Canonical Functions - We recognize these by their dataspace, it is DataSpace.CSpace</item>\r\n            <item>Store Functions - We recognize these by the BuiltInAttribute and not being Canonical</item>\r\n            <item>User-defined Functions - All the rest except for Lambda functions</item>\r\n            </list>\r\n            We handle Canonical and Store functions the same way: If they are in the list of functions \r\n            that need special handling, we invoke the appropriate handler, otherwise we translate them to\r\n            FunctionName(arg1, arg2, ..., argn).\r\n            We translate user-defined functions to NamespaceName.FunctionName(arg1, arg2, ..., argn).\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbEntityRefExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbEntityRefExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbRefKeyExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbRefKeyExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbGroupByExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/> for general details.\r\n            We modify both the GroupBy and the Select fields of the SqlSelectStatement.\r\n            GroupBy gets just the keys without aliases,\r\n            and Select gets the keys and the aggregates with aliases.\r\n            \r\n            Whenever there exists at least one aggregate with an argument that is not is not a simple\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbPropertyExpression\"/>  over <see cref=\"T:System.Data.Common.CommandTrees.DbVariableReferenceExpression\"/>, \r\n            we create a nested query in which we alias the arguments to the aggregates. \r\n            That is due to the following two limitations of Sql Server:\r\n            <list type=\"number\">\r\n            <item>If an expression being aggregated contains an outer reference, then that outer \r\n            reference must be the only column referenced in the expression </item>\r\n            <item>Sql Server cannot perform an aggregate function on an expression containing \r\n            an aggregate or a subquery. </item>\r\n            </list>\r\n            \r\n            The default translation, without inner query is: \r\n            \r\n                SELECT \r\n                    kexp1 AS key1, kexp2 AS key2,... kexpn AS keyn, \r\n                    aggf1(aexpr1) AS agg1, .. aggfn(aexprn) AS aggn\r\n                FROM input AS a\r\n                GROUP BY kexp1, kexp2, .. kexpn\r\n            \r\n            When we inject an innner query, the equivalent translation is:\r\n            \r\n                SELECT \r\n                    key1 AS key1, key2 AS key2, .. keyn AS keys,  \r\n                    aggf1(agg1) AS agg1, aggfn(aggn) AS aggn\r\n                FROM (\r\n                        SELECT \r\n                            kexp1 AS key1, kexp2 AS key2,... kexpn AS keyn, \r\n                            aexpr1 AS agg1, .. aexprn AS aggn\r\n                        FROM input AS a\r\n                    ) as a\r\n                GROUP BY key1, key2, keyn\r\n            \r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIntersectExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbUnionAllExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIsEmptyExpression)\">\r\n             <summary>\r\n             Not(IsEmpty) has to be handled specially, so we delegate to\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitIsEmptyExpression(System.Data.Common.CommandTrees.DbIsEmptyExpression,System.Boolean)\"/>.\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/>.\r\n             <code>[NOT] EXISTS( ... )</code>\r\n             </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIsNullExpression)\">\r\n            <summary>\r\n            Not(IsNull) is handled specially, so we delegate to\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitIsNullExpression(System.Data.Common.CommandTrees.DbIsNullExpression,System.Boolean)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/>\r\n            <code>IS [NOT] NULL</code>\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIsOfExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbIsOfExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbCrossJoinExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitJoinExpression(System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbExpressionBinding},System.Data.Common.CommandTrees.DbExpressionKind,System.String,System.Data.Common.CommandTrees.DbExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/>.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbJoinExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitJoinExpression(System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbExpressionBinding},System.Data.Common.CommandTrees.DbExpressionKind,System.String,System.Data.Common.CommandTrees.DbExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/>.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbLikeExpression)\">\r\n             <summary>\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbLimitExpression)\">\r\n            <summary>\r\n             Translates to TOP expression.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbNewInstanceExpression)\">\r\n             <summary>\r\n             DbNewInstanceExpression is allowed as a child of DbProjectExpression only.\r\n             If anyone else is the parent, we throw.\r\n             We also perform special casing for collections - where we could convert\r\n             them into Unions\r\n            \r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitNewInstanceExpression(System.Data.Common.CommandTrees.DbNewInstanceExpression)\"/> for the actual implementation.\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbNotExpression)\">\r\n            <summary>\r\n            The Not expression may cause the translation of its child to change.\r\n            These children are\r\n            <list type=\"bullet\">\r\n            <item><see cref=\"T:System.Data.Common.CommandTrees.DbNotExpression\"/>NOT(Not(x)) becomes x</item>\r\n            <item><see cref=\"T:System.Data.Common.CommandTrees.DbIsEmptyExpression\"/>NOT EXISTS becomes EXISTS</item>\r\n            <item><see cref=\"T:System.Data.Common.CommandTrees.DbIsNullExpression\"/>IS NULL becomes IS NOT NULL</item>\r\n            <item><see cref=\"T:System.Data.Common.CommandTrees.DbComparisonExpression\"/>= becomes&lt;&gt; </item>\r\n            </list>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbNullExpression)\">\r\n            <summary>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns><see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbOfTypeExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbOfTypeExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbOrExpression)\">\r\n             <summary>\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n             <seealso cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbAndExpression)\"/>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbParameterReferenceExpression)\">\r\n             <summary>\r\n            \r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbProjectExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/> for the general ideas.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/></returns>\r\n            <seealso cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbPropertyExpression)\">\r\n             <summary>\r\n             This method handles record flattening, which works as follows.\r\n             consider an expression <c>Prop(y, Prop(x, Prop(d, Prop(c, Prop(b, Var(a)))))</c>\r\n             where a,b,c are joins, d is an extent and x and y are fields.\r\n             b has been flattened into a, and has its own SELECT statement.\r\n             c has been flattened into b.\r\n             d has been flattened into c.\r\n            \r\n             We visit the instance, so we reach Var(a) first.  This gives us a (join)symbol.\r\n             Symbol(a).b gives us a join symbol, with a SELECT statement i.e. Symbol(b).\r\n             From this point on , we need to remember Symbol(b) as the source alias,\r\n             and then try to find the column.  So, we use a SymbolPair.\r\n            \r\n             We have reached the end when the symbol no longer points to a join symbol.\r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.JoinSymbol\"/> if we have not reached the first\r\n             Join node that has a SELECT statement.\r\n             A <see cref=\"T:System.Data.SQLite.Linq.SymbolPair\"/> if we have seen the JoinNode, and it has\r\n             a SELECT statement.\r\n             A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/> with {Input}.propertyName otherwise.\r\n             </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbQuantifierExpression)\">\r\n            <summary>\r\n            Any(input, x) => Exists(Filter(input,x))\r\n            All(input, x) => Not Exists(Filter(input, not(x))\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbRefExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbRefExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbRelationshipNavigationExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbRelationshipNavigationExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbSkipExpression)\">\r\n            <summary>\r\n            For Sql9 it translates to:\r\n            SELECT Y.x1, Y.x2, ..., Y.xn\r\n            FROM (\r\n                SELECT X.x1, X.x2, ..., X.xn, row_number() OVER (ORDER BY sk1, sk2, ...) AS [row_number] \r\n                FROM input as X \r\n                ) as Y\r\n            WHERE Y.[row_number] &gt; count \r\n            ORDER BY sk1, sk2, ...\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbSortExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/></returns>\r\n            <seealso cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbTreatExpression)\">\r\n            <summary>\r\n            <see cref=\"T:System.Data.Common.CommandTrees.DbTreatExpression\"/> is illegal at this stage\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbUnionAllExpression)\">\r\n             <summary>\r\n             This code is shared by <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbExceptExpression)\"/>\r\n             and <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIntersectExpression)\"/>\r\n            \r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitSetOpExpression(System.Data.Common.CommandTrees.DbExpression,System.Data.Common.CommandTrees.DbExpression,System.String)\"/>\r\n             Since the left and right expression may not be Sql select statements,\r\n             we must wrap them up to look like SQL select statements.\r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbVariableReferenceExpression)\">\r\n             <summary>\r\n             This method determines whether an extent from an outer scope(free variable)\r\n             is used in the CurrentSelectStatement.\r\n            \r\n             An extent in an outer scope, if its symbol is not in the FromExtents\r\n             of the CurrentSelectStatement.\r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.Symbol\"/>.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitAggregate(System.Data.Common.CommandTrees.DbAggregate,System.Object)\">\r\n            <summary>\r\n            Aggregates are not visited by the normal visitor walk.\r\n            </summary>\r\n            <param name=\"aggregate\">The aggreate to be translated</param>\r\n            <param name=\"aggregateArgument\">The translated aggregate argument</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitInputExpression(System.Data.Common.CommandTrees.DbExpression,System.String,System.Data.Metadata.Edm.TypeUsage,System.Data.SQLite.Linq.Symbol@)\">\r\n            <summary>\r\n            This is called by the relational nodes.  It does the following\r\n            <list>\r\n            <item>If the input is not a SqlSelectStatement, it assumes that the input\r\n            is a collection expression, and creates a new SqlSelectStatement </item>\r\n            </list>\r\n            </summary>\r\n            <param name=\"inputExpression\"></param>\r\n            <param name=\"inputVarName\"></param>\r\n            <param name=\"inputVarType\"></param>\r\n            <param name=\"fromSymbol\"></param>\r\n            <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/> and the main fromSymbol\r\n            for this select statement.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitIsEmptyExpression(System.Data.Common.CommandTrees.DbIsEmptyExpression,System.Boolean)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIsEmptyExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <param name=\"negate\">Was the parent a DbNotExpression?</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitCollectionConstructor(System.Data.Common.CommandTrees.DbNewInstanceExpression)\">\r\n            <summary>\r\n            Translate a NewInstance(Element(X)) expression into\r\n              \"select top(1) * from X\"\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitIsNullExpression(System.Data.Common.CommandTrees.DbIsNullExpression,System.Boolean)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIsNullExpression)\"/>\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <param name=\"negate\">Was the parent a DbNotExpression?</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitJoinExpression(System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbExpressionBinding},System.Data.Common.CommandTrees.DbExpressionKind,System.String,System.Data.Common.CommandTrees.DbExpression)\">\r\n             <summary>\r\n             This handles the processing of join expressions.\r\n             The extents on a left spine are flattened, while joins\r\n             not on the left spine give rise to new nested sub queries.\r\n            \r\n             Joins work differently from the rest of the visiting, in that\r\n             the parent (i.e. the join node) creates the SqlSelectStatement\r\n             for the children to use.\r\n            \r\n             The \"parameter\" IsInJoinContext indicates whether a child extent should\r\n             add its stuff to the existing SqlSelectStatement, or create a new SqlSelectStatement\r\n             By passing true, we ask the children to add themselves to the parent join,\r\n             by passing false, we ask the children to create new Select statements for\r\n             themselves.\r\n            \r\n             This method is called from <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbApplyExpression)\"/> and\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbJoinExpression)\"/>.\r\n             </summary>\r\n             <param name=\"inputs\"></param>\r\n             <param name=\"joinKind\"></param>\r\n             <param name=\"joinString\"></param>\r\n             <param name=\"joinCondition\"></param>\r\n             <returns> A <see cref=\"T:System.Data.SQLite.Linq.SqlSelectStatement\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.ProcessJoinInputResult(System.Data.SQLite.Linq.ISqlFragment,System.Data.SQLite.Linq.SqlSelectStatement,System.Data.Common.CommandTrees.DbExpressionBinding,System.Int32)\">\r\n             <summary>\r\n             This is called from <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitJoinExpression(System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbExpressionBinding},System.Data.Common.CommandTrees.DbExpressionKind,System.String,System.Data.Common.CommandTrees.DbExpression)\"/>.\r\n            \r\n             This is responsible for maintaining the symbol table after visiting\r\n             a child of a join expression.\r\n            \r\n             The child's sql statement may need to be completed.\r\n            \r\n             The child's result could be one of\r\n             <list type=\"number\">\r\n             <item>The same as the parent's - this is treated specially.</item>\r\n             <item>A sql select statement, which may need to be completed</item>\r\n             <item>An extent - just copy it to the from clause</item>\r\n             <item>Anything else (from a collection-valued expression) -\r\n             unnest and copy it.</item>\r\n             </list>\r\n            \r\n             If the input was a Join, we need to create a new join symbol,\r\n             otherwise, we create a normal symbol.\r\n            \r\n             We then call AddFromSymbol to add the AS clause, and update the symbol table.\r\n            \r\n            \r\n            \r\n             If the child's result was the same as the parent's, we have to clean up\r\n             the list of symbols in the FromExtents list, since this contains symbols from\r\n             the children of both the parent and the child.\r\n             The happens when the child visited is a Join, and is the leftmost child of\r\n             the parent.\r\n             </summary>\r\n             <param name=\"fromExtentFragment\"></param>\r\n             <param name=\"result\"></param>\r\n             <param name=\"input\"></param>\r\n             <param name=\"fromSymbolStart\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitNewInstanceExpression(System.Data.Common.CommandTrees.DbNewInstanceExpression)\">\r\n             <summary>\r\n             We assume that this is only called as a child of a Project.\r\n            \r\n             This replaces <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbNewInstanceExpression)\"/>, since\r\n             we do not allow DbNewInstanceExpression as a child of any node other than\r\n             DbProjectExpression.\r\n            \r\n             We write out the translation of each of the columns in the record.\r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>A <see cref=\"T:System.Data.SQLite.Linq.SqlBuilder\"/></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsSpecialBuiltInFunction(System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Determines whether the given function is a built-in function that requires special handling\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsSpecialCanonicalFunction(System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Determines whether the given function is a canonical function that requires special handling\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleFunctionDefault(System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Default handling for functions\r\n            Translates them to FunctionName(arg1, arg2, ..., argn)\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleFunctionDefaultGivenName(System.Data.Common.CommandTrees.DbFunctionExpression,System.String)\">\r\n            <summary>\r\n            Default handling for functions with a given name.\r\n            Translates them to functionName(arg1, arg2, ..., argn)\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <param name=\"functionName\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleFunctionArgumentsDefault(System.Data.Common.CommandTrees.DbFunctionExpression,System.Data.SQLite.Linq.SqlBuilder)\">\r\n            <summary>\r\n            Default handling on function arguments\r\n            Appends the list of arguments to the given result\r\n            If the function is niladic it does not append anything,\r\n            otherwise it appends (arg1, arg2, ..., argn)\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <param name=\"result\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleSpecialBuiltInFunction(System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Handler for special built in functions\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleSpecialCanonicalFunction(System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Handler for special canonical functions\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleSpecialFunction(System.Collections.Generic.Dictionary{System.String,System.Data.SQLite.Linq.SqlGenerator.FunctionHandler},System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Dispatches the special function processing to the appropriate handler\r\n            </summary>\r\n            <param name=\"handlers\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleSpecialFunctionToOperator(System.Data.Common.CommandTrees.DbFunctionExpression,System.Boolean)\">\r\n            <summary>\r\n            Handles functions that are translated into TSQL operators.\r\n            The given function should have one or two arguments. \r\n            Functions with one arguemnt are translated into \r\n                op arg\r\n            Functions with two arguments are translated into\r\n                arg0 op arg1\r\n            Also, the arguments can be optionaly enclosed in parethesis\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <param name=\"parenthesiseArguments\">Whether the arguments should be enclosed in parethesis</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleConcatFunction(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleSpecialFunctionToOperator(System.Data.Common.CommandTrees.DbFunctionExpression,System.Boolean)\"></see>\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionBitwise(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleSpecialFunctionToOperator(System.Data.Common.CommandTrees.DbFunctionExpression,System.Boolean)\"></see>\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleDatepartDateFunction(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Handles special case in which datepart 'type' parameter is present. all the functions\r\n            handles here have *only* the 1st parameter as datepart. datepart value is passed along\r\n            the QP as string and has to be expanded as TSQL keyword.\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionDateAdd(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            DateAdd(datetime, secondsToAdd) -> DATEADD ( seconds , number,  date)\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionDateSubtract(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            DateSubtract(datetime1, datetime2) -> DATEDIFF ( seconds , startdate , enddate ) \r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionDatepart(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Handler for canonical functions for extracting date parts. \r\n            For example:\r\n                Year(date) -> DATEPART( year, date)\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionIndexOf(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n             Function rename IndexOf -> CHARINDEX\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionNewGuid(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n             Function rename NewGuid -> NEWID\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionLength(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n             Length(arg) -> LEN(arg + '.') - LEN('.')\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionRound(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            Round(numericExpression) -> Round(numericExpression, 0);\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionTrim(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            TRIM(string) -> LTRIM(RTRIM(string))\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionLeft(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            LEFT(string, length) -> SUBSTR(string, 1, length)\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionRight(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n            RIGHT(string, length) -> SUBSTR(string, -(length), length)\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionToLower(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n             Function rename ToLower -> LOWER\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCanonicalFunctionToUpper(System.Data.SQLite.Linq.SqlGenerator,System.Data.Common.CommandTrees.DbFunctionExpression)\">\r\n            <summary>\r\n             Function rename ToUpper -> UPPER\r\n            </summary>\r\n            <param name=\"sqlgen\"></param>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.AddColumns(System.Data.SQLite.Linq.SqlSelectStatement,System.Data.SQLite.Linq.Symbol,System.Collections.Generic.List{System.Data.SQLite.Linq.Symbol},System.Collections.Generic.Dictionary{System.String,System.Data.SQLite.Linq.Symbol},System.String@)\">\r\n             <summary>\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.AddDefaultColumns(System.Data.SQLite.Linq.SqlSelectStatement)\"/>\r\n             Add the column names from the referenced extent/join to the\r\n             select statement.\r\n            \r\n             If the symbol is a JoinSymbol, we recursively visit all the extents,\r\n             halting at real extents and JoinSymbols that have an associated SqlSelectStatement.\r\n            \r\n             The column names for a real extent can be derived from its type.\r\n             The column names for a Join Select statement can be got from the\r\n             list of columns that was created when the Join's select statement\r\n             was created.\r\n            \r\n             We do the following for each column.\r\n             <list type=\"number\">\r\n             <item>Add the SQL string for each column to the SELECT clause</item>\r\n             <item>Add the column to the list of columns - so that it can\r\n             become part of the \"type\" of a JoinSymbol</item>\r\n             <item>Check if the column name collides with a previous column added\r\n             to the same select statement.  Flag both the columns for renaming if true.</item>\r\n             <item>Add the column to a name lookup dictionary for collision detection.</item>\r\n             </list>\r\n             </summary>\r\n             <param name=\"selectStatement\">The select statement that started off as SELECT *</param>\r\n             <param name=\"symbol\">The symbol containing the type information for\r\n             the columns to be added.</param>\r\n             <param name=\"columnList\">Columns that have been added to the Select statement.\r\n             This is created in <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.AddDefaultColumns(System.Data.SQLite.Linq.SqlSelectStatement)\"/>.</param>\r\n             <param name=\"columnDictionary\">A dictionary of the columns above.</param>\r\n             <param name=\"separator\">Comma or nothing, depending on whether the SELECT\r\n             clause is empty.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.AddDefaultColumns(System.Data.SQLite.Linq.SqlSelectStatement)\">\r\n             <summary>\r\n             Expands Select * to \"select the_list_of_columns\"\r\n             If the columns are taken from an extent, they are written as\r\n             {original_column_name AS Symbol(original_column)} to allow renaming.\r\n            \r\n             If the columns are taken from a Join, they are written as just\r\n             {original_column_name}, since there cannot be a name collision.\r\n            \r\n             We concatenate the columns from each of the inputs to the select statement.\r\n             Since the inputs may be joins that are flattened, we need to recurse.\r\n             The inputs are inferred from the symbols in FromExtents.\r\n             </summary>\r\n             <param name=\"selectStatement\"></param>\r\n             <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.AddFromSymbol(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.SQLite.Linq.Symbol)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.AddFromSymbol(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.SQLite.Linq.Symbol,System.Boolean)\"/>\r\n            </summary>\r\n            <param name=\"selectStatement\"></param>\r\n            <param name=\"inputVarName\"></param>\r\n            <param name=\"fromSymbol\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.AddFromSymbol(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.SQLite.Linq.Symbol,System.Boolean)\">\r\n             <summary>\r\n             This method is called after the input to a relational node is visited.\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbProjectExpression)\"/> and <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.ProcessJoinInputResult(System.Data.SQLite.Linq.ISqlFragment,System.Data.SQLite.Linq.SqlSelectStatement,System.Data.Common.CommandTrees.DbExpressionBinding,System.Int32)\"/>\r\n             There are 2 scenarios\r\n             <list type=\"number\">\r\n             <item>The fromSymbol is new i.e. the select statement has just been\r\n             created, or a join extent has been added.</item>\r\n             <item>The fromSymbol is old i.e. we are reusing a select statement.</item>\r\n             </list>\r\n            \r\n             If we are not reusing the select statement, we have to complete the\r\n             FROM clause with the alias\r\n             <code>\r\n             -- if the input was an extent\r\n             FROM = [SchemaName].[TableName]\r\n             -- if the input was a Project\r\n             FROM = (SELECT ... FROM ... WHERE ...)\r\n             </code>\r\n            \r\n             These become\r\n             <code>\r\n             -- if the input was an extent\r\n             FROM = [SchemaName].[TableName] AS alias\r\n             -- if the input was a Project\r\n             FROM = (SELECT ... FROM ... WHERE ...) AS alias\r\n             </code>\r\n             and look like valid FROM clauses.\r\n            \r\n             Finally, we have to add the alias to the global list of aliases used,\r\n             and also to the current symbol table.\r\n             </summary>\r\n             <param name=\"selectStatement\"></param>\r\n             <param name=\"inputVarName\">The alias to be used.</param>\r\n             <param name=\"fromSymbol\"></param>\r\n             <param name=\"addToSymbolTable\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.AddSortKeys(System.Data.SQLite.Linq.SqlBuilder,System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbSortClause})\">\r\n            <summary>\r\n            Translates a list of SortClauses.\r\n            Used in the translation of OrderBy \r\n            </summary>\r\n            <param name=\"orderByClause\">The SqlBuilder to which the sort keys should be appended</param>\r\n            <param name=\"sortKeys\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.CreateNewSelectStatement(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.Metadata.Edm.TypeUsage,System.Data.SQLite.Linq.Symbol@)\">\r\n            <summary>\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.CreateNewSelectStatement(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.Metadata.Edm.TypeUsage,System.Boolean,System.Data.SQLite.Linq.Symbol@)\"/>\r\n            </summary>\r\n            <param name=\"oldStatement\"></param>\r\n            <param name=\"inputVarName\"></param>\r\n            <param name=\"inputVarType\"></param>\r\n            <param name=\"fromSymbol\"></param>\r\n            <returns>A new select statement, with the old one as the from clause.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.CreateNewSelectStatement(System.Data.SQLite.Linq.SqlSelectStatement,System.String,System.Data.Metadata.Edm.TypeUsage,System.Boolean,System.Data.SQLite.Linq.Symbol@)\">\r\n             <summary>\r\n             This is called after a relational node's input has been visited, and the\r\n             input's sql statement cannot be reused.  <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbProjectExpression)\"/>\r\n            \r\n             When the input's sql statement cannot be reused, we create a new sql\r\n             statement, with the old one as the from clause of the new statement.\r\n            \r\n             The old statement must be completed i.e. if it has an empty select list,\r\n             the list of columns must be projected out.\r\n            \r\n             If the old statement being completed has a join symbol as its from extent,\r\n             the new statement must have a clone of the join symbol as its extent.\r\n             We cannot reuse the old symbol, but the new select statement must behave\r\n             as though it is working over the \"join\" record.\r\n             </summary>\r\n             <param name=\"oldStatement\"></param>\r\n             <param name=\"inputVarName\"></param>\r\n             <param name=\"inputVarType\"></param>\r\n             <param name=\"finalizeOldStatement\"></param>\r\n             <param name=\"fromSymbol\"></param>\r\n             <returns>A new select statement, with the old one as the from clause.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.EscapeSingleQuote(System.String,System.Boolean)\">\r\n            <summary>\r\n            Before we embed a string literal in a SQL string, we should\r\n            convert all ' to '', and enclose the whole string in single quotes.\r\n            </summary>\r\n            <param name=\"s\"></param>\r\n            <param name=\"isUnicode\"></param>\r\n            <returns>The escaped sql string.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.GetSqlPrimitiveType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Returns the sql primitive/native type name. \r\n            It will include size, precision or scale depending on type information present in the \r\n            type facets\r\n            </summary>\r\n            <param name=\"type\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.HandleCountExpression(System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            Handles the expression represending DbLimitExpression.Limit and DbSkipExpression.Count.\r\n            If it is a constant expression, it simply does to string thus avoiding casting it to the specific value\r\n            (which would be done if <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbConstantExpression)\"/> is called)\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsApplyExpression(System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            This is used to determine if a particular expression is an Apply operation.\r\n            This is only the case when the DbExpressionKind is CrossApply or OuterApply.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsJoinExpression(System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            This is used to determine if a particular expression is a Join operation.\r\n            This is true for DbCrossJoinExpression and DbJoinExpression, the\r\n            latter of which may have one of several different ExpressionKinds.\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsComplexExpression(System.Data.Common.CommandTrees.DbExpression)\">\r\n             <summary>\r\n             This is used to determine if a calling expression needs to place\r\n             round brackets around the translation of the expression e.\r\n            \r\n             Constants, parameters and properties do not require brackets,\r\n             everything else does.\r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <returns>true, if the expression needs brackets </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsCompatible(System.Data.SQLite.Linq.SqlSelectStatement,System.Data.Common.CommandTrees.DbExpressionKind)\">\r\n            <summary>\r\n            Determine if the owner expression can add its unique sql to the input's\r\n            SqlSelectStatement\r\n            </summary>\r\n            <param name=\"result\">The SqlSelectStatement of the input to the relational node.</param>\r\n            <param name=\"expressionKind\">The kind of the expression node(not the input's)</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.QuoteIdentifier(System.String)\">\r\n            <summary>\r\n            We use the normal box quotes for SQL server.  We do not deal with ANSI quotes\r\n            i.e. double quotes.\r\n            </summary>\r\n            <param name=\"name\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitExpressionEnsureSqlStatement(System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            Simply calls <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitExpressionEnsureSqlStatement(System.Data.Common.CommandTrees.DbExpression,System.Boolean)\"/>\r\n            with addDefaultColumns set to true\r\n            </summary>\r\n            <param name=\"e\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitExpressionEnsureSqlStatement(System.Data.Common.CommandTrees.DbExpression,System.Boolean)\">\r\n             <summary>\r\n             This is called from <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.GenerateSql(System.Data.Common.CommandTrees.DbQueryCommandTree)\"/> and nodes which require a\r\n             select statement as an argument e.g. <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbIsEmptyExpression)\"/>,\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbUnionAllExpression)\"/>.\r\n            \r\n             SqlGenerator needs its child to have a proper alias if the child is\r\n             just an extent or a join.\r\n            \r\n             The normal relational nodes result in complete valid SQL statements.\r\n             For the rest, we need to treat them as there was a dummy\r\n             <code>\r\n             -- originally {expression}\r\n             -- change that to\r\n             SELECT *\r\n             FROM {expression} as c\r\n             </code>\r\n             \r\n             DbLimitExpression needs to start the statement but not add the default columns\r\n             </summary>\r\n             <param name=\"e\"></param>\r\n             <param name=\"addDefaultColumns\"></param>\r\n             <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.VisitFilterExpression(System.Data.Common.CommandTrees.DbExpressionBinding,System.Data.Common.CommandTrees.DbExpression,System.Boolean)\">\r\n             <summary>\r\n             This method is called by <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbFilterExpression)\"/> and\r\n             <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbQuantifierExpression)\"/>\r\n            \r\n             </summary>\r\n             <param name=\"input\"></param>\r\n             <param name=\"predicate\"></param>\r\n             <param name=\"negatePredicate\">This is passed from <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbQuantifierExpression)\"/>\r\n             in the All(...) case.</param>\r\n             <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.WrapNonQueryExtent(System.Data.SQLite.Linq.SqlSelectStatement,System.Data.SQLite.Linq.ISqlFragment,System.Data.Common.CommandTrees.DbExpressionKind)\">\r\n            <summary>\r\n            If the sql fragment for an input expression is not a SqlSelect statement\r\n            or other acceptable form (e.g. an extent as a SqlBuilder), we need\r\n            to wrap it in a form acceptable in a FROM clause.  These are\r\n            primarily the\r\n            <list type=\"bullet\">\r\n            <item>The set operation expressions - union all, intersect, except</item>\r\n            <item>TVFs, which are conceptually similar to tables</item>\r\n            </list>\r\n            </summary>\r\n            <param name=\"result\"></param>\r\n            <param name=\"sqlFragment\"></param>\r\n            <param name=\"expressionKind\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsBuiltinFunction(System.Data.Metadata.Edm.EdmFunction)\">\r\n            <summary>\r\n            Is this a builtin function (ie) does it have the builtinAttribute specified?\r\n            </summary>\r\n            <param name=\"function\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.WriteFunctionName(System.Data.SQLite.Linq.SqlBuilder,System.Data.Metadata.Edm.EdmFunction)\">\r\n             <summary>\r\n            \r\n             </summary>\r\n             <param name=\"function\"></param>\r\n             <param name=\"result\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.NeedsInnerQuery(System.Collections.Generic.IList{System.Data.Common.CommandTrees.DbAggregate})\">\r\n            <summary>\r\n            Helper method for the Group By visitor\r\n            Returns true if at least one of the aggregates in the given list\r\n            has an argument that is not a <see cref=\"T:System.Data.Common.CommandTrees.DbPropertyExpression\"/> \r\n            over <see cref=\"T:System.Data.Common.CommandTrees.DbVariableReferenceExpression\"/>\r\n            </summary>\r\n            <param name=\"aggregates\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlGenerator.IsPropertyOverVarRef(System.Data.Common.CommandTrees.DbExpression)\">\r\n            <summary>\r\n            Determines whether the given expression is a <see cref=\"T:System.Data.Common.CommandTrees.DbPropertyExpression\"/> \r\n            over <see cref=\"T:System.Data.Common.CommandTrees.DbVariableReferenceExpression\"/>\r\n            </summary>\r\n            <param name=\"expression\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.SqlGenerator.CurrentSelectStatement\">\r\n            <summary>\r\n            The top of the stack\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.SqlGenerator.IsParentAJoin\">\r\n            <summary>\r\n            The top of the stack\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SqlSelectStatement\">\r\n             <summary>\r\n             A SqlSelectStatement represents a canonical SQL SELECT statement.\r\n             It has fields for the 5 main clauses\r\n             <list type=\"number\">\r\n             <item>SELECT</item>\r\n             <item>FROM</item>\r\n             <item>WHERE</item>\r\n             <item>GROUP BY</item>\r\n             <item>ORDER BY</item>\r\n             </list>\r\n             We do not have HAVING, since it does not correspond to anything in the DbCommandTree.\r\n             Each of the fields is a SqlBuilder, so we can keep appending SQL strings\r\n             or other fragments to build up the clause.\r\n            \r\n             We have a IsDistinct property to indicate that we want distict columns.\r\n             This is given out of band, since the input expression to the select clause\r\n             may already have some columns projected out, and we use append-only SqlBuilders.\r\n             The DISTINCT is inserted when we finally write the object into a string.\r\n             \r\n             Also, we have a Top property, which is non-null if the number of results should\r\n             be limited to certain number. It is given out of band for the same reasons as DISTINCT.\r\n            \r\n             The FromExtents contains the list of inputs in use for the select statement.\r\n             There is usually just one element in this - Select statements for joins may\r\n             temporarily have more than one.\r\n            \r\n             If the select statement is created by a Join node, we maintain a list of\r\n             all the extents that have been flattened in the join in AllJoinExtents\r\n             <example>\r\n             in J(j1= J(a,b), c)\r\n             FromExtents has 2 nodes JoinSymbol(name=j1, ...) and Symbol(name=c)\r\n             AllJoinExtents has 3 nodes Symbol(name=a), Symbol(name=b), Symbol(name=c)\r\n             </example>\r\n            \r\n             If any expression in the non-FROM clause refers to an extent in a higher scope,\r\n             we add that extent to the OuterExtents list.  This list denotes the list\r\n             of extent aliases that may collide with the aliases used in this select statement.\r\n             It is set by <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbVariableReferenceExpression)\"/>.\r\n             An extent is an outer extent if it is not one of the FromExtents.\r\n            \r\n            \r\n             </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlSelectStatement.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\">\r\n            <summary>\r\n            Write out a SQL select statement as a string.\r\n            We have to\r\n            <list type=\"number\">\r\n            <item>Check whether the aliases extents we use in this statement have\r\n            to be renamed.\r\n            We first create a list of all the aliases used by the outer extents.\r\n            For each of the FromExtents( or AllJoinExtents if it is non-null),\r\n            rename it if it collides with the previous list.\r\n            </item>\r\n            <item>Write each of the clauses (if it exists) as a string</item>\r\n            </list>\r\n            </summary>\r\n            <param name=\"writer\"></param>\r\n            <param name=\"sqlGenerator\"></param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.SqlSelectStatement.IsDistinct\">\r\n            <summary>\r\n            Do we need to add a DISTINCT at the beginning of the SELECT\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SqlWriter\">\r\n            <summary>\r\n            This extends StringWriter primarily to add the ability to add an indent\r\n            to each line that is written out.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlWriter.#ctor(System.Text.StringBuilder)\">\r\n            <summary>\r\n            \r\n            </summary>\r\n            <param name=\"b\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlWriter.Write(System.String)\">\r\n            <summary>\r\n            Reset atBeginningofLine if we detect the newline string.\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlBuilder.AppendLine\"/>\r\n            Add as many tabs as the value of indent if we are at the \r\n            beginning of a line.\r\n            </summary>\r\n            <param name=\"value\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SqlWriter.WriteLine\">\r\n            <summary>\r\n            \r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.SqlWriter.Indent\">\r\n            <summary>\r\n            The number of tabs to be added at the beginning of each new line.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SymbolPair\">\r\n            <summary>\r\n            The SymbolPair exists to solve the record flattening problem.\r\n            <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbPropertyExpression)\"/>\r\n            Consider a property expression D(v, \"j3.j2.j1.a.x\")\r\n            where v is a VarRef, j1, j2, j3 are joins, a is an extent and x is a columns.\r\n            This has to be translated eventually into {j'}.{x'}\r\n            \r\n            The source field represents the outermost SqlStatement representing a join\r\n            expression (say j2) - this is always a Join symbol.\r\n            \r\n            The column field keeps moving from one join symbol to the next, until it\r\n            stops at a non-join symbol.\r\n            \r\n            This is returned by <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbPropertyExpression)\"/>,\r\n            but never makes it into a SqlBuilder.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SymbolTable\">\r\n            <summary>\r\n            The symbol table is quite primitive - it is a stack with a new entry for\r\n            each scope.  Lookups search from the top of the stack to the bottom, until\r\n            an entry is found.\r\n            \r\n            The symbols are of the following kinds\r\n            <list type=\"bullet\">\r\n            <item><see cref=\"T:System.Data.SQLite.Linq.Symbol\"/> represents tables (extents/nested selects/unnests)</item>\r\n            <item><see cref=\"T:System.Data.SQLite.Linq.JoinSymbol\"/> represents Join nodes</item>\r\n            <item><see cref=\"T:System.Data.SQLite.Linq.Symbol\"/> columns.</item>\r\n            </list>\r\n            \r\n            Symbols represent names <see cref=\"M:System.Data.SQLite.Linq.SqlGenerator.Visit(System.Data.Common.CommandTrees.DbVariableReferenceExpression)\"/> to be resolved, \r\n            or things to be renamed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.TopClause\">\r\n            <summary>\r\n            TopClause represents the a TOP expression in a SqlSelectStatement. \r\n            It has a count property, which indicates how many TOP rows should be selected and a \r\n            boolen WithTies property.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.TopClause.#ctor(System.Data.SQLite.Linq.ISqlFragment,System.Boolean)\">\r\n            <summary>\r\n            Creates a TopClause with the given topCount and withTies.\r\n            </summary>\r\n            <param name=\"topCount\"></param>\r\n            <param name=\"withTies\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.TopClause.#ctor(System.Int32,System.Boolean)\">\r\n            <summary>\r\n            Creates a TopClause with the given topCount and withTies.\r\n            </summary>\r\n            <param name=\"topCount\"></param>\r\n            <param name=\"withTies\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.TopClause.WriteSql(System.Data.SQLite.Linq.SqlWriter,System.Data.SQLite.Linq.SqlGenerator)\">\r\n            <summary>\r\n            Write out the TOP part of sql select statement \r\n            It basically writes LIMIT (X).\r\n            </summary>\r\n            <param name=\"writer\"></param>\r\n            <param name=\"sqlGenerator\"></param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.TopClause.WithTies\">\r\n            <summary>\r\n            Do we need to add a WITH_TIES to the top statement\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Linq.TopClause.TopCount\">\r\n            <summary>\r\n            How many top rows should be selected.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SQLiteProviderFactory\">\r\n            <summary>\r\n            SQLite implementation of <see cref=\"T:System.Data.Common.DbProviderFactory\"/>.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Linq.SQLiteProviderFactory.Instance\">\r\n            <summary>\r\n            Static instance member which returns an instanced\r\n            <see cref=\"T:System.Data.SQLite.Linq.SQLiteProviderFactory\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.#ctor\">\r\n            <summary>\r\n            Constructs a new instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.CreateCommand\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteCommand\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.CreateCommandBuilder\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteCommandBuilder\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.CreateConnection\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.CreateConnectionStringBuilder\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteConnectionStringBuilder\"/>\r\n            object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.CreateDataAdapter\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteDataAdapter\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderFactory.CreateParameter\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteParameter\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Linq.SQLiteProviderManifest\">\r\n            <summary>\r\n            The Provider Manifest for SQL Server\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderManifest.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs the provider manifest.\r\n            </summary>\r\n            <remarks>\r\n            We pass the token as a DateTimeFormat enum text, because all the datetime functions\r\n            are vastly different depending on how the user is opening the connection\r\n            </remarks>\r\n            <param name=\"manifestToken\">A token used to infer the capabilities of the store</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderManifest.GetDbInformation(System.String)\">\r\n            <summary>\r\n            Returns manifest information for the provider\r\n            </summary>\r\n            <param name=\"informationType\">The name of the information to be retrieved.</param>\r\n            <returns>An XmlReader at the begining of the information requested.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderManifest.GetEdmType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            This method takes a type and a set of facets and returns the best mapped equivalent type \r\n            in EDM.\r\n            </summary>\r\n            <param name=\"storeType\">A TypeUsage encapsulating a store type and a set of facets</param>\r\n            <returns>A TypeUsage encapsulating an EDM type and a set of facets</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderManifest.GetStoreType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            This method takes a type and a set of facets and returns the best mapped equivalent type \r\n            </summary>\r\n            <param name=\"edmType\">A TypeUsage encapsulating an EDM type and a set of facets</param>\r\n            <returns>A TypeUsage encapsulating a store type and a set of facets</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.CreateSqlParameter(System.String,System.Data.Metadata.Edm.TypeUsage,System.Data.Metadata.Edm.ParameterMode,System.Object)\">\r\n            <summary>\r\n            Creates a SQLiteParameter given a name, type, and direction\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.GetSqlDbType(System.Data.Metadata.Edm.TypeUsage,System.Boolean,System.Nullable{System.Int32}@)\">\r\n            <summary>\r\n            Determines DbType for the given primitive type. Extracts facet\r\n            information as well.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.GetParameterSize(System.Data.Metadata.Edm.TypeUsage,System.Boolean)\">\r\n            <summary>\r\n            Determines preferred value for SqlParameter.Size. Returns null\r\n            where there is no preference.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.GetStringDbType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Chooses the appropriate DbType for the given string type.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.GetBinaryDbType(System.Data.Metadata.Edm.TypeUsage)\">\r\n            <summary>\r\n            Chooses the appropriate DbType for the given binary type.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.System#Data#SQLite#ISQLiteSchemaExtensions#BuildTempSchema(System.Data.SQLite.SQLiteConnection)\">\r\n            <summary>\r\n            Creates temporary tables on the connection so schema information can be queried\r\n            </summary>\r\n            <remarks>\r\n            There's a lot of work involved in getting schema information out of SQLite, but LINQ expects to\r\n            be able to query on schema tables.  Therefore we need to \"fake\" it by generating temporary tables\r\n            filled with the schema of the current connection.  We get away with making this information static\r\n            because schema information seems to always be queried on a new connection object, so the schema is\r\n            always fresh.\r\n            </remarks>\r\n            <param name=\"cnn\">The connection upon which to build the schema tables</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Linq.SQLiteProviderServices.DataTableToTable(System.Data.SQLite.SQLiteConnection,System.Data.DataTable,System.String)\">\r\n            <summary>\r\n            Turn a datatable into a table in the temporary database for the connection\r\n            </summary>\r\n            <param name=\"cnn\">The connection to make the temporary table in</param>\r\n            <param name=\"table\">The table to write out</param>\r\n            <param name=\"dest\">The temporary table name to write to</param>\r\n        </member>\r\n    </members>\r\n</doc>\r\n"
  },
  {
    "path": "library/lib/System.Data.SQLite.dll.config",
    "content": "<?xml version=\"1.0\"?>\r\n<!--\r\n *\r\n * System.Data.SQLite.dll.config -\r\n *\r\n * Written by Joe Mistachkin.\r\n * Released to the public domain, use at your own risk!\r\n *\r\n-->\r\n<configuration>\r\n  <appSettings>\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], the SQLite\r\n              logging subsystem may be initialized in a non-default application\r\n              domain.  By default, this is not allowed due to the potential\r\n              for application domain unloading issues.\r\n    -->\r\n    <!--\r\n    <add key=\"Force_SQLiteLog\" value=\"1\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], the native\r\n              library pre-loading functionality will be disabled.  By default,\r\n              the native library pre-loading will attempt to load the native\r\n              SQLite library from architecture-specific (e.g. \"x86\", \"amd64\",\r\n              \"x64\") or platform-specific (e.g. \"Win32\") directories that\r\n              reside underneath the application base directory.\r\n    -->\r\n    <!--\r\n    <add key=\"No_PreLoadSQLite\" value=\"1\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], the new\r\n              connection string parsing algorithm will not be used.  This\r\n              environment variable is intended for use with legacy code only.\r\n    -->\r\n    <!--\r\n    <add key=\"No_SQLiteConnectionNewParser\" value=\"1\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], the initial\r\n              search for types in all loaded assemblies that are tagged with\r\n              the SQLiteFunction attribute will be skipped.  Normally, this\r\n              search is conducted only once per application domain by the\r\n              static constructor of the SQLiteFunction class; however, these\r\n              implementation details are subject to change.\r\n    -->\r\n    <!--\r\n    <add key=\"No_SQLiteFunctions\" value=\"1\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], it will be\r\n              used instead of the application base directory by the native\r\n              library pre-loader.  This environment variable can be especially\r\n              useful in ASP.NET and other hosted environments where direct\r\n              control of the location of the managed assemblies is not under\r\n              the control of the application.\r\n    -->\r\n    <!--\r\n    <add key=\"PreLoadSQLite_BaseDirectory\" value=\"\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], it will be\r\n              used instead of the processor architecture value contained in the\r\n              PROCESSOR_ARCHITECTURE environment variable to help build the\r\n              path of the native library to pre-load.\r\n    -->\r\n    <!--\r\n    <add key=\"PreLoadSQLite_ProcessorArchitecture\" value=\"x86\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this environment variable is set [to anything], the native\r\n              library pre-loading code will skip conducting a search for the\r\n              native library to pre-load.  By default, the search starts in the\r\n              location of the currently executing assembly (i.e. the assembly\r\n              containing all the managed components for System.Data.SQLite) and\r\n              then falls back to the application domain base directory.\r\n    -->\r\n    <!--\r\n    <add key=\"PreLoadSQLite_NoSearchForDirectory\" value=\"1\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this configuration variable is set [to anything], the location\r\n              of the currently executing assembly (i.e. the one containing all\r\n              the managed components for System.Data.SQLite) will be used as\r\n              the basis for locating the the native library to pre-load (i.e.\r\n              instead of using the application domain base directory).\r\n    -->\r\n    <!--\r\n    <add key=\"PreLoadSQLite_UseAssemblyDirectory\" value=\"1\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: This configuration variable is normally set by the operating\r\n              system itself and should reflect the native processor\r\n              architecture of the current process (e.g. a 32-bit x86\r\n              application running on a 64-bit x64 operating system should have\r\n              the value \"x86\").\r\n    -->\r\n    <!--\r\n    <add key=\"PROCESSOR_ARCHITECTURE\" value=\"%PROCESSOR_ARCHITECTURE%\" />\r\n    -->\r\n\r\n    <!--\r\n        NOTE: If this environment variable is set [to anything], it will be\r\n              used by the System.Data.SQLite.SQLiteFactory class as the type\r\n              name containing the System.Data.Common.DbProviderServices\r\n              implementation that should be used.\r\n    -->\r\n    <!--\r\n    <add key=\"TypeName_SQLiteProviderServices\" value=\"\" />\r\n    -->\r\n  </appSettings>\r\n</configuration>\r\n"
  },
  {
    "path": "library/lib/System.Data.SQLite.xml",
    "content": "<?xml version=\"1.0\"?>\r\n<doc>\r\n    <assembly>\r\n        <name>System.Data.SQLite</name>\r\n    </assembly>\r\n    <members>\r\n        <member name=\"T:System.Data.SQLite.AssemblySourceIdAttribute\">\r\n            <summary>\r\n            Defines a source code identifier custom attribute for an assembly\r\n            manifest.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.AssemblySourceIdAttribute.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs an instance of this attribute class using the specified\r\n            source code identifier value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The source code identifier value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.AssemblySourceIdAttribute.SourceId\">\r\n            <summary>\r\n            Gets the source code identifier value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.AssemblySourceTimeStampAttribute\">\r\n            <summary>\r\n            Defines a source code time-stamp custom attribute for an assembly\r\n            manifest.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.AssemblySourceTimeStampAttribute.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs an instance of this attribute class using the specified\r\n            source code time-stamp value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The source code time-stamp value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.AssemblySourceTimeStampAttribute.SourceTimeStamp\">\r\n            <summary>\r\n            Gets the source code time-stamp value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteLogCallback\">\r\n             <summary>\r\n             This is the method signature for the SQLite core library logging callback\r\n             function for use with sqlite3_log() and the SQLITE_CONFIG_LOG.\r\n            \r\n             WARNING: This delegate is used more-or-less directly by native code, do\r\n                      not modify its type signature.\r\n             </summary>\r\n             <param name=\"pUserData\">\r\n             The extra data associated with this message, if any.\r\n             </param>\r\n             <param name=\"errorCode\">\r\n             The error code associated with this message.\r\n             </param>\r\n             <param name=\"pMessage\">\r\n             The message string to be logged.\r\n             </param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLite3\">\r\n            <summary>\r\n            This class implements SQLiteBase completely, and is the guts of the code that interop's SQLite with .NET\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteBase\">\r\n            <summary>\r\n            This internal class provides the foundation of SQLite support.  It defines all the abstract members needed to implement\r\n            a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConvert\">\r\n            <summary>\r\n            This base class provides datatype conversion services for the SQLite provider.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert.FullFormat\">\r\n            <summary>\r\n            The format string for DateTime values when using the InvariantCulture or CurrentCulture formats.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert.UnixEpoch\">\r\n            <summary>\r\n            The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert.OleAutomationEpochAsJulianDay\">\r\n            <summary>\r\n            The value of the OLE Automation epoch represented as a Julian day.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._datetimeFormats\">\r\n            <summary>\r\n            An array of ISO-8601 DateTime formats that we support parsing.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._datetimeFormatUtc\">\r\n            <summary>\r\n            The internal default format for UTC DateTime values when converting\r\n            to a string.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._datetimeFormatLocal\">\r\n            <summary>\r\n            The internal default format for local DateTime values when converting\r\n            to a string.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._utf8\">\r\n            <summary>\r\n            An UTF-8 Encoding instance, so we can convert strings to and from UTF-8\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._datetimeFormat\">\r\n            <summary>\r\n            The default DateTime format for this instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._datetimeKind\">\r\n            <summary>\r\n            The default DateTimeKind for this instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConvert._datetimeFormatString\">\r\n            <summary>\r\n            The default DateTime format string for this instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String)\">\r\n            <summary>\r\n            Initializes the conversion class\r\n            </summary>\r\n            <param name=\"fmt\">The default date/time format to use for this instance</param>\r\n            <param name=\"kind\">The DateTimeKind to use.</param>\r\n            <param name=\"fmtString\">The DateTime format string to use.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToUTF8(System.String)\">\r\n            <summary>\r\n            Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character.\r\n            </summary>\r\n            <param name=\"sourceText\">The string to convert to UTF-8</param>\r\n            <returns>A byte array containing the converted string plus an extra 0 terminating byte at the end of the array.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToUTF8(System.DateTime)\">\r\n            <summary>\r\n            Convert a DateTime to a UTF-8 encoded, zero-terminated byte array.\r\n            </summary>\r\n            <remarks>\r\n            This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the\r\n            string result.\r\n            </remarks>\r\n            <param name=\"dateTimeValue\">The DateTime to convert.</param>\r\n            <returns>The UTF-8 encoded string, including a 0 terminating byte at the end of the array.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToString(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Converts a UTF-8 encoded IntPtr of the specified length into a .NET string\r\n            </summary>\r\n            <param name=\"nativestring\">The pointer to the memory where the UTF-8 string is encoded</param>\r\n            <param name=\"nativestringlen\">The number of bytes to decode</param>\r\n            <returns>A string containing the translated character(s)</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.UTF8ToString(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Converts a UTF-8 encoded IntPtr of the specified length into a .NET string\r\n            </summary>\r\n            <param name=\"nativestring\">The pointer to the memory where the UTF-8 string is encoded</param>\r\n            <param name=\"nativestringlen\">The number of bytes to decode</param>\r\n            <returns>A string containing the translated character(s)</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.String)\">\r\n            <summary>\r\n            Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,\r\n            and DateTimeFormatString specified for the connection when it was opened.\r\n            </summary>\r\n            <remarks>\r\n            Acceptable ISO8601 DateTime formats are:\r\n            <list type=\"bullet\">\r\n            <item><description>THHmmssK</description></item>\r\n            <item><description>THHmmK</description></item>\r\n            <item><description>HH:mm:ss.FFFFFFFK</description></item>\r\n            <item><description>HH:mm:ssK</description></item>\r\n            <item><description>HH:mmK</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFFK</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ssK</description></item>\r\n            <item><description>yyyy-MM-dd HH:mmK</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFFK</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mmK</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ssK</description></item>\r\n            <item><description>yyyyMMddHHmmssK</description></item>\r\n            <item><description>yyyyMMddHHmmK</description></item>\r\n            <item><description>yyyyMMddTHHmmssFFFFFFFK</description></item>\r\n            <item><description>THHmmss</description></item>\r\n            <item><description>THHmm</description></item>\r\n            <item><description>HH:mm:ss.FFFFFFF</description></item>\r\n            <item><description>HH:mm:ss</description></item>\r\n            <item><description>HH:mm</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFF</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ss</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFF</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ss</description></item>\r\n            <item><description>yyyyMMddHHmmss</description></item>\r\n            <item><description>yyyyMMddHHmm</description></item>\r\n            <item><description>yyyyMMddTHHmmssFFFFFFF</description></item>\r\n            <item><description>yyyy-MM-dd</description></item>\r\n            <item><description>yyyyMMdd</description></item>\r\n            <item><description>yy-MM-dd</description></item>\r\n            </list>\r\n            If the string cannot be matched to one of the above formats -OR-\r\n            the DateTimeFormatString if one was provided, an exception will\r\n            be thrown.\r\n            </remarks>\r\n            <param name=\"dateText\">The string containing either a long integer number of 100-nanosecond units since\r\n            System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a\r\n            culture-independent formatted date and time string, a formatted date and time string in the current\r\n            culture, or an ISO8601-format string.</param>\r\n            <returns>A DateTime value</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.String,System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String)\">\r\n            <summary>\r\n            Converts a string into a DateTime, using the specified DateTimeFormat,\r\n            DateTimeKind and DateTimeFormatString.\r\n            </summary>\r\n            <remarks>\r\n            Acceptable ISO8601 DateTime formats are:\r\n            <list type=\"bullet\">\r\n            <item><description>THHmmssK</description></item>\r\n            <item><description>THHmmK</description></item>\r\n            <item><description>HH:mm:ss.FFFFFFFK</description></item>\r\n            <item><description>HH:mm:ssK</description></item>\r\n            <item><description>HH:mmK</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFFK</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ssK</description></item>\r\n            <item><description>yyyy-MM-dd HH:mmK</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFFK</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mmK</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ssK</description></item>\r\n            <item><description>yyyyMMddHHmmssK</description></item>\r\n            <item><description>yyyyMMddHHmmK</description></item>\r\n            <item><description>yyyyMMddTHHmmssFFFFFFFK</description></item>\r\n            <item><description>THHmmss</description></item>\r\n            <item><description>THHmm</description></item>\r\n            <item><description>HH:mm:ss.FFFFFFF</description></item>\r\n            <item><description>HH:mm:ss</description></item>\r\n            <item><description>HH:mm</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFF</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm:ss</description></item>\r\n            <item><description>yyyy-MM-dd HH:mm</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFF</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm</description></item>\r\n            <item><description>yyyy-MM-ddTHH:mm:ss</description></item>\r\n            <item><description>yyyyMMddHHmmss</description></item>\r\n            <item><description>yyyyMMddHHmm</description></item>\r\n            <item><description>yyyyMMddTHHmmssFFFFFFF</description></item>\r\n            <item><description>yyyy-MM-dd</description></item>\r\n            <item><description>yyyyMMdd</description></item>\r\n            <item><description>yy-MM-dd</description></item>\r\n            </list>\r\n            If the string cannot be matched to one of the above formats -OR-\r\n            the DateTimeFormatString if one was provided, an exception will\r\n            be thrown.\r\n            </remarks>\r\n            <param name=\"dateText\">The string containing either a long integer number of 100-nanosecond units since\r\n            System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a\r\n            culture-independent formatted date and time string, a formatted date and time string in the current\r\n            culture, or an ISO8601-format string.</param>\r\n            <param name=\"format\">The SQLiteDateFormats to use.</param>\r\n            <param name=\"kind\">The DateTimeKind to use.</param>\r\n            <param name=\"formatString\">The DateTime format string to use.</param>\r\n            <returns>A DateTime value</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.Double)\">\r\n            <summary>\r\n            Converts a julianday value into a DateTime\r\n            </summary>\r\n            <param name=\"julianDay\">The value to convert</param>\r\n            <returns>A .NET DateTime</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.Double,System.DateTimeKind)\">\r\n            <summary>\r\n            Converts a julianday value into a DateTime\r\n            </summary>\r\n            <param name=\"julianDay\">The value to convert</param>\r\n            <param name=\"kind\">The DateTimeKind to use.</param>\r\n            <returns>A .NET DateTime</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.Int32,System.DateTimeKind)\">\r\n            <summary>\r\n            Converts the specified number of seconds from the Unix epoch into a\r\n            <see cref=\"T:System.DateTime\"/> value.\r\n            </summary>\r\n            <param name=\"seconds\">\r\n            The number of whole seconds since the Unix epoch.\r\n            </param>\r\n            <param name=\"kind\">\r\n            Either Utc or Local time.\r\n            </param>\r\n            <returns>\r\n            The new <see cref=\"T:System.DateTime\"/> value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.Int64,System.DateTimeKind)\">\r\n            <summary>\r\n            Converts the specified number of ticks since the epoch into a\r\n            <see cref=\"T:System.DateTime\"/> value.\r\n            </summary>\r\n            <param name=\"ticks\">\r\n            The number of whole ticks since the epoch.\r\n            </param>\r\n            <param name=\"kind\">\r\n            Either Utc or Local time.\r\n            </param>\r\n            <returns>\r\n            The new <see cref=\"T:System.DateTime\"/> value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToJulianDay(System.DateTime)\">\r\n            <summary>\r\n            Converts a DateTime struct to a JulianDay double\r\n            </summary>\r\n            <param name=\"value\">The DateTime to convert</param>\r\n            <returns>The JulianDay value the Datetime represents</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToUnixEpoch(System.DateTime)\">\r\n            <summary>\r\n            Converts a DateTime struct to the whole number of seconds since the\r\n            Unix epoch.\r\n            </summary>\r\n            <param name=\"value\">The DateTime to convert</param>\r\n            <returns>The whole number of seconds since the Unix epoch</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.GetDateTimeKindFormat(System.DateTimeKind,System.String)\">\r\n            <summary>\r\n            Returns the DateTime format string to use for the specified DateTimeKind.\r\n            If <paramref name=\"formatString\" /> is not null, it will be returned verbatim.\r\n            </summary>\r\n            <param name=\"kind\">The DateTimeKind to use.</param>\r\n            <param name=\"formatString\">The DateTime format string to use.</param>\r\n            <returns>\r\n            The DateTime format string to use for the specified DateTimeKind.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToString(System.DateTime)\">\r\n            <summary>\r\n            Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,\r\n            and DateTimeFormatString specified for the connection when it was opened.\r\n            </summary>\r\n            <param name=\"dateValue\">The DateTime value to convert</param>\r\n            <returns>Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a\r\n            Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time\r\n            string, a formatted date and time string in the current culture, or an ISO8601-format date/time string.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime.\r\n            </summary>\r\n            <remarks>\r\n            This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls\r\n            ToDateTime() on the string to return a DateTime.\r\n            </remarks>\r\n            <param name=\"ptr\">A pointer to the UTF-8 encoded string</param>\r\n            <param name=\"len\">The length in bytes of the string</param>\r\n            <returns>The parsed DateTime value</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.Split(System.String,System.Char)\">\r\n            <summary>\r\n            Smart method of splitting a string.  Skips quoted elements, removes the quotes.\r\n            </summary>\r\n            <remarks>\r\n            This split function works somewhat like the String.Split() function in that it breaks apart a string into\r\n            pieces and returns the pieces as an array.  The primary differences are:\r\n            <list type=\"bullet\">\r\n            <item><description>Only one character can be provided as a separator character</description></item>\r\n            <item><description>Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed.</description></item>\r\n            </list>\r\n            Thus, if splitting the following string looking for a comma:<br/>\r\n            One,Two, \"Three, Four\", Five<br/>\r\n            <br/>\r\n            The resulting array would contain<br/>\r\n            [0] One<br/>\r\n            [1] Two<br/>\r\n            [2] Three, Four<br/>\r\n            [3] Five<br/>\r\n            <br/>\r\n            Note that the leading and trailing spaces were removed from each item during the split.\r\n            </remarks>\r\n            <param name=\"source\">Source string to split apart</param>\r\n            <param name=\"separator\">Separator character</param>\r\n            <returns>A string array of the split up elements</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.NewSplit(System.String,System.Char,System.Boolean,System.String@)\">\r\n            <summary>\r\n            Splits the specified string into multiple strings based on a separator\r\n            and returns the result as an array of strings.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The string to split into pieces based on the separator character.  If\r\n            this string is null, null will always be returned.  If this string is\r\n            empty, an array of zero strings will always be returned.\r\n            </param>\r\n            <param name=\"separator\">\r\n            The character used to divide the original string into sub-strings.\r\n            This character cannot be a backslash or a double-quote; otherwise, no\r\n            work will be performed and null will be returned.\r\n            </param>\r\n            <param name=\"keepQuote\">\r\n            If this parameter is non-zero, all double-quote characters will be\r\n            retained in the returned list of strings; otherwise, they will be\r\n            dropped.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this parameter will be modified to contain an appropriate\r\n            error message.\r\n            </param>\r\n            <returns>\r\n            The new array of strings or null if the input string is null -OR- the\r\n            separator character is a backslash or a double-quote -OR- the string\r\n            contains an unbalanced backslash or double-quote character.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToStringWithProvider(System.Object,System.IFormatProvider)\">\r\n            <summary>\r\n            Queries and returns the string representation for an object, using the\r\n            specified (or current) format provider.\r\n            </summary>\r\n            <param name=\"obj\">\r\n            The object instance to return the string representation for.\r\n            </param>\r\n            <param name=\"provider\">\r\n            The format provider to use -OR- null if the current format provider for\r\n            the thread should be used instead.\r\n            </param>\r\n            <returns>\r\n            The string representation for the object instance -OR- null if the\r\n            object instance is also null.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToBoolean(System.Object)\">\r\n            <summary>\r\n            Convert a value to true or false.\r\n            </summary>\r\n            <param name=\"source\">A string or number representing true or false</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.ToBoolean(System.String)\">\r\n            <summary>\r\n            Convert a string to true or false.\r\n            </summary>\r\n            <param name=\"source\">A string representing true or false</param>\r\n            <returns></returns>\r\n            <remarks>\r\n            \"yes\", \"no\", \"y\", \"n\", \"0\", \"1\", \"on\", \"off\" as well as Boolean.FalseString and Boolean.TrueString will all be\r\n            converted to a proper boolean value.\r\n            </remarks>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.SQLiteTypeToType(System.Data.SQLite.SQLiteType)\">\r\n            <summary>\r\n            Converts a SQLiteType to a .NET Type object\r\n            </summary>\r\n            <param name=\"t\">The SQLiteType to convert</param>\r\n            <returns>Returns a .NET Type object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.TypeToDbType(System.Type)\">\r\n            <summary>\r\n            For a given intrinsic type, return a DbType\r\n            </summary>\r\n            <param name=\"typ\">The native type to convert</param>\r\n            <returns>The corresponding (closest match) DbType</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.DbTypeToColumnSize(System.Data.DbType)\">\r\n            <summary>\r\n            Returns the ColumnSize for the given DbType\r\n            </summary>\r\n            <param name=\"typ\">The DbType to get the size of</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.DbTypeToTypeName(System.Data.SQLite.SQLiteConnection,System.Data.DbType,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            Determines the type name for the given database value type.\r\n            </summary>\r\n            <param name=\"connection\">The connection context for custom type mappings, if any.</param>\r\n            <param name=\"dbType\">The database value type.</param>\r\n            <param name=\"flags\">The flags associated with the parent connection object.</param>\r\n            <returns>The type name or an empty string if it cannot be determined.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.DbTypeToType(System.Data.DbType)\">\r\n            <summary>\r\n            Convert a DbType to a Type\r\n            </summary>\r\n            <param name=\"typ\">The DbType to convert from</param>\r\n            <returns>The closest-match .NET type</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.TypeToAffinity(System.Type)\">\r\n            <summary>\r\n            For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types.\r\n            </summary>\r\n            <param name=\"typ\">The type to evaluate</param>\r\n            <returns>The SQLite type affinity for that type.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.GetSQLiteDbTypeMap\">\r\n            <summary>\r\n            Builds and returns a map containing the database column types\r\n            recognized by this provider.\r\n            </summary>\r\n            <returns>\r\n            A map containing the database column types recognized by this\r\n            provider.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConvert.TypeNameToDbType(System.Data.SQLite.SQLiteConnection,System.String,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            For a given type name, return a closest-match .NET type\r\n            </summary>\r\n            <param name=\"connection\">The connection context for custom type mappings, if any.</param>\r\n            <param name=\"name\">The name of the type to match</param>\r\n            <param name=\"flags\">The flags associated with the parent connection object.</param>\r\n            <returns>The .NET DBType the text evaluates to.</returns>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBase.COR_E_EXCEPTION\">\r\n            <summary>\r\n            The error code used for logging exceptions caught in user-provided\r\n            code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.SetMemoryStatus(System.Boolean)\">\r\n            <summary>\r\n            Sets the status of the memory usage tracking subsystem in the SQLite core library.  By default, this is enabled.\r\n            If this is disabled, memory usage tracking will not be performed.  This is not really a per-connection value, it is\r\n            global to the process.\r\n            </summary>\r\n            <param name=\"value\">Non-zero to enable memory usage tracking, zero otherwise.</param>\r\n            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.ReleaseMemory\">\r\n            <summary>\r\n            Attempts to free as much heap memory as possible for the database connection.\r\n            </summary>\r\n            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Shutdown\">\r\n            <summary>\r\n            Shutdown the SQLite engine so that it can be restarted with different config options.\r\n            We depend on auto initialization to recover.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.IsOpen\">\r\n            <summary>\r\n            Determines if the associated native connection handle is open.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if a database connection is open.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Open(System.String,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteOpenFlagsEnum,System.Int32,System.Boolean)\">\r\n            <summary>\r\n            Opens a database.\r\n            </summary>\r\n            <remarks>\r\n            Implementers should call SQLiteFunction.BindFunctions() and save the array after opening a connection\r\n            to bind all attributed user-defined functions and collating sequences to the new connection.\r\n            </remarks>\r\n            <param name=\"strFilename\">The filename of the database to open.  SQLite automatically creates it if it doesn't exist.</param>\r\n            <param name=\"connectionFlags\">The flags associated with the parent connection object</param>\r\n            <param name=\"openFlags\">The open flags to use when creating the connection</param>\r\n            <param name=\"maxPoolSize\">The maximum size of the pool for the given filename</param>\r\n            <param name=\"usePool\">If true, the connection can be pulled from the connection pool</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Close(System.Boolean)\">\r\n            <summary>\r\n            Closes the currently-open database.\r\n            </summary>\r\n            <remarks>\r\n            After the database has been closed implemeters should call SQLiteFunction.UnbindFunctions() to deallocate all interop allocated\r\n            memory associated with the user-defined functions and collating sequences tied to the closed connection.\r\n            </remarks>\r\n            <param name=\"canThrow\">Non-zero if the operation is allowed to throw exceptions, zero otherwise.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.SetTimeout(System.Int32)\">\r\n            <summary>\r\n            Sets the busy timeout on the connection.  SQLiteCommand will call this before executing any command.\r\n            </summary>\r\n            <param name=\"nTimeoutMS\">The number of milliseconds to wait before returning SQLITE_BUSY</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.GetLastError\">\r\n            <summary>\r\n            Returns the text of the last error issued by SQLite\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.GetLastError(System.String)\">\r\n            <summary>\r\n            Returns the text of the last error issued by SQLite -OR- the specified default error text if\r\n            none is available from the SQLite core library.\r\n            </summary>\r\n            <param name=\"defValue\">\r\n            The error text to return in the event that one is not available from the SQLite core library.\r\n            </param>\r\n            <returns>\r\n            The error text.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.ClearPool\">\r\n            <summary>\r\n            When pooling is enabled, force this connection to be disposed rather than returned to the pool\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.CountPool\">\r\n            <summary>\r\n            When pooling is enabled, returns the number of pool entries matching the current file name.\r\n            </summary>\r\n            <returns>The number of pool entries matching the current file name.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Prepare(System.Data.SQLite.SQLiteConnection,System.String,System.Data.SQLite.SQLiteStatement,System.UInt32,System.String@)\">\r\n            <summary>\r\n            Prepares a SQL statement for execution.\r\n            </summary>\r\n            <param name=\"cnn\">The source connection preparing the command.  Can be null for any caller except LINQ</param>\r\n            <param name=\"strSql\">The SQL command text to prepare</param>\r\n            <param name=\"previous\">The previous statement in a multi-statement command, or null if no previous statement exists</param>\r\n            <param name=\"timeoutMS\">The timeout to wait before aborting the prepare</param>\r\n            <param name=\"strRemain\">The remainder of the statement that was not processed.  Each call to prepare parses the\r\n            SQL up to to either the end of the text or to the first semi-colon delimiter.  The remaining text is returned\r\n            here for a subsequent call to Prepare() until all the text has been processed.</param>\r\n            <returns>Returns an initialized SQLiteStatement.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Step(System.Data.SQLite.SQLiteStatement)\">\r\n            <summary>\r\n            Steps through a prepared statement.\r\n            </summary>\r\n            <param name=\"stmt\">The SQLiteStatement to step through</param>\r\n            <returns>True if a row was returned, False if not.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Reset(System.Data.SQLite.SQLiteStatement)\">\r\n            <summary>\r\n            Resets a prepared statement so it can be executed again.  If the error returned is SQLITE_SCHEMA,\r\n            transparently attempt to rebuild the SQL statement and throw an error if that was not possible.\r\n            </summary>\r\n            <param name=\"stmt\">The statement to reset</param>\r\n            <returns>Returns -1 if the schema changed while resetting, 0 if the reset was sucessful or 6 (SQLITE_LOCKED) if the reset failed due to a lock</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.Cancel\">\r\n            <summary>\r\n            Attempts to interrupt the query currently executing on the associated\r\n            native database connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            This function binds a user-defined functions to the connection.\r\n            </summary>\r\n            <param name=\"functionAttribute\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunctionAttribute\"/> object instance containing\r\n            the metadata for the function to be bound.\r\n            </param>\r\n            <param name=\"function\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance that implements the\r\n            function to be bound.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags associated with the parent connection object.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to create a disposable\r\n            module containing the implementation of a virtual table.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The module object to be used when creating the native disposable module.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags for the associated <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.DisposeModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to cleanup the resources\r\n            associated with a module containing the implementation of a virtual table.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The module object previously passed to the <see cref=\"M:System.Data.SQLite.SQLiteBase.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)\"/>\r\n            method.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags for the associated <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.DeclareVirtualTable(System.Data.SQLite.SQLiteModule,System.String,System.String@)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to declare a virtual table\r\n            in response to a call into the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/>\r\n            or <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> virtual table methods.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The virtual table module that is to be responsible for the virtual table\r\n            being declared.\r\n            </param>\r\n            <param name=\"strSql\">\r\n            The string containing the SQL statement describing the virtual table to\r\n            be declared.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon success, the contents of this parameter are undefined.  Upon failure,\r\n            it should contain an appropriate error message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.DeclareVirtualFunction(System.Data.SQLite.SQLiteModule,System.Int32,System.String,System.String@)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to declare a virtual table\r\n            function in response to a call into the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/>\r\n            or <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> virtual table methods.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The virtual table module that is to be responsible for the virtual table\r\n            function being declared.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments to the function being declared.\r\n            </param>\r\n            <param name=\"name\">\r\n            The name of the function being declared.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon success, the contents of this parameter are undefined.  Upon failure,\r\n            it should contain an appropriate error message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.SetLoadExtension(System.Boolean)\">\r\n            <summary>\r\n            Enables or disabled extension loading by SQLite.\r\n            </summary>\r\n            <param name=\"bOnOff\">\r\n            True to enable loading of extensions, false to disable.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.LoadExtension(System.String,System.String)\">\r\n            <summary>\r\n            Loads a SQLite extension library from the named file.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The name of the dynamic link library file containing the extension.\r\n            </param>\r\n            <param name=\"procName\">\r\n            The name of the exported function used to initialize the extension.\r\n            If null, the default \"sqlite3_extension_init\" will be used.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.SetExtendedResultCodes(System.Boolean)\">\r\n            <summary>\r\n            Enables or disabled extened result codes returned by SQLite\r\n            </summary>\r\n            <param name=\"bOnOff\">true to enable extended result codes, false to disable.</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.ResultCode\">\r\n            <summary>\r\n            Returns the numeric result code for the most recent failed SQLite API call\r\n            associated with the database connection.\r\n            </summary>\r\n            <returns>Result code</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.ExtendedResultCode\">\r\n            <summary>\r\n            Returns the extended numeric result code for the most recent failed SQLite API call\r\n            associated with the database connection.\r\n            </summary>\r\n            <returns>Extended result code</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            <summary>\r\n            Add a log message via the SQLite sqlite3_log interface.\r\n            </summary>\r\n            <param name=\"iErrCode\">Error code to be logged with the message.</param>\r\n            <param name=\"zMessage\">String to be logged.  Unlike the SQLite sqlite3_log()\r\n            interface, this should be pre-formatted.  Consider using the\r\n            String.Format() function.</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.IsInitialized\">\r\n            <summary>\r\n            Checks if the SQLite core library has been initialized in the current process.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if the SQLite core library has been initialized in the current process,\r\n            zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.InitializeBackup(System.Data.SQLite.SQLiteConnection,System.String,System.String)\">\r\n            <summary>\r\n            Creates a new SQLite backup object based on the provided destination\r\n            database connection.  The source database connection is the one\r\n            associated with this object.  The source and destination database\r\n            connections cannot be the same.\r\n            </summary>\r\n            <param name=\"destCnn\">The destination database connection.</param>\r\n            <param name=\"destName\">The destination database name.</param>\r\n            <param name=\"sourceName\">The source database name.</param>\r\n            <returns>The newly created backup object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.StepBackup(System.Data.SQLite.SQLiteBackup,System.Int32,System.Boolean@)\">\r\n            <summary>\r\n            Copies up to N pages from the source database to the destination\r\n            database associated with the specified backup object.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to use.</param>\r\n            <param name=\"nPage\">\r\n            The number of pages to copy or negative to copy all remaining pages.\r\n            </param>\r\n            <param name=\"retry\">\r\n            Set to true if the operation needs to be retried due to database\r\n            locking issues.\r\n            </param>\r\n            <returns>\r\n            True if there are more pages to be copied, false otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.RemainingBackup(System.Data.SQLite.SQLiteBackup)\">\r\n            <summary>\r\n            Returns the number of pages remaining to be copied from the source\r\n            database to the destination database associated with the specified\r\n            backup object.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to check.</param>\r\n            <returns>The number of pages remaining to be copied.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.PageCountBackup(System.Data.SQLite.SQLiteBackup)\">\r\n            <summary>\r\n            Returns the total number of pages in the source database associated\r\n            with the specified backup object.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to check.</param>\r\n            <returns>The total number of pages in the source database.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.FinishBackup(System.Data.SQLite.SQLiteBackup)\">\r\n            <summary>\r\n            Destroys the backup object, rolling back any backup that may be in\r\n            progess.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to destroy.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.FallbackGetErrorString(System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Returns the error message for the specified SQLite return code using\r\n            the internal static lookup table.\r\n            </summary>\r\n            <param name=\"rc\">The SQLite return code.</param>\r\n            <returns>The error message or null if it cannot be found.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBase.GetErrorString(System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Returns the error message for the specified SQLite return code using\r\n            the sqlite3_errstr() function, falling back to the internal lookup\r\n            table if necessary.\r\n            </summary>\r\n            <param name=\"rc\">The SQLite return code.</param>\r\n            <returns>The error message or null if it cannot be found.</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.Version\">\r\n            <summary>\r\n            Returns a string representing the active version of SQLite\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.VersionNumber\">\r\n            <summary>\r\n            Returns an integer representing the active version of SQLite\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.LastInsertRowId\">\r\n            <summary>\r\n            Returns the rowid of the most recent successful INSERT into the database from this connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.Changes\">\r\n            <summary>\r\n            Returns the number of changes the last executing insert/update caused.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.MemoryUsed\">\r\n            <summary>\r\n            Returns the amount of memory (in bytes) currently in use by the SQLite core library.  This is not really a per-connection\r\n            value, it is global to the process.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.MemoryHighwater\">\r\n            <summary>\r\n            Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset.\r\n            This is not really a per-connection value, it is global to the process.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.OwnHandle\">\r\n            <summary>\r\n            Returns non-zero if the underlying native connection handle is owned by this instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteBase.AutoCommit\">\r\n            <summary>\r\n            Returns non-zero if the given database connection is in autocommit mode.\r\n            Autocommit mode is on by default.  Autocommit mode is disabled by a BEGIN\r\n            statement.  Autocommit mode is re-enabled by a COMMIT or ROLLBACK.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLite3._sql\">\r\n            <summary>\r\n            The opaque pointer returned to us by the sqlite provider\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLite3._functions\">\r\n            <summary>\r\n            The user-defined functions registered on this connection\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLite3._modules\">\r\n            <summary>\r\n            The modules created using this connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String,System.IntPtr,System.String,System.Boolean)\">\r\n            <summary>\r\n            Constructs the object used to interact with the SQLite core library\r\n            using the UTF-8 text encoding.\r\n            </summary>\r\n            <param name=\"fmt\">\r\n            The DateTime format to be used when converting string values to a\r\n            DateTime and binding DateTime parameters.\r\n            </param>\r\n            <param name=\"kind\">\r\n            The <see cref=\"T:System.DateTimeKind\"/> to be used when creating DateTime\r\n            values.\r\n            </param>\r\n            <param name=\"fmtString\">\r\n            The format string to be used when parsing and formatting DateTime\r\n            values.\r\n            </param>\r\n            <param name=\"db\">\r\n            The native handle to be associated with the database connection.\r\n            </param>\r\n            <param name=\"fileName\">\r\n            The fully qualified file name associated with <paramref name=\"db \"/>.\r\n            </param>\r\n            <param name=\"ownHandle\">\r\n            Non-zero if the newly created object instance will need to dispose\r\n            of <paramref name=\"db\"/> when it is no longer needed.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.DisposeModules\">\r\n            <summary>\r\n            This method attempts to dispose of all the <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> derived\r\n            object instances currently associated with the native database connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.Cancel\">\r\n            <summary>\r\n            Attempts to interrupt the query currently executing on the associated\r\n            native database connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            This function binds a user-defined function to the connection.\r\n            </summary>\r\n            <param name=\"functionAttribute\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunctionAttribute\"/> object instance containing\r\n            the metadata for the function to be bound.\r\n            </param>\r\n            <param name=\"function\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance that implements the\r\n            function to be bound.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags associated with the parent connection object.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.ReleaseMemory\">\r\n            <summary>\r\n            Attempts to free as much heap memory as possible for the database connection.\r\n            </summary>\r\n            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.StaticReleaseMemory(System.Int32,System.Boolean,System.Boolean,System.Int32@,System.Boolean@,System.UInt32@)\">\r\n            <summary>\r\n            Attempts to free N bytes of heap memory by deallocating non-essential memory\r\n            allocations held by the database library. Memory used to cache database pages\r\n            to improve performance is an example of non-essential memory.  This is a no-op\r\n            returning zero if the SQLite core library was not compiled with the compile-time\r\n            option SQLITE_ENABLE_MEMORY_MANAGEMENT.  Optionally, attempts to reset and/or\r\n            compact the Win32 native heap, if applicable.\r\n            </summary>\r\n            <param name=\"nBytes\">\r\n            The requested number of bytes to free.\r\n            </param>\r\n            <param name=\"reset\">\r\n            Non-zero to attempt a heap reset.\r\n            </param>\r\n            <param name=\"compact\">\r\n            Non-zero to attempt heap compaction.\r\n            </param>\r\n            <param name=\"nFree\">\r\n            The number of bytes actually freed.  This value may be zero.\r\n            </param>\r\n            <param name=\"resetOk\">\r\n            This value will be non-zero if the heap reset was successful.\r\n            </param>\r\n            <param name=\"nLargest\">\r\n            The size of the largest committed free block in the heap, in bytes.\r\n            This value will be zero unless heap compaction is enabled.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code (i.e. zero for success and non-zero\r\n            for failure).\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.Shutdown\">\r\n            <summary>\r\n            Shutdown the SQLite engine so that it can be restarted with different\r\n            configuration options.  We depend on auto initialization to recover.\r\n            </summary>\r\n            <returns>Returns a standard SQLite result code.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.StaticShutdown(System.Boolean)\">\r\n            <summary>\r\n            Shutdown the SQLite engine so that it can be restarted with different\r\n            configuration options.  We depend on auto initialization to recover.\r\n            </summary>\r\n            <param name=\"directories\">\r\n            Non-zero to reset the database and temporary directories to their\r\n            default values, which should be null for both.  This parameter has no\r\n            effect on non-Windows operating systems.\r\n            </param>\r\n            <returns>Returns a standard SQLite result code.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.IsOpen\">\r\n            <summary>\r\n            Determines if the associated native connection handle is open.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if the associated native connection handle is open.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to create a disposable\r\n            module containing the implementation of a virtual table.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The module object to be used when creating the native disposable module.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags for the associated <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.DisposeModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to cleanup the resources\r\n            associated with a module containing the implementation of a virtual table.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The module object previously passed to the <see cref=\"M:System.Data.SQLite.SQLite3.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)\"/>\r\n            method.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags for the associated <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.DeclareVirtualTable(System.Data.SQLite.SQLiteModule,System.String,System.String@)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to declare a virtual table\r\n            in response to a call into the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/>\r\n            or <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> virtual table methods.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The virtual table module that is to be responsible for the virtual table\r\n            being declared.\r\n            </param>\r\n            <param name=\"strSql\">\r\n            The string containing the SQL statement describing the virtual table to\r\n            be declared.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon success, the contents of this parameter are undefined.  Upon failure,\r\n            it should contain an appropriate error message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.DeclareVirtualFunction(System.Data.SQLite.SQLiteModule,System.Int32,System.String,System.String@)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to declare a virtual table\r\n            function in response to a call into the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/>\r\n            or <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> virtual table methods.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The virtual table module that is to be responsible for the virtual table\r\n            function being declared.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments to the function being declared.\r\n            </param>\r\n            <param name=\"name\">\r\n            The name of the function being declared.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon success, the contents of this parameter are undefined.  Upon failure,\r\n            it should contain an appropriate error message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.SetLoadExtension(System.Boolean)\">\r\n            <summary>\r\n            Enables or disabled extension loading by SQLite.\r\n            </summary>\r\n            <param name=\"bOnOff\">\r\n            True to enable loading of extensions, false to disable.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.LoadExtension(System.String,System.String)\">\r\n            <summary>\r\n            Loads a SQLite extension library from the named file.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The name of the dynamic link library file containing the extension.\r\n            </param>\r\n            <param name=\"procName\">\r\n            The name of the exported function used to initialize the extension.\r\n            If null, the default \"sqlite3_extension_init\" will be used.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.SetExtendedResultCodes(System.Boolean)\">\r\n            Enables or disabled extended result codes returned by SQLite\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.ResultCode\">\r\n            Gets the last SQLite error code\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.ExtendedResultCode\">\r\n            Gets the last SQLite extended error code\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            Add a log message via the SQLite sqlite3_log interface.\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.StaticLogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            Add a log message via the SQLite sqlite3_log interface.\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.SetLogCallback(System.Data.SQLite.SQLiteLogCallback)\">\r\n            <summary>\r\n            Allows the setting of a logging callback invoked by SQLite when a\r\n            log event occurs.  Only one callback may be set.  If NULL is passed,\r\n            the logging callback is unregistered.\r\n            </summary>\r\n            <param name=\"func\">The callback function to invoke.</param>\r\n            <returns>Returns a result code</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.InitializeBackup(System.Data.SQLite.SQLiteConnection,System.String,System.String)\">\r\n            <summary>\r\n            Creates a new SQLite backup object based on the provided destination\r\n            database connection.  The source database connection is the one\r\n            associated with this object.  The source and destination database\r\n            connections cannot be the same.\r\n            </summary>\r\n            <param name=\"destCnn\">The destination database connection.</param>\r\n            <param name=\"destName\">The destination database name.</param>\r\n            <param name=\"sourceName\">The source database name.</param>\r\n            <returns>The newly created backup object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.StepBackup(System.Data.SQLite.SQLiteBackup,System.Int32,System.Boolean@)\">\r\n            <summary>\r\n            Copies up to N pages from the source database to the destination\r\n            database associated with the specified backup object.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to use.</param>\r\n            <param name=\"nPage\">\r\n            The number of pages to copy, negative to copy all remaining pages.\r\n            </param>\r\n            <param name=\"retry\">\r\n            Set to true if the operation needs to be retried due to database\r\n            locking issues; otherwise, set to false.\r\n            </param>\r\n            <returns>\r\n            True if there are more pages to be copied, false otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.RemainingBackup(System.Data.SQLite.SQLiteBackup)\">\r\n            <summary>\r\n            Returns the number of pages remaining to be copied from the source\r\n            database to the destination database associated with the specified\r\n            backup object.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to check.</param>\r\n            <returns>The number of pages remaining to be copied.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.PageCountBackup(System.Data.SQLite.SQLiteBackup)\">\r\n            <summary>\r\n            Returns the total number of pages in the source database associated\r\n            with the specified backup object.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to check.</param>\r\n            <returns>The total number of pages in the source database.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.FinishBackup(System.Data.SQLite.SQLiteBackup)\">\r\n            <summary>\r\n            Destroys the backup object, rolling back any backup that may be in\r\n            progess.\r\n            </summary>\r\n            <param name=\"backup\">The backup object to destroy.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.IsInitialized\">\r\n            <summary>\r\n            Determines if the SQLite core library has been initialized for the\r\n            current process.\r\n            </summary>\r\n            <returns>\r\n            A boolean indicating whether or not the SQLite core library has been\r\n            initialized for the current process.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.StaticIsInitialized\">\r\n            <summary>\r\n            Determines if the SQLite core library has been initialized for the\r\n            current process.\r\n            </summary>\r\n            <returns>\r\n            A boolean indicating whether or not the SQLite core library has been\r\n            initialized for the current process.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3.GetValue(System.Data.SQLite.SQLiteStatement,System.Data.SQLite.SQLiteConnectionFlags,System.Int32,System.Data.SQLite.SQLiteType)\">\r\n            <summary>\r\n            Helper function to retrieve a column of data from an active statement.\r\n            </summary>\r\n            <param name=\"stmt\">The statement being step()'d through</param>\r\n            <param name=\"flags\">The flags associated with the connection.</param>\r\n            <param name=\"index\">The column index to retrieve</param>\r\n            <param name=\"typ\">The type of data contained in the column.  If Uninitialized, this function will retrieve the datatype information.</param>\r\n            <returns>Returns the data in the column</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLite3.OwnHandle\">\r\n            <summary>\r\n            Returns non-zero if the underlying native connection handle is owned\r\n            by this instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLite3_UTF16\">\r\n            <summary>\r\n            Alternate SQLite3 object, overriding many text behaviors to support UTF-16 (Unicode)\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3_UTF16.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String,System.IntPtr,System.String,System.Boolean)\">\r\n            <summary>\r\n            Constructs the object used to interact with the SQLite core library\r\n            using the UTF-8 text encoding.\r\n            </summary>\r\n            <param name=\"fmt\">\r\n            The DateTime format to be used when converting string values to a\r\n            DateTime and binding DateTime parameters.\r\n            </param>\r\n            <param name=\"kind\">\r\n            The <see cref=\"T:System.DateTimeKind\"/> to be used when creating DateTime\r\n            values.\r\n            </param>\r\n            <param name=\"fmtString\">\r\n            The format string to be used when parsing and formatting DateTime\r\n            values.\r\n            </param>\r\n            <param name=\"db\">\r\n            The native handle to be associated with the database connection.\r\n            </param>\r\n            <param name=\"fileName\">\r\n            The fully qualified file name associated with <paramref name=\"db\"/>.\r\n            </param>\r\n            <param name=\"ownHandle\">\r\n            Non-zero if the newly created object instance will need to dispose\r\n            of <paramref name=\"db\"/> when it is no longer needed.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLite3_UTF16.ToString(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Overrides SQLiteConvert.ToString() to marshal UTF-16 strings instead of UTF-8\r\n            </summary>\r\n            <param name=\"b\">A pointer to a UTF-16 string</param>\r\n            <param name=\"nbytelen\">The length (IN BYTES) of the string</param>\r\n            <returns>A .NET string</returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteBackup\">\r\n            <summary>\r\n            Represents a single SQL backup in SQLite.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._sql\">\r\n            <summary>\r\n            The underlying SQLite object this backup is bound to.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._sqlite_backup\">\r\n            <summary>\r\n            The actual backup handle.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._destDb\">\r\n            <summary>\r\n            The destination database for the backup.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._zDestName\">\r\n            <summary>\r\n            The destination database name for the backup.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._sourceDb\">\r\n            <summary>\r\n            The source database for the backup.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._zSourceName\">\r\n            <summary>\r\n            The source database name for the backup.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteBackup._stepResult\">\r\n            <summary>\r\n            The last result from the StepBackup method of the SQLite3 class.\r\n            This is used to determine if the call to the FinishBackup method of\r\n            the SQLite3 class should throw an exception when it receives a non-Ok\r\n            return code from the core SQLite library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBackup.#ctor(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteBackupHandle,System.IntPtr,System.Byte[],System.IntPtr,System.Byte[])\">\r\n            <summary>\r\n            Initializes the backup.\r\n            </summary>\r\n            <param name=\"sqlbase\">The base SQLite object.</param>\r\n            <param name=\"backup\">The backup handle.</param>\r\n            <param name=\"destDb\">The destination database for the backup.</param>\r\n            <param name=\"zDestName\">The destination database name for the backup.</param>\r\n            <param name=\"sourceDb\">The source database for the backup.</param>\r\n            <param name=\"zSourceName\">The source database name for the backup.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBackup.Dispose\">\r\n            <summary>\r\n            Disposes and finalizes the backup.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnectionFlags\">\r\n            <summary>\r\n            The extra behavioral flags that can be applied to a connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.None\">\r\n            <summary>\r\n            No extra flags.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogPrepare\">\r\n            <summary>\r\n            Enable logging of all SQL statements to be prepared.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogPreBind\">\r\n            <summary>\r\n            Enable logging of all bound parameter types and raw values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogBind\">\r\n            <summary>\r\n            Enable logging of all bound parameter strongly typed values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogCallbackException\">\r\n            <summary>\r\n            Enable logging of all exceptions caught from user-provided\r\n            managed code called from native code via delegates.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogBackup\">\r\n            <summary>\r\n            Enable logging of backup API errors.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoExtensionFunctions\">\r\n            <summary>\r\n            Skip adding the extension functions provided by the native\r\n            interop assembly.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.BindUInt32AsInt64\">\r\n            <summary>\r\n            When binding parameter values with the <see cref=\"T:System.UInt32\"/>\r\n            type, use the interop method that accepts an <see cref=\"T:System.Int64\"/>\r\n            value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.BindAllAsText\">\r\n            <summary>\r\n            When binding parameter values, always bind them as though they were\r\n            plain text (i.e. no numeric, date/time, or other conversions should\r\n            be attempted).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.GetAllAsText\">\r\n            <summary>\r\n            When returning column values, always return them as though they were\r\n            plain text (i.e. no numeric, date/time, or other conversions should\r\n            be attempted).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoLoadExtension\">\r\n            <summary>\r\n            Prevent this <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance from\r\n            loading extensions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoCreateModule\">\r\n            <summary>\r\n            Prevent this <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance from\r\n            creating virtual table modules.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoBindFunctions\">\r\n            <summary>\r\n            Skip binding any functions provided by other managed assemblies when\r\n            opening the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoLogModule\">\r\n            <summary>\r\n            Skip setting the logging related properties of the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance that was passed to\r\n            the <see cref=\"M:System.Data.SQLite.SQLiteConnection.CreateModule(System.Data.SQLite.SQLiteModule)\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogModuleError\">\r\n            <summary>\r\n            Enable logging of all virtual table module errors seen by the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.IntPtr,System.String)\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogModuleException\">\r\n            <summary>\r\n            Enable logging of certain virtual table module exceptions that cannot\r\n            be easily discovered via other means.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.TraceWarning\">\r\n            <summary>\r\n            Enable tracing of potentially important [non-fatal] error conditions\r\n            that cannot be easily reported through other means.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.ConvertInvariantText\">\r\n            <summary>\r\n            When binding parameter values, always use the invariant culture when\r\n            converting their values from strings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.BindInvariantText\">\r\n            <summary>\r\n            When binding parameter values, always use the invariant culture when\r\n            converting their values to strings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoConnectionPool\">\r\n            <summary>\r\n            Disable using the connection pool by default.  If the \"Pooling\"\r\n            connection string property is specified, its value will override\r\n            this flag.  The precise outcome of combining this flag with the\r\n            <see cref=\"F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionPool\"/> flag is unspecified; however,\r\n            one of the flags will be in effect.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionPool\">\r\n            <summary>\r\n            Enable using the connection pool by default.  If the \"Pooling\"\r\n            connection string property is specified, its value will override\r\n            this flag.  The precise outcome of combining this flag with the\r\n            <see cref=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoConnectionPool\"/> flag is unspecified; however,\r\n            one of the flags will be in effect.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionTypes\">\r\n            <summary>\r\n            Enable using per-connection mappings between type names and\r\n            <see cref=\"T:System.Data.DbType\"/> values.  Also see the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteConnection.ClearTypeMappings\"/>,\r\n            <see cref=\"M:System.Data.SQLite.SQLiteConnection.GetTypeMappings\"/>, and\r\n            <see cref=\"M:System.Data.SQLite.SQLiteConnection.AddTypeMapping(System.String,System.Data.DbType,System.Boolean)\"/> methods.  These\r\n            per-connection mappings, when present, override the corresponding\r\n            global mappings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.NoGlobalTypes\">\r\n            <summary>\r\n            Disable using global mappings between type names and\r\n            <see cref=\"T:System.Data.DbType\"/> values.  This may be useful in some very narrow\r\n            cases; however, if there are no per-connection type mappings, the\r\n            fallback defaults will be used for both type names and their\r\n            associated <see cref=\"T:System.Data.DbType\"/> values.  Therefore, use of this flag\r\n            is not recommended.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.BindAndGetAllAsText\">\r\n            <summary>\r\n            When binding parameter values or returning column values, always\r\n            treat them as though they were plain text (i.e. no numeric,\r\n            date/time, or other conversions should be attempted).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.ConvertAndBindInvariantText\">\r\n            <summary>\r\n            When binding parameter values, always use the invariant culture when\r\n            converting their values to strings or from strings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.BindAndGetAllAsInvariantText\">\r\n            <summary>\r\n            When binding parameter values or returning column values, always\r\n            treat them as though they were plain text (i.e. no numeric,\r\n            date/time, or other conversions should be attempted) and always\r\n            use the invariant culture when converting their values to strings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.ConvertAndBindAndGetAllAsInvariantText\">\r\n            <summary>\r\n            When binding parameter values or returning column values, always\r\n            treat them as though they were plain text (i.e. no numeric,\r\n            date/time, or other conversions should be attempted) and always\r\n            use the invariant culture when converting their values to strings\r\n            or from strings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.LogAll\">\r\n            <summary>\r\n            Enable all logging.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionFlags.Default\">\r\n            <summary>\r\n            The default extra flags for new connections.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteCommand\">\r\n            <summary>\r\n            SQLite implementation of DbCommand.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand.DefaultConnectionString\">\r\n            <summary>\r\n            The default connection string to be used when creating a temporary\r\n            connection to execute a command via the static\r\n            <see cref=\"M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.String,System.Object[])\"/> or\r\n            <see cref=\"M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.Data.CommandBehavior,System.String,System.Object[])\"/>\r\n            methods.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._commandText\">\r\n            <summary>\r\n            The command text this command is based on\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._cnn\">\r\n            <summary>\r\n            The connection the command is associated with\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._version\">\r\n            <summary>\r\n            The version of the connection the command is associated with\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._activeReader\">\r\n            <summary>\r\n            Indicates whether or not a DataReader is active on the command.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._commandTimeout\">\r\n            <summary>\r\n            The timeout for the command, kludged because SQLite doesn't support per-command timeout values\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._designTimeVisible\">\r\n            <summary>\r\n            Designer support\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._updateRowSource\">\r\n            <summary>\r\n            Used by DbDataAdapter to determine updating behavior\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._parameterCollection\">\r\n            <summary>\r\n            The collection of parameters for the command\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._statementList\">\r\n            <summary>\r\n            The SQL command text, broken into individual SQL statements as they are executed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._remainingText\">\r\n            <summary>\r\n            Unprocessed SQL text that has not been executed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteCommand._transaction\">\r\n            <summary>\r\n            Transaction associated with this command\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.#ctor\">\r\n            <overloads>\r\n             Constructs a new SQLiteCommand\r\n             </overloads>\r\n             <summary>\r\n             Default constructor\r\n             </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.#ctor(System.String)\">\r\n            <summary>\r\n            Initializes the command with the given command text\r\n            </summary>\r\n            <param name=\"commandText\">The SQL command text</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.#ctor(System.String,System.Data.SQLite.SQLiteConnection)\">\r\n            <summary>\r\n            Initializes the command with the given SQL command text and attach the command to the specified\r\n            connection.\r\n            </summary>\r\n            <param name=\"commandText\">The SQL command text</param>\r\n            <param name=\"connection\">The connection to associate with the command</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.#ctor(System.Data.SQLite.SQLiteConnection)\">\r\n            <summary>\r\n            Initializes the command and associates it with the specified connection.\r\n            </summary>\r\n            <param name=\"connection\">The connection to associate with the command</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.#ctor(System.String,System.Data.SQLite.SQLiteConnection,System.Data.SQLite.SQLiteTransaction)\">\r\n            <summary>\r\n            Initializes a command with the given SQL, connection and transaction\r\n            </summary>\r\n            <param name=\"commandText\">The SQL command text</param>\r\n            <param name=\"connection\">The connection to associate with the command</param>\r\n            <param name=\"transaction\">The transaction the command should be associated with</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of the command and clears all member variables\r\n            </summary>\r\n            <param name=\"disposing\">Whether or not the class is being explicitly or implicitly disposed</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.GetFlags(System.Data.SQLite.SQLiteCommand)\">\r\n            <summary>\r\n            This method attempts to query the flags associated with the database\r\n            connection in use.  If the database connection is disposed, the default\r\n            flags will be returned.\r\n            </summary>\r\n            <param name=\"command\">\r\n            The command containing the databse connection to query the flags from.\r\n            </param>\r\n            <returns>\r\n            The connection flags value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ClearCommands\">\r\n            <summary>\r\n            Clears and destroys all statements currently prepared\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.BuildNextCommand\">\r\n            <summary>\r\n            Builds an array of prepared statements for each complete SQL statement in the command text\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.Cancel\">\r\n            <summary>\r\n            Not implemented\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.CreateDbParameter\">\r\n            <summary>\r\n            Forwards to the local CreateParameter() function\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.CreateParameter\">\r\n            <summary>\r\n            Create a new parameter\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.InitializeForReader\">\r\n            <summary>\r\n            This function ensures there are no active readers, that we have a valid connection,\r\n            that the connection is open, that all statements are prepared and all parameters are assigned\r\n            in preparation for allocating a data reader.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteDbDataReader(System.Data.CommandBehavior)\">\r\n            <summary>\r\n            Creates a new SQLiteDataReader to execute/iterate the array of SQLite prepared statements\r\n            </summary>\r\n            <param name=\"behavior\">The behavior the data reader should adopt</param>\r\n            <returns>Returns a SQLiteDataReader object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.String,System.Object[])\">\r\n            <summary>\r\n            This method creates a new connection, executes the query using the given\r\n            execution type, closes the connection, and returns the results.  If the\r\n            connection string is null, a temporary in-memory database connection will\r\n            be used.\r\n            </summary>\r\n            <param name=\"commandText\">\r\n            The text of the command to be executed.\r\n            </param>\r\n            <param name=\"executeType\">\r\n            The execution type for the command.  This is used to determine which method\r\n            of the command object to call, which then determines the type of results\r\n            returned, if any.\r\n            </param>\r\n            <param name=\"connectionString\">\r\n            The connection string to the database to be opened, used, and closed.  If\r\n            this parameter is null, a temporary in-memory databse will be used.\r\n            </param>\r\n            <param name=\"args\">\r\n            The SQL parameter values to be used when building the command object to be\r\n            executed, if any.\r\n            </param>\r\n            <returns>\r\n            The results of the query -OR- null if no results were produced from the\r\n            given execution type.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.Data.CommandBehavior,System.String,System.Object[])\">\r\n            <summary>\r\n            This method creates a new connection, executes the query using the given\r\n            execution type and command behavior, closes the connection, and returns\r\n            the results.  If the connection string is null, a temporary in-memory\r\n            database connection will be used.\r\n            </summary>\r\n            <param name=\"commandText\">\r\n            The text of the command to be executed.\r\n            </param>\r\n            <param name=\"executeType\">\r\n            The execution type for the command.  This is used to determine which method\r\n            of the command object to call, which then determines the type of results\r\n            returned, if any.\r\n            </param>\r\n            <param name=\"commandBehavior\">\r\n            The command behavior flags for the command.\r\n            </param>\r\n            <param name=\"connectionString\">\r\n            The connection string to the database to be opened, used, and closed.  If\r\n            this parameter is null, a temporary in-memory databse will be used.\r\n            </param>\r\n            <param name=\"args\">\r\n            The SQL parameter values to be used when building the command object to be\r\n            executed, if any.\r\n            </param>\r\n            <returns>\r\n            The results of the query -OR- null if no results were produced from the\r\n            given execution type.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteReader(System.Data.CommandBehavior)\">\r\n            <summary>\r\n            Overrides the default behavior to return a SQLiteDataReader specialization class\r\n            </summary>\r\n            <param name=\"behavior\">The flags to be associated with the reader.</param>\r\n            <returns>A SQLiteDataReader</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteReader\">\r\n            <summary>\r\n            Overrides the default behavior of DbDataReader to return a specialized SQLiteDataReader class\r\n            </summary>\r\n            <returns>A SQLiteDataReader</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ClearDataReader\">\r\n            <summary>\r\n            Called by the SQLiteDataReader when the data reader is closed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery\">\r\n            <summary>\r\n            Execute the command and return the number of rows inserted/updated affected by it.\r\n            </summary>\r\n            <returns>The number of rows inserted/updated affected by it.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(System.Data.CommandBehavior)\">\r\n            <summary>\r\n            Execute the command and return the number of rows inserted/updated affected by it.\r\n            </summary>\r\n            <param name=\"behavior\">The flags to be associated with the reader.</param>\r\n            <returns>The number of rows inserted/updated affected by it.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteScalar\">\r\n            <summary>\r\n            Execute the command and return the first column of the first row of the resultset\r\n            (if present), or null if no resultset was returned.\r\n            </summary>\r\n            <returns>The first column of the first row of the first resultset from the query.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.ExecuteScalar(System.Data.CommandBehavior)\">\r\n            <summary>\r\n            Execute the command and return the first column of the first row of the resultset\r\n            (if present), or null if no resultset was returned.\r\n            </summary>\r\n            <param name=\"behavior\">The flags to be associated with the reader.</param>\r\n            <returns>The first column of the first row of the first resultset from the query.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.Prepare\">\r\n            <summary>\r\n            Does nothing.  Commands are prepared as they are executed the first time, and kept in prepared state afterwards.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommand.Clone\">\r\n            <summary>\r\n            Clones a command, including all its parameters\r\n            </summary>\r\n            <returns>A new SQLiteCommand with the same commandtext, connection and parameters</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.CommandText\">\r\n            <summary>\r\n            The SQL command text associated with the command\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.CommandTimeout\">\r\n            <summary>\r\n            The amount of time to wait for the connection to become available before erroring out\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.CommandType\">\r\n            <summary>\r\n            The type of the command.  SQLite only supports CommandType.Text\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.Connection\">\r\n            <summary>\r\n            The connection associated with this command\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.DbConnection\">\r\n            <summary>\r\n            Forwards to the local Connection property\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.Parameters\">\r\n            <summary>\r\n            Returns the SQLiteParameterCollection for the given command\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.DbParameterCollection\">\r\n            <summary>\r\n            Forwards to the local Parameters property\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.Transaction\">\r\n            <summary>\r\n            The transaction associated with this command.  SQLite only supports one transaction per connection, so this property forwards to the\r\n            command's underlying connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.DbTransaction\">\r\n            <summary>\r\n            Forwards to the local Transaction property\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.UpdatedRowSource\">\r\n            <summary>\r\n            Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommand.DesignTimeVisible\">\r\n            <summary>\r\n            Determines if the command is visible at design time.  Defaults to True.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteCommandBuilder\">\r\n            <summary>\r\n            SQLite implementation of DbCommandBuilder.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.#ctor\">\r\n            <summary>\r\n            Default constructor\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.#ctor(System.Data.SQLite.SQLiteDataAdapter)\">\r\n            <summary>\r\n            Initializes the command builder and associates it with the specified data adapter.\r\n            </summary>\r\n            <param name=\"adp\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.ApplyParameterInfo(System.Data.Common.DbParameter,System.Data.DataRow,System.Data.StatementType,System.Boolean)\">\r\n            <summary>\r\n            Minimal amount of parameter processing.  Primarily sets the DbType for the parameter equal to the provider type in the schema\r\n            </summary>\r\n            <param name=\"parameter\">The parameter to use in applying custom behaviors to a row</param>\r\n            <param name=\"row\">The row to apply the parameter to</param>\r\n            <param name=\"statementType\">The type of statement</param>\r\n            <param name=\"whereClause\">Whether the application of the parameter is part of a WHERE clause</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetParameterName(System.String)\">\r\n            <summary>\r\n            Returns a valid named parameter\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter</param>\r\n            <returns>Error</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetParameterName(System.Int32)\">\r\n            <summary>\r\n            Returns a named parameter for the given ordinal\r\n            </summary>\r\n            <param name=\"parameterOrdinal\">The i of the parameter</param>\r\n            <returns>Error</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetParameterPlaceholder(System.Int32)\">\r\n            <summary>\r\n            Returns a placeholder character for the specified parameter i.\r\n            </summary>\r\n            <param name=\"parameterOrdinal\">The index of the parameter to provide a placeholder for</param>\r\n            <returns>Returns a named parameter</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.SetRowUpdatingHandler(System.Data.Common.DbDataAdapter)\">\r\n            <summary>\r\n            Sets the handler for receiving row updating events.  Used by the DbCommandBuilder to autogenerate SQL\r\n            statements that may not have previously been generated.\r\n            </summary>\r\n            <param name=\"adapter\">A data adapter to receive events on.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetDeleteCommand\">\r\n            <summary>\r\n            Returns the automatically-generated SQLite command to delete rows from the database\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetDeleteCommand(System.Boolean)\">\r\n            <summary>\r\n            Returns the automatically-generated SQLite command to delete rows from the database\r\n            </summary>\r\n            <param name=\"useColumnsForParameterNames\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetUpdateCommand\">\r\n            <summary>\r\n            Returns the automatically-generated SQLite command to update rows in the database\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetUpdateCommand(System.Boolean)\">\r\n            <summary>\r\n            Returns the automatically-generated SQLite command to update rows in the database\r\n            </summary>\r\n            <param name=\"useColumnsForParameterNames\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetInsertCommand\">\r\n            <summary>\r\n            Returns the automatically-generated SQLite command to insert rows into the database\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetInsertCommand(System.Boolean)\">\r\n            <summary>\r\n            Returns the automatically-generated SQLite command to insert rows into the database\r\n            </summary>\r\n            <param name=\"useColumnsForParameterNames\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.QuoteIdentifier(System.String)\">\r\n            <summary>\r\n            Places brackets around an identifier\r\n            </summary>\r\n            <param name=\"unquotedIdentifier\">The identifier to quote</param>\r\n            <returns>The bracketed identifier</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.UnquoteIdentifier(System.String)\">\r\n            <summary>\r\n            Removes brackets around an identifier\r\n            </summary>\r\n            <param name=\"quotedIdentifier\">The quoted (bracketed) identifier</param>\r\n            <returns>The undecorated identifier</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteCommandBuilder.GetSchemaTable(System.Data.Common.DbCommand)\">\r\n            <summary>\r\n            Override helper, which can help the base command builder choose the right keys for the given query\r\n            </summary>\r\n            <param name=\"sourceCommand\"></param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommandBuilder.DataAdapter\">\r\n            <summary>\r\n            Gets/sets the DataAdapter for this CommandBuilder\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommandBuilder.CatalogLocation\">\r\n            <summary>\r\n            Overridden to hide its property from the designer\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommandBuilder.CatalogSeparator\">\r\n            <summary>\r\n            Overridden to hide its property from the designer\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommandBuilder.QuotePrefix\">\r\n            <summary>\r\n            Overridden to hide its property from the designer\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommandBuilder.QuoteSuffix\">\r\n            <summary>\r\n            Overridden to hide its property from the designer\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteCommandBuilder.SchemaSeparator\">\r\n            <summary>\r\n            Overridden to hide its property from the designer\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.ConnectionEventArgs\">\r\n            <summary>\r\n            Event data for connection event handlers.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.EventType\">\r\n            <summary>\r\n            The type of event being raised.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.EventArgs\">\r\n            <summary>\r\n            The <see cref=\"T:System.Data.StateChangeEventArgs\"/> associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.Transaction\">\r\n            <summary>\r\n            The transaction associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.Command\">\r\n            <summary>\r\n            The command associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.DataReader\">\r\n            <summary>\r\n            The data reader associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.CriticalHandle\">\r\n            <summary>\r\n            The critical handle associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.Text\">\r\n            <summary>\r\n            Command or message text associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.ConnectionEventArgs.Data\">\r\n            <summary>\r\n            Extra data associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ConnectionEventArgs.#ctor(System.Data.SQLite.SQLiteConnectionEventType,System.Data.StateChangeEventArgs,System.Data.IDbTransaction,System.Data.IDbCommand,System.Data.IDataReader,System.Runtime.InteropServices.CriticalHandle,System.String,System.Object)\">\r\n            <summary>\r\n            Constructs the object.\r\n            </summary>\r\n            <param name=\"eventType\">The type of event being raised.</param>\r\n            <param name=\"eventArgs\">The base <see cref=\"F:System.Data.SQLite.ConnectionEventArgs.EventArgs\"/> associated\r\n            with this event, if any.</param>\r\n            <param name=\"transaction\">The transaction associated with this event, if any.</param>\r\n            <param name=\"command\">The command associated with this event, if any.</param>\r\n            <param name=\"dataReader\">The data reader associated with this event, if any.</param>\r\n            <param name=\"criticalHandle\">The critical handle associated with this event, if any.</param>\r\n            <param name=\"text\">The command or message text, if any.</param>\r\n            <param name=\"data\">The extra data, if any.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnectionEventHandler\">\r\n            <summary>\r\n            Raised when an event pertaining to a connection occurs.\r\n            </summary>\r\n            <param name=\"sender\">The connection involved.</param>\r\n            <param name=\"e\">Extra information about the event.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnection\">\r\n            <summary>\r\n            SQLite implentation of DbConnection.\r\n            </summary>\r\n            <remarks>\r\n            The <see cref=\"P:System.Data.SQLite.SQLiteConnection.ConnectionString\"/> property can contain the following parameter(s), delimited with a semi-colon:\r\n            <list type=\"table\">\r\n            <listheader>\r\n            <term>Parameter</term>\r\n            <term>Values</term>\r\n            <term>Required</term>\r\n            <term>Default</term>\r\n            </listheader>\r\n            <item>\r\n            <description>Data Source</description>\r\n            <description>\r\n            This may be a file name, the string \":memory:\", or any supported URI (starting with SQLite 3.7.7).\r\n            Starting with release 1.0.86.0, in order to use more than one consecutive backslash (e.g. for a\r\n            UNC path), each of the adjoining backslash characters must be doubled (e.g. \"\\\\Network\\Share\\test.db\"\r\n            would become \"\\\\\\\\Network\\Share\\test.db\").\r\n            </description>\r\n            <description>Y</description>\r\n            <description></description>\r\n            </item>\r\n            <item>\r\n            <description>Version</description>\r\n            <description>3</description>\r\n            <description>N</description>\r\n            <description>3</description>\r\n            </item>\r\n            <item>\r\n            <description>UseUTF16Encoding</description>\r\n            <description><b>True</b><br/><b>False</b></description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>DateTimeFormat</description>\r\n            <description>\r\n            <b>Ticks</b> - Use the value of DateTime.Ticks.<br/>\r\n            <b>ISO8601</b> - Use the ISO-8601 format.  Uses the \"yyyy-MM-dd HH:mm:ss.FFFFFFFK\" format for UTC\r\n            DateTime values and \"yyyy-MM-dd HH:mm:ss.FFFFFFF\" format for local DateTime values).<br/>\r\n            <b>JulianDay</b> - The interval of time in days and fractions of a day since January 1, 4713 BC.<br/>\r\n            <b>UnixEpoch</b> - The whole number of seconds since the Unix epoch (January 1, 1970).<br/>\r\n            <b>InvariantCulture</b> - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.<br/>\r\n            <b>CurrentCulture</b> - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.</description>\r\n            <description>N</description>\r\n            <description>ISO8601</description>\r\n            </item>\r\n            <item>\r\n            <description>DateTimeKind</description>\r\n            <description><b>Unspecified</b> - Not specified as either UTC or local time.<br/><b>Utc</b> - The time represented is UTC.<br/><b>Local</b> - The time represented is local time.</description>\r\n            <description>N</description>\r\n            <description>Unspecified</description>\r\n            </item>\r\n            <item>\r\n            <description>DateTimeFormatString</description>\r\n            <description>The exact DateTime format string to use for all formatting and parsing of all DateTime\r\n            values for this connection.</description>\r\n            <description>N</description>\r\n            <description>null</description>\r\n            </item>\r\n            <item>\r\n            <description>BaseSchemaName</description>\r\n            <description>Some base data classes in the framework (e.g. those that build SQL queries dynamically)\r\n            assume that an ADO.NET provider cannot support an alternate catalog (i.e. database) without supporting\r\n            alternate schemas as well; however, SQLite does not fit into this model.  Therefore, this value is used\r\n            as a placeholder and removed prior to preparing any SQL statements that may contain it.</description>\r\n            <description>N</description>\r\n            <description>sqlite_default_schema</description>\r\n            </item>\r\n            <item>\r\n            <description>BinaryGUID</description>\r\n            <description><b>True</b> - Store GUID columns in binary form<br/><b>False</b> - Store GUID columns as text</description>\r\n            <description>N</description>\r\n            <description>True</description>\r\n            </item>\r\n            <item>\r\n            <description>Cache Size</description>\r\n            <description>{size in bytes}</description>\r\n            <description>N</description>\r\n            <description>2000</description>\r\n            </item>\r\n            <item>\r\n            <description>Synchronous</description>\r\n            <description><b>Normal</b> - Normal file flushing behavior<br/><b>Full</b> - Full flushing after all writes<br/><b>Off</b> - Underlying OS flushes I/O's</description>\r\n            <description>N</description>\r\n            <description>Full</description>\r\n            </item>\r\n            <item>\r\n            <description>Page Size</description>\r\n            <description>{size in bytes}</description>\r\n            <description>N</description>\r\n            <description>1024</description>\r\n            </item>\r\n            <item>\r\n            <description>Password</description>\r\n            <description>{password} - Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.</description>\r\n            <description>N</description>\r\n            <description></description>\r\n            </item>\r\n            <item>\r\n            <description>HexPassword</description>\r\n            <description>{hexPassword} - Must contain a sequence of zero or more hexadecimal encoded byte values without a leading \"0x\" prefix.  Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.</description>\r\n            <description>N</description>\r\n            <description></description>\r\n            </item>\r\n            <item>\r\n            <description>Enlist</description>\r\n            <description><b>Y</b> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description>\r\n            <description>N</description>\r\n            <description>Y</description>\r\n            </item>\r\n            <item>\r\n            <description>Pooling</description>\r\n            <description>\r\n            <b>True</b> - Use connection pooling.<br/>\r\n            <b>False</b> - Do not use connection pooling.<br/><br/>\r\n            <b>WARNING:</b> When using the default connection pool implementation,\r\n            setting this property to True should be avoided by applications that make\r\n            use of COM (either directly or indirectly) due to possible deadlocks that\r\n            can occur during the finalization of some COM objects.\r\n            </description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>FailIfMissing</description>\r\n            <description><b>True</b> - Don't create the database if it does not exist, throw an error instead<br/><b>False</b> - Automatically create the database if it does not exist</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Max Page Count</description>\r\n            <description>{size in pages} - Limits the maximum number of pages (limits the size) of the database</description>\r\n            <description>N</description>\r\n            <description>0</description>\r\n            </item>\r\n            <item>\r\n            <description>Legacy Format</description>\r\n            <description><b>True</b> - Use the more compatible legacy 3.x database format<br/><b>False</b> - Use the newer 3.3x database format which compresses numbers more effectively</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Default Timeout</description>\r\n            <description>{time in seconds}<br/>The default command timeout</description>\r\n            <description>N</description>\r\n            <description>30</description>\r\n            </item>\r\n            <item>\r\n            <description>Journal Mode</description>\r\n            <description><b>Delete</b> - Delete the journal file after a commit<br/><b>Persist</b> - Zero out and leave the journal file on disk after a commit<br/><b>Off</b> - Disable the rollback journal entirely</description>\r\n            <description>N</description>\r\n            <description>Delete</description>\r\n            </item>\r\n            <item>\r\n            <description>Read Only</description>\r\n            <description><b>True</b> - Open the database for read only access<br/><b>False</b> - Open the database for normal read/write access</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Max Pool Size</description>\r\n            <description>The maximum number of connections for the given connection string that can be in the connection pool</description>\r\n            <description>N</description>\r\n            <description>100</description>\r\n            </item>\r\n            <item>\r\n            <description>Default IsolationLevel</description>\r\n            <description>The default transaciton isolation level</description>\r\n            <description>N</description>\r\n            <description>Serializable</description>\r\n            </item>\r\n            <item>\r\n            <description>Foreign Keys</description>\r\n            <description>Enable foreign key constraints</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Flags</description>\r\n            <description>Extra behavioral flags for the connection.  See the <see cref=\"T:System.Data.SQLite.SQLiteConnectionFlags\"/> enumeration for possible values.</description>\r\n            <description>N</description>\r\n            <description>Default</description>\r\n            </item>\r\n            <item>\r\n            <description>SetDefaults</description>\r\n            <description>\r\n            <b>True</b> - Apply the default connection settings to the opened database.<br/>\r\n            <b>False</b> - Skip applying the default connection settings to the opened database.\r\n            </description>\r\n            <description>N</description>\r\n            <description>True</description>\r\n            </item>\r\n            <item>\r\n            <description>ToFullPath</description>\r\n            <description>\r\n            <b>True</b> - Attempt to expand the data source file name to a fully qualified path before opening.<br/>\r\n            <b>False</b> - Skip attempting to expand the data source file name to a fully qualified path before opening.\r\n            </description>\r\n            <description>N</description>\r\n            <description>True</description>\r\n            </item>\r\n            </list>\r\n            </remarks>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection.DefaultBaseSchemaName\">\r\n            <summary>\r\n            The default \"stub\" (i.e. placeholder) base schema name to use when\r\n            returning column schema information.  Used as the initial value of\r\n            the BaseSchemaName property.  This should start with \"sqlite_*\"\r\n            because those names are reserved for use by SQLite (i.e. they cannot\r\n            be confused with the names of user objects).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._assembly\">\r\n            <summary>\r\n            The managed assembly containing this type.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._syncRoot\">\r\n            <summary>\r\n            Object used to synchronize access to the static instance data\r\n            for this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._connectionState\">\r\n            <summary>\r\n            State of the current connection\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._connectionString\">\r\n            <summary>\r\n            The connection string\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._transactionLevel\">\r\n            <summary>\r\n            Nesting level of the transactions open on the connection\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._disposing\">\r\n            <summary>\r\n            If set, then the connection is currently being disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._defaultIsolation\">\r\n            <summary>\r\n            The default isolation level for new transactions\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._enlistment\">\r\n            <summary>\r\n            Whether or not the connection is enlisted in a distrubuted transaction\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._typeNames\">\r\n            <summary>\r\n            The per-connection mappings between type names and <see cref=\"T:System.Data.DbType\"/>\r\n            values.  These mappings override the corresponding global mappings.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._sql\">\r\n            <summary>\r\n            The base SQLite object to interop with\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._dataSource\">\r\n            <summary>\r\n            The database filename minus path and extension\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._password\">\r\n            <summary>\r\n            Temporary password storage, emptied after the database has been opened\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._baseSchemaName\">\r\n            <summary>\r\n            The \"stub\" (i.e. placeholder) base schema name to use when returning\r\n            column schema information.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._flags\">\r\n            <summary>\r\n            The extra behavioral flags for this connection, if any.  See the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteConnectionFlags\"/> enumeration for a list of\r\n            possible values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._defaultTimeout\">\r\n            <summary>\r\n            Default command timeout\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnection._parseViaFramework\">\r\n            <summary>\r\n            Non-zero if the built-in (i.e. framework provided) connection string\r\n            parser should be used when opening the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.#ctor\">\r\n            <overloads>\r\n             Constructs a new SQLiteConnection object\r\n             </overloads>\r\n             <summary>\r\n             Default constructor\r\n             </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.#ctor(System.String)\">\r\n            <summary>\r\n            Initializes the connection with the specified connection string.\r\n            </summary>\r\n            <param name=\"connectionString\">The connection string to use.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.#ctor(System.IntPtr,System.String,System.Boolean)\">\r\n            <summary>\r\n            Initializes the connection with a pre-existing native connection handle.\r\n            This constructor overload is intended to be used only by the private\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModule.CreateOrConnect(System.Boolean,System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"db\">\r\n            The native connection handle to use.\r\n            </param>\r\n            <param name=\"fileName\">\r\n            The file name corresponding to the native connection handle.\r\n            </param>\r\n            <param name=\"ownHandle\">\r\n            Non-zero if this instance owns the native connection handle and\r\n            should dispose of it when it is no longer needed.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.#ctor(System.String,System.Boolean)\">\r\n            <summary>\r\n            Initializes the connection with the specified connection string.\r\n            </summary>\r\n            <param name=\"connectionString\">\r\n            The connection string to use.\r\n            </param>\r\n            <param name=\"parseViaFramework\">\r\n            Non-zero to parse the connection string using the built-in (i.e.\r\n            framework provided) parser when opening the connection.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.#ctor(System.Data.SQLite.SQLiteConnection)\">\r\n            <summary>\r\n            Clones the settings and connection string from an existing connection.  If the existing connection is already open, this\r\n            function will open its own connection, enumerate any attached databases of the original connection, and automatically\r\n            attach to them.\r\n            </summary>\r\n            <param name=\"connection\">The connection to copy the settings from.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.OnChanged(System.Data.SQLite.SQLiteConnection,System.Data.SQLite.ConnectionEventArgs)\">\r\n            <summary>\r\n            Raises the <see cref=\"E:System.Data.SQLite.SQLiteConnection.Changed\"/> event.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The connection associated with this event.  If this parameter is not\r\n            null and the specified connection cannot raise events, then the\r\n            registered event handlers will not be invoked.\r\n            </param>\r\n            <param name=\"e\">\r\n            A <see cref=\"T:System.Data.SQLite.ConnectionEventArgs\"/> that contains the event data.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.CreateHandle(System.IntPtr)\">\r\n            <summary>\r\n            Creates and returns a new managed database connection handle.  This\r\n            method is intended to be used by implementations of the\r\n            <see cref=\"T:System.Data.SQLite.ISQLiteConnectionPool\"/> interface only.  In theory, it\r\n            could be used by other classes; however, that usage is not supported.\r\n            </summary>\r\n            <param name=\"nativeHandle\">\r\n            This must be a native database connection handle returned by the\r\n            SQLite core library and it must remain valid and open during the\r\n            entire duration of the calling method.\r\n            </param>\r\n            <returns>\r\n            The new managed database connection handle or null if it cannot be\r\n            created.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BackupDatabase(System.Data.SQLite.SQLiteConnection,System.String,System.String,System.Int32,System.Data.SQLite.SQLiteBackupCallback,System.Int32)\">\r\n            <summary>\r\n            Backs up the database, using the specified database connection as the\r\n            destination.\r\n            </summary>\r\n            <param name=\"destination\">The destination database connection.</param>\r\n            <param name=\"destinationName\">The destination database name.</param>\r\n            <param name=\"sourceName\">The source database name.</param>\r\n            <param name=\"pages\">\r\n            The number of pages to copy or negative to copy all remaining pages.\r\n            </param>\r\n            <param name=\"callback\">\r\n            The method to invoke between each step of the backup process.  This\r\n            parameter may be null (i.e. no callbacks will be performed).\r\n            </param>\r\n            <param name=\"retryMilliseconds\">\r\n            The number of milliseconds to sleep after encountering a locking error\r\n            during the backup process.  A value less than zero means that no sleep\r\n            should be performed.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ClearTypeMappings\">\r\n            <summary>\r\n            Clears the per-connection type mappings.\r\n            </summary>\r\n            <returns>\r\n            The total number of per-connection type mappings cleared.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetTypeMappings\">\r\n            <summary>\r\n            Returns the per-connection type mappings.\r\n            </summary>\r\n            <returns>\r\n            The per-connection type mappings -OR- null if they are unavailable.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.AddTypeMapping(System.String,System.Data.DbType,System.Boolean)\">\r\n            <summary>\r\n            Adds a per-connection type mapping, possibly replacing one or more\r\n            that already exist.\r\n            </summary>\r\n            <param name=\"typeName\">\r\n            The case-insensitive database type name (e.g. \"MYDATE\").  The value\r\n            of this parameter cannot be null.  Using an empty string value (or\r\n            a string value consisting entirely of whitespace) for this parameter\r\n            is not recommended.\r\n            </param>\r\n            <param name=\"dataType\">\r\n            The <see cref=\"T:System.Data.DbType\"/> value that should be associated with the\r\n            specified type name.\r\n            </param>\r\n            <param name=\"primary\">\r\n            Non-zero if this mapping should be considered to be the primary one\r\n            for the specified <see cref=\"T:System.Data.DbType\"/>.\r\n            </param>\r\n            <returns>\r\n            A negative value if nothing was done.  Zero if no per-connection type\r\n            mappings were replaced (i.e. it was a pure add operation).  More than\r\n            zero if some per-connection type mappings were replaced.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction)\">\r\n            <summary>\r\n            Attempts to bind the specified <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object\r\n            instance to this connection.\r\n            </summary>\r\n            <param name=\"functionAttribute\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunctionAttribute\"/> object instance containing\r\n            the metadata for the function to be bound.\r\n            </param>\r\n            <param name=\"function\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance that implements the\r\n            function to be bound.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Clone\">\r\n            <summary>\r\n            Creates a clone of the connection.  All attached databases and user-defined functions are cloned.  If the existing connection is open, the cloned connection\r\n            will also be opened.\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.CreateFile(System.String)\">\r\n            <summary>\r\n            Creates a database file.  This just creates a zero-byte file which SQLite\r\n            will turn into a database when the file is opened properly.\r\n            </summary>\r\n            <param name=\"databaseFileName\">The file to create</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.OnStateChange(System.Data.ConnectionState,System.Data.StateChangeEventArgs@)\">\r\n            <summary>\r\n            Raises the state change event when the state of the connection changes\r\n            </summary>\r\n            <param name=\"newState\">The new connection state.  If this is different\r\n            from the previous state, the <see cref=\"E:System.Data.SQLite.SQLiteConnection.StateChange\"/> event is\r\n            raised.</param>\r\n            <param name=\"eventArgs\">The event data created for the raised event, if\r\n            it was actually raised.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetFallbackDefaultIsolationLevel\">\r\n            <summary>\r\n            Determines and returns the fallback default isolation level when one cannot be\r\n            obtained from an existing connection instance.\r\n            </summary>\r\n            <returns>\r\n            The fallback default isolation level for this connection instance -OR-\r\n            <see cref=\"F:System.Data.IsolationLevel.Unspecified\"/> if it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetDefaultIsolationLevel\">\r\n            <summary>\r\n            Determines and returns the default isolation level for this connection instance.\r\n            </summary>\r\n            <returns>\r\n            The default isolation level for this connection instance -OR-\r\n            <see cref=\"F:System.Data.IsolationLevel.Unspecified\"/> if it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Data.IsolationLevel,System.Boolean)\">\r\n            <summary>\r\n            OBSOLETE.  Creates a new SQLiteTransaction if one isn't already active on the connection.\r\n            </summary>\r\n            <param name=\"isolationLevel\">This parameter is ignored.</param>\r\n            <param name=\"deferredLock\">When TRUE, SQLite defers obtaining a write lock until a write operation is requested.\r\n            When FALSE, a writelock is obtained immediately.  The default is TRUE, but in a multi-threaded multi-writer\r\n            environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>\r\n            <returns>Returns a SQLiteTransaction object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Boolean)\">\r\n            <summary>\r\n            OBSOLETE.  Creates a new SQLiteTransaction if one isn't already active on the connection.\r\n            </summary>\r\n            <param name=\"deferredLock\">When TRUE, SQLite defers obtaining a write lock until a write operation is requested.\r\n            When FALSE, a writelock is obtained immediately.  The default is false, but in a multi-threaded multi-writer\r\n            environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>\r\n            <returns>Returns a SQLiteTransaction object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Data.IsolationLevel)\">\r\n            <summary>\r\n            Creates a new <see cref=\"T:System.Data.SQLite.SQLiteTransaction\"/> if one isn't already active on the connection.\r\n            </summary>\r\n            <param name=\"isolationLevel\">Supported isolation levels are Serializable, ReadCommitted and Unspecified.</param>\r\n            <remarks>\r\n            Unspecified will use the default isolation level specified in the connection string.  If no isolation level is specified in the\r\n            connection string, Serializable is used.\r\n            Serializable transactions are the default.  In this mode, the engine gets an immediate lock on the database, and no other threads\r\n            may begin a transaction.  Other threads may read from the database, but not write.\r\n            With a ReadCommitted isolation level, locks are deferred and elevated as needed.  It is possible for multiple threads to start\r\n            a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread\r\n            has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached.\r\n            </remarks>\r\n            <returns>Returns a SQLiteTransaction object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BeginTransaction\">\r\n            <summary>\r\n            Creates a new <see cref=\"T:System.Data.SQLite.SQLiteTransaction\"/> if one isn't already\r\n            active on the connection.\r\n            </summary>\r\n            <returns>Returns the new transaction object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.BeginDbTransaction(System.Data.IsolationLevel)\">\r\n            <summary>\r\n            Forwards to the local <see cref=\"M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Data.IsolationLevel)\"/> function\r\n            </summary>\r\n            <param name=\"isolationLevel\">Supported isolation levels are Unspecified, Serializable, and ReadCommitted</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ChangeDatabase(System.String)\">\r\n            <summary>\r\n            This method is not implemented; however, the <see cref=\"E:System.Data.SQLite.SQLiteConnection.Changed\"/>\r\n            event will still be raised.\r\n            </summary>\r\n            <param name=\"databaseName\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Close\">\r\n            <summary>\r\n            When the database connection is closed, all commands linked to this connection are automatically reset.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ClearPool(System.Data.SQLite.SQLiteConnection)\">\r\n            <summary>\r\n            Clears the connection pool associated with the connection.  Any other active connections using the same database file\r\n            will be discarded instead of returned to the pool when they are closed.\r\n            </summary>\r\n            <param name=\"connection\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ClearAllPools\">\r\n            <summary>\r\n            Clears all connection pools.  Any active connections will be discarded instead of sent to the pool when they are closed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.CreateCommand\">\r\n            <summary>\r\n            Create a new <see cref=\"T:System.Data.SQLite.SQLiteCommand\"/> and associate it with this connection.\r\n            </summary>\r\n            <returns>Returns a new command object already assigned to this connection.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.CreateDbCommand\">\r\n            <summary>\r\n            Forwards to the local <see cref=\"M:System.Data.SQLite.SQLiteConnection.CreateCommand\"/> function.\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ParseConnectionString(System.String)\">\r\n            <summary>\r\n            Parses the connection string into component parts using the custom\r\n            connection string parser.\r\n            </summary>\r\n            <param name=\"connectionString\">The connection string to parse</param>\r\n            <returns>An array of key-value pairs representing each parameter of the connection string</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ParseConnectionStringViaFramework(System.String,System.Boolean)\">\r\n            <summary>\r\n            Parses a connection string using the built-in (i.e. framework provided)\r\n            connection string parser class and returns the key/value pairs.  An\r\n            exception may be thrown if the connection string is invalid or cannot be\r\n            parsed.  When compiled for the .NET Compact Framework, the custom\r\n            connection string parser is always used instead because the framework\r\n            provided one is unavailable there.\r\n            </summary>\r\n            <param name=\"connectionString\">\r\n            The connection string to parse.\r\n            </param>\r\n            <param name=\"strict\">\r\n            Non-zero to throw an exception if any connection string values are not of\r\n            the <see cref=\"T:System.String\"/> type.\r\n            </param>\r\n            <returns>The list of key/value pairs.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.EnlistTransaction(System.Transactions.Transaction)\">\r\n            <summary>\r\n            Manual distributed transaction enlistment support\r\n            </summary>\r\n            <param name=\"transaction\">The distributed transaction to enlist in</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.FindKey(System.Collections.Generic.SortedList{System.String,System.String},System.String,System.String)\">\r\n            <summary>\r\n            Looks for a key in the array of key/values of the parameter string.  If not found, return the specified default value\r\n            </summary>\r\n            <param name=\"items\">The list to look in</param>\r\n            <param name=\"key\">The key to find</param>\r\n            <param name=\"defValue\">The default value to return if the key is not found</param>\r\n            <returns>The value corresponding to the specified key, or the default value if not found.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.TryParseEnum(System.Type,System.String,System.Boolean)\">\r\n            <summary>\r\n            Attempts to convert the string value to an enumerated value of the specified type.\r\n            </summary>\r\n            <param name=\"type\">The enumerated type to convert the string value to.</param>\r\n            <param name=\"value\">The string value to be converted.</param>\r\n            <param name=\"ignoreCase\">Non-zero to make the conversion case-insensitive.</param>\r\n            <returns>The enumerated value upon success or null upon error.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.TryParseByte(System.String,System.Globalization.NumberStyles,System.Byte@)\">\r\n            <summary>\r\n            Attempts to convert an input string into a byte value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The string value to be converted.\r\n            </param>\r\n            <param name=\"style\">\r\n            The number styles to use for the conversion.\r\n            </param>\r\n            <param name=\"result\">\r\n            Upon sucess, this will contain the parsed byte value.\r\n            Upon failure, the value of this parameter is undefined.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success; zero on failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.EnableExtensions(System.Boolean)\">\r\n            <summary>\r\n            Enables or disabled extension loading.\r\n            </summary>\r\n            <param name=\"enable\">\r\n            True to enable loading of extensions, false to disable.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.LoadExtension(System.String)\">\r\n            <summary>\r\n            Loads a SQLite extension library from the named dynamic link library file.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The name of the dynamic link library file containing the extension.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.LoadExtension(System.String,System.String)\">\r\n            <summary>\r\n            Loads a SQLite extension library from the named dynamic link library file.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The name of the dynamic link library file containing the extension.\r\n            </param>\r\n            <param name=\"procName\">\r\n            The name of the exported function used to initialize the extension.\r\n            If null, the default \"sqlite3_extension_init\" will be used.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.CreateModule(System.Data.SQLite.SQLiteModule)\">\r\n            <summary>\r\n            Creates a disposable module containing the implementation of a virtual\r\n            table.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The module object to be used when creating the disposable module.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.FromHexString(System.String)\">\r\n            <summary>\r\n            Parses a string containing a sequence of zero or more hexadecimal\r\n            encoded byte values and returns the resulting byte array.  The\r\n            \"0x\" prefix is not allowed on the input string.\r\n            </summary>\r\n            <param name=\"text\">\r\n            The input string containing zero or more hexadecimal encoded byte\r\n            values.\r\n            </param>\r\n            <returns>\r\n            A byte array containing the parsed byte values or null if an error\r\n            was encountered.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ToHexString(System.Byte[])\">\r\n            <summary>\r\n            Creates and returns a string containing the hexadecimal encoded byte\r\n            values from the input array.\r\n            </summary>\r\n            <param name=\"array\">\r\n            The input array of bytes.\r\n            </param>\r\n            <returns>\r\n            The resulting string or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.FromHexString(System.String,System.String@)\">\r\n            <summary>\r\n            Parses a string containing a sequence of zero or more hexadecimal\r\n            encoded byte values and returns the resulting byte array.  The\r\n            \"0x\" prefix is not allowed on the input string.\r\n            </summary>\r\n            <param name=\"text\">\r\n            The input string containing zero or more hexadecimal encoded byte\r\n            values.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this will contain an appropriate error message.\r\n            </param>\r\n            <returns>\r\n            A byte array containing the parsed byte values or null if an error\r\n            was encountered.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetDefaultPooling\">\r\n            <summary>\r\n            This method figures out what the default connection pool setting should\r\n            be based on the connection flags.  When present, the \"Pooling\" connection\r\n            string property value always overrides the value returned by this method.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if the connection pool should be enabled by default; otherwise,\r\n            zero.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Open\">\r\n            <summary>\r\n            Opens the connection using the parameters found in the <see cref=\"P:System.Data.SQLite.SQLiteConnection.ConnectionString\"/>.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.OpenAndReturn\">\r\n            <summary>\r\n            Opens the connection using the parameters found in the <see cref=\"P:System.Data.SQLite.SQLiteConnection.ConnectionString\"/> and then returns it.\r\n            </summary>\r\n            <returns>The current connection object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Cancel\">\r\n            <summary>\r\n            This method causes any pending database operation to abort and return at\r\n            its earliest opportunity.  This routine is typically called in response\r\n            to a user action such as pressing \"Cancel\" or Ctrl-C where the user wants\r\n            a long query operation to halt immediately.  It is safe to call this\r\n            routine from any thread.  However, it is not safe to call this routine\r\n            with a database connection that is closed or might close before this method\r\n            returns.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetMemoryStatistics(System.Collections.Generic.IDictionary{System.String,System.Int64}@)\">\r\n            <summary>\r\n            Returns various global memory statistics for the SQLite core library via\r\n            a dictionary of key/value pairs.  Currently, only the \"MemoryUsed\" and\r\n            \"MemoryHighwater\" keys are returned and they have values that correspond\r\n            to the values that could be obtained via the <see cref=\"P:System.Data.SQLite.SQLiteConnection.MemoryUsed\"/>\r\n            and <see cref=\"P:System.Data.SQLite.SQLiteConnection.MemoryHighwater\"/> connection properties.\r\n            </summary>\r\n            <param name=\"statistics\">\r\n            This dictionary will be populated with the global memory statistics.  It\r\n            will be created if necessary.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ReleaseMemory\">\r\n            <summary>\r\n            Attempts to free as much heap memory as possible for this database connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ReleaseMemory(System.Int32,System.Boolean,System.Boolean,System.Int32@,System.Boolean@,System.UInt32@)\">\r\n            <summary>\r\n            Attempts to free N bytes of heap memory by deallocating non-essential memory\r\n            allocations held by the database library. Memory used to cache database pages\r\n            to improve performance is an example of non-essential memory.  This is a no-op\r\n            returning zero if the SQLite core library was not compiled with the compile-time\r\n            option SQLITE_ENABLE_MEMORY_MANAGEMENT.  Optionally, attempts to reset and/or\r\n            compact the Win32 native heap, if applicable.\r\n            </summary>\r\n            <param name=\"nBytes\">\r\n            The requested number of bytes to free.\r\n            </param>\r\n            <param name=\"reset\">\r\n            Non-zero to attempt a heap reset.\r\n            </param>\r\n            <param name=\"compact\">\r\n            Non-zero to attempt heap compaction.\r\n            </param>\r\n            <param name=\"nFree\">\r\n            The number of bytes actually freed.  This value may be zero.\r\n            </param>\r\n            <param name=\"resetOk\">\r\n            This value will be non-zero if the heap reset was successful.\r\n            </param>\r\n            <param name=\"nLargest\">\r\n            The size of the largest committed free block in the heap, in bytes.\r\n            This value will be zero unless heap compaction is enabled.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code (i.e. zero for success and non-zero\r\n            for failure).\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.SetMemoryStatus(System.Boolean)\">\r\n            <summary>\r\n            Sets the status of the memory usage tracking subsystem in the SQLite core library.  By default, this is enabled.\r\n            If this is disabled, memory usage tracking will not be performed.  This is not really a per-connection value, it is\r\n            global to the process.\r\n            </summary>\r\n            <param name=\"value\">Non-zero to enable memory usage tracking, zero otherwise.</param>\r\n            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Shutdown\">\r\n            <summary>\r\n            Passes a shutdown request to the SQLite core library.  Does not throw\r\n            an exception if the shutdown request fails.\r\n            </summary>\r\n            <returns>\r\n            A standard SQLite return code (i.e. zero for success and non-zero for\r\n            failure).\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Shutdown(System.Boolean,System.Boolean)\">\r\n            <summary>\r\n            Passes a shutdown request to the SQLite core library.  Throws an\r\n            exception if the shutdown request fails and the no-throw parameter\r\n            is non-zero.\r\n            </summary>\r\n            <param name=\"directories\">\r\n            Non-zero to reset the database and temporary directories to their\r\n            default values, which should be null for both.\r\n            </param>\r\n            <param name=\"noThrow\">\r\n            When non-zero, throw an exception if the shutdown request fails.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.SetExtendedResultCodes(System.Boolean)\">\r\n            Enables or disabled extended result codes returned by SQLite\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ResultCode\">\r\n            Enables or disabled extended result codes returned by SQLite\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ExtendedResultCode\">\r\n            Enables or disabled extended result codes returned by SQLite\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            Add a log message via the SQLite sqlite3_log interface.\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.LogMessage(System.Int32,System.String)\">\r\n            Add a log message via the SQLite sqlite3_log interface.\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ChangePassword(System.String)\">\r\n            <summary>\r\n            Change the password (or assign a password) to an open database.\r\n            </summary>\r\n            <remarks>\r\n            No readers or writers may be active for this process.  The database must already be open\r\n            and if it already was password protected, the existing password must already have been supplied.\r\n            </remarks>\r\n            <param name=\"newPassword\">The new password to assign to the database</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ChangePassword(System.Byte[])\">\r\n            <summary>\r\n            Change the password (or assign a password) to an open database.\r\n            </summary>\r\n            <remarks>\r\n            No readers or writers may be active for this process.  The database must already be open\r\n            and if it already was password protected, the existing password must already have been supplied.\r\n            </remarks>\r\n            <param name=\"newPassword\">The new password to assign to the database</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.SetPassword(System.String)\">\r\n            <summary>\r\n            Sets the password for a password-protected database.  A password-protected database is\r\n            unusable for any operation until the password has been set.\r\n            </summary>\r\n            <param name=\"databasePassword\">The password for the database</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.SetPassword(System.Byte[])\">\r\n            <summary>\r\n            Sets the password for a password-protected database.  A password-protected database is\r\n            unusable for any operation until the password has been set.\r\n            </summary>\r\n            <param name=\"databasePassword\">The password for the database</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.SetAvRetry(System.Int32@,System.Int32@)\">\r\n            <summary>\r\n            Queries or modifies the number of retries or the retry interval (in milliseconds) for\r\n            certain I/O operations that may fail due to anti-virus software.\r\n            </summary>\r\n            <param name=\"count\">The number of times to retry the I/O operation.  A negative value\r\n            will cause the current count to be queried and replace that negative value.</param>\r\n            <param name=\"interval\">The number of milliseconds to wait before retrying the I/O\r\n            operation.  This number is multiplied by the number of retry attempts so far to come\r\n            up with the final number of milliseconds to wait.  A negative value will cause the\r\n            current interval to be queried and replace that negative value.</param>\r\n            <returns>Zero for success, non-zero for error.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.UnwrapString(System.String)\">\r\n            <summary>\r\n            Removes one set of surrounding single -OR- double quotes from the string\r\n            value and returns the resulting string value.  If the string is null, empty,\r\n            or contains quotes that are not balanced, nothing is done and the original\r\n            string value will be returned.\r\n            </summary>\r\n            <param name=\"value\">The string value to process.</param>\r\n            <returns>\r\n            The string value, modified to remove one set of surrounding single -OR-\r\n            double quotes, if applicable.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.ExpandFileName(System.String,System.Boolean)\">\r\n            <summary>\r\n            Expand the filename of the data source, resolving the |DataDirectory|\r\n            macro as appropriate.\r\n            </summary>\r\n            <param name=\"sourceFile\">The database filename to expand</param>\r\n            <param name=\"toFullPath\">\r\n            Non-zero if the returned file name should be converted to a full path\r\n            (except when using the .NET Compact Framework).\r\n            </param>\r\n            <returns>The expanded path and filename of the filename</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetSchema\">\r\n            <overloads>\r\n             The following commands are used to extract schema information out of the database.  Valid schema types are:\r\n             <list type=\"bullet\">\r\n             <item>\r\n             <description>MetaDataCollections</description>\r\n             </item>\r\n             <item>\r\n             <description>DataSourceInformation</description>\r\n             </item>\r\n             <item>\r\n             <description>Catalogs</description>\r\n             </item>\r\n             <item>\r\n             <description>Columns</description>\r\n             </item>\r\n             <item>\r\n             <description>ForeignKeys</description>\r\n             </item>\r\n             <item>\r\n             <description>Indexes</description>\r\n             </item>\r\n             <item>\r\n             <description>IndexColumns</description>\r\n             </item>\r\n             <item>\r\n             <description>Tables</description>\r\n             </item>\r\n             <item>\r\n             <description>Views</description>\r\n             </item>\r\n             <item>\r\n             <description>ViewColumns</description>\r\n             </item>\r\n             </list>\r\n             </overloads>\r\n             <summary>\r\n             Returns the MetaDataCollections schema\r\n             </summary>\r\n             <returns>A DataTable of the MetaDataCollections schema</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetSchema(System.String)\">\r\n            <summary>\r\n            Returns schema information of the specified collection\r\n            </summary>\r\n            <param name=\"collectionName\">The schema collection to retrieve</param>\r\n            <returns>A DataTable of the specified collection</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.GetSchema(System.String,System.String[])\">\r\n            <summary>\r\n            Retrieves schema information using the specified constraint(s) for the specified collection\r\n            </summary>\r\n            <param name=\"collectionName\">The collection to retrieve</param>\r\n            <param name=\"restrictionValues\">The restrictions to impose</param>\r\n            <returns>A DataTable of the specified collection</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_MetaDataCollections\">\r\n            <summary>\r\n            Builds a MetaDataCollections schema datatable\r\n            </summary>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_DataSourceInformation\">\r\n            <summary>\r\n            Builds a DataSourceInformation datatable\r\n            </summary>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_Columns(System.String,System.String,System.String)\">\r\n            <summary>\r\n            Build a Columns schema\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog (attached database) to query, can be null</param>\r\n            <param name=\"strTable\">The table to retrieve schema information for, must not be null</param>\r\n            <param name=\"strColumn\">The column to retrieve schema information for, can be null</param>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_Indexes(System.String,System.String,System.String)\">\r\n            <summary>\r\n            Returns index information for the given database and catalog\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog (attached database) to query, can be null</param>\r\n            <param name=\"strIndex\">The name of the index to retrieve information for, can be null</param>\r\n            <param name=\"strTable\">The table to retrieve index information for, can be null</param>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_Tables(System.String,System.String,System.String)\">\r\n            <summary>\r\n            Retrieves table schema information for the database and catalog\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog (attached database) to retrieve tables on</param>\r\n            <param name=\"strTable\">The table to retrieve, can be null</param>\r\n            <param name=\"strType\">The table type, can be null</param>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_Views(System.String,System.String)\">\r\n            <summary>\r\n            Retrieves view schema information for the database\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog (attached database) to retrieve views on</param>\r\n            <param name=\"strView\">The view name, can be null</param>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_Catalogs(System.String)\">\r\n            <summary>\r\n            Retrieves catalog (attached databases) schema information for the database\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog to retrieve, can be null</param>\r\n            <returns>DataTable</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_IndexColumns(System.String,System.String,System.String,System.String)\">\r\n            <summary>\r\n            Returns the base column information for indexes in a database\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog to retrieve indexes for (can be null)</param>\r\n            <param name=\"strTable\">The table to restrict index information by (can be null)</param>\r\n            <param name=\"strIndex\">The index to restrict index information by (can be null)</param>\r\n            <param name=\"strColumn\">The source column to restrict index information by (can be null)</param>\r\n            <returns>A DataTable containing the results</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_ViewColumns(System.String,System.String,System.String)\">\r\n            <summary>\r\n            Returns detailed column information for a specified view\r\n            </summary>\r\n            <param name=\"strCatalog\">The catalog to retrieve columns for (can be null)</param>\r\n            <param name=\"strView\">The view to restrict column information by (can be null)</param>\r\n            <param name=\"strColumn\">The source column to restrict column information by (can be null)</param>\r\n            <returns>A DataTable containing the results</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnection.Schema_ForeignKeys(System.String,System.String,System.String)\">\r\n            <summary>\r\n            Retrieves foreign key information from the specified set of filters\r\n            </summary>\r\n            <param name=\"strCatalog\">An optional catalog to restrict results on</param>\r\n            <param name=\"strTable\">An optional table to restrict results on</param>\r\n            <param name=\"strKeyName\">An optional foreign key name to restrict results on</param>\r\n            <returns>A DataTable with the results of the query</returns>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection._handlers\">\r\n            <summary>\r\n            Static variable to store the connection event handlers to call.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.StateChange\">\r\n            <summary>\r\n            This event is raised whenever the database is opened or closed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.Changed\">\r\n            <summary>\r\n            This event is raised when events related to the lifecycle of a\r\n            SQLiteConnection object occur.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.ConnectionPool\">\r\n            <summary>\r\n            This property is used to obtain or set the custom connection pool\r\n            implementation to use, if any.  Setting this property to null will\r\n            cause the default connection pool implementation to be used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.PoolCount\">\r\n            <summary>\r\n            Returns the number of pool entries for the file name associated with this connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.ConnectionString\">\r\n            <summary>\r\n            The connection string containing the parameters for the connection\r\n            </summary>\r\n            <remarks>\r\n            <list type=\"table\">\r\n            <listheader>\r\n            <term>Parameter</term>\r\n            <term>Values</term>\r\n            <term>Required</term>\r\n            <term>Default</term>\r\n            </listheader>\r\n            <item>\r\n            <description>Data Source</description>\r\n            <description>\r\n            This may be a file name, the string \":memory:\", or any supported URI (starting with SQLite 3.7.7).\r\n            Starting with release 1.0.86.0, in order to use more than one consecutive backslash (e.g. for a\r\n            UNC path), each of the adjoining backslash characters must be doubled (e.g. \"\\\\Network\\Share\\test.db\"\r\n            would become \"\\\\\\\\Network\\Share\\test.db\").\r\n            </description>\r\n            <description>Y</description>\r\n            <description></description>\r\n            </item>\r\n            <item>\r\n            <description>Version</description>\r\n            <description>3</description>\r\n            <description>N</description>\r\n            <description>3</description>\r\n            </item>\r\n            <item>\r\n            <description>UseUTF16Encoding</description>\r\n            <description><b>True</b><br/><b>False</b></description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>DateTimeFormat</description>\r\n            <description>\r\n            <b>Ticks</b> - Use the value of DateTime.Ticks.<br/>\r\n            <b>ISO8601</b> - Use the ISO-8601 format.  Uses the \"yyyy-MM-dd HH:mm:ss.FFFFFFFK\" format for UTC\r\n            DateTime values and \"yyyy-MM-dd HH:mm:ss.FFFFFFF\" format for local DateTime values).<br/>\r\n            <b>JulianDay</b> - The interval of time in days and fractions of a day since January 1, 4713 BC.<br/>\r\n            <b>UnixEpoch</b> - The whole number of seconds since the Unix epoch (January 1, 1970).<br/>\r\n            <b>InvariantCulture</b> - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.<br/>\r\n            <b>CurrentCulture</b> - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.</description>\r\n            <description>N</description>\r\n            <description>ISO8601</description>\r\n            </item>\r\n            <item>\r\n            <description>DateTimeKind</description>\r\n            <description><b>Unspecified</b> - Not specified as either UTC or local time.<br/><b>Utc</b> - The time represented is UTC.<br/><b>Local</b> - The time represented is local time.</description>\r\n            <description>N</description>\r\n            <description>Unspecified</description>\r\n            </item>\r\n            <item>\r\n            <description>DateTimeFormatString</description>\r\n            <description>The exact DateTime format string to use for all formatting and parsing of all DateTime\r\n            values for this connection.</description>\r\n            <description>N</description>\r\n            <description>null</description>\r\n            </item>\r\n            <item>\r\n            <description>BaseSchemaName</description>\r\n            <description>Some base data classes in the framework (e.g. those that build SQL queries dynamically)\r\n            assume that an ADO.NET provider cannot support an alternate catalog (i.e. database) without supporting\r\n            alternate schemas as well; however, SQLite does not fit into this model.  Therefore, this value is used\r\n            as a placeholder and removed prior to preparing any SQL statements that may contain it.</description>\r\n            <description>N</description>\r\n            <description>sqlite_default_schema</description>\r\n            </item>\r\n            <item>\r\n            <description>BinaryGUID</description>\r\n            <description><b>True</b> - Store GUID columns in binary form<br/><b>False</b> - Store GUID columns as text</description>\r\n            <description>N</description>\r\n            <description>True</description>\r\n            </item>\r\n            <item>\r\n            <description>Cache Size</description>\r\n            <description>{size in bytes}</description>\r\n            <description>N</description>\r\n            <description>2000</description>\r\n            </item>\r\n            <item>\r\n            <description>Synchronous</description>\r\n            <description><b>Normal</b> - Normal file flushing behavior<br/><b>Full</b> - Full flushing after all writes<br/><b>Off</b> - Underlying OS flushes I/O's</description>\r\n            <description>N</description>\r\n            <description>Full</description>\r\n            </item>\r\n            <item>\r\n            <description>Page Size</description>\r\n            <description>{size in bytes}</description>\r\n            <description>N</description>\r\n            <description>1024</description>\r\n            </item>\r\n            <item>\r\n            <description>Password</description>\r\n            <description>{password} - Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.</description>\r\n            <description>N</description>\r\n            <description></description>\r\n            </item>\r\n            <item>\r\n            <description>HexPassword</description>\r\n            <description>{hexPassword} - Must contain a sequence of zero or more hexadecimal encoded byte values without a leading \"0x\" prefix.  Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.</description>\r\n            <description>N</description>\r\n            <description></description>\r\n            </item>\r\n            <item>\r\n            <description>Enlist</description>\r\n            <description><b>Y</b> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description>\r\n            <description>N</description>\r\n            <description>Y</description>\r\n            </item>\r\n            <item>\r\n            <description>Pooling</description>\r\n            <description>\r\n            <b>True</b> - Use connection pooling.<br/>\r\n            <b>False</b> - Do not use connection pooling.<br/><br/>\r\n            <b>WARNING:</b> When using the default connection pool implementation,\r\n            setting this property to True should be avoided by applications that\r\n            make use of COM (either directly or indirectly) due to possible\r\n            deadlocks that can occur during the finalization of some COM objects.\r\n            </description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>FailIfMissing</description>\r\n            <description><b>True</b> - Don't create the database if it does not exist, throw an error instead<br/><b>False</b> - Automatically create the database if it does not exist</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Max Page Count</description>\r\n            <description>{size in pages} - Limits the maximum number of pages (limits the size) of the database</description>\r\n            <description>N</description>\r\n            <description>0</description>\r\n            </item>\r\n            <item>\r\n            <description>Legacy Format</description>\r\n            <description><b>True</b> - Use the more compatible legacy 3.x database format<br/><b>False</b> - Use the newer 3.3x database format which compresses numbers more effectively</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Default Timeout</description>\r\n            <description>{time in seconds}<br/>The default command timeout</description>\r\n            <description>N</description>\r\n            <description>30</description>\r\n            </item>\r\n            <item>\r\n            <description>Journal Mode</description>\r\n            <description><b>Delete</b> - Delete the journal file after a commit<br/><b>Persist</b> - Zero out and leave the journal file on disk after a commit<br/><b>Off</b> - Disable the rollback journal entirely</description>\r\n            <description>N</description>\r\n            <description>Delete</description>\r\n            </item>\r\n            <item>\r\n            <description>Read Only</description>\r\n            <description><b>True</b> - Open the database for read only access<br/><b>False</b> - Open the database for normal read/write access</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Max Pool Size</description>\r\n            <description>The maximum number of connections for the given connection string that can be in the connection pool</description>\r\n            <description>N</description>\r\n            <description>100</description>\r\n            </item>\r\n            <item>\r\n            <description>Default IsolationLevel</description>\r\n            <description>The default transaciton isolation level</description>\r\n            <description>N</description>\r\n            <description>Serializable</description>\r\n            </item>\r\n            <item>\r\n            <description>Foreign Keys</description>\r\n            <description>Enable foreign key constraints</description>\r\n            <description>N</description>\r\n            <description>False</description>\r\n            </item>\r\n            <item>\r\n            <description>Flags</description>\r\n            <description>Extra behavioral flags for the connection.  See the <see cref=\"T:System.Data.SQLite.SQLiteConnectionFlags\"/> enumeration for possible values.</description>\r\n            <description>N</description>\r\n            <description>Default</description>\r\n            </item>\r\n            <item>\r\n            <description>SetDefaults</description>\r\n            <description>\r\n            <b>True</b> - Apply the default connection settings to the opened database.<br/>\r\n            <b>False</b> - Skip applying the default connection settings to the opened database.\r\n            </description>\r\n            <description>N</description>\r\n            <description>True</description>\r\n            </item>\r\n            <item>\r\n            <description>ToFullPath</description>\r\n            <description>\r\n            <b>True</b> - Attempt to expand the data source file name to a fully qualified path before opening.<br/>\r\n            <b>False</b> - Skip attempting to expand the data source file name to a fully qualified path before opening.\r\n            </description>\r\n            <description>N</description>\r\n            <description>True</description>\r\n            </item>\r\n            </list>\r\n            </remarks>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.DataSource\">\r\n            <summary>\r\n            Returns the data source file name without extension or path.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.Database\">\r\n            <summary>\r\n            Returns the string \"main\".\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.DefaultTimeout\">\r\n            <summary>\r\n            Gets/sets the default command timeout for newly-created commands.  This is especially useful for\r\n            commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible.\r\n            This can also be set in the ConnectionString with \"Default Timeout\"\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.ParseViaFramework\">\r\n            <summary>\r\n            Non-zero if the built-in (i.e. framework provided) connection string\r\n            parser should be used when opening the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.Flags\">\r\n            <summary>\r\n            Gets/sets the extra behavioral flags for this connection.  See the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteConnectionFlags\"/> enumeration for a list of\r\n            possible values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.OwnHandle\">\r\n            <summary>\r\n            Returns non-zero if the underlying native connection handle is\r\n            owned by this instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.ServerVersion\">\r\n            <summary>\r\n            Returns the version of the underlying SQLite database engine\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.LastInsertRowId\">\r\n            <summary>\r\n            Returns the rowid of the most recent successful INSERT into the database from this connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.Changes\">\r\n            <summary>\r\n            Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on\r\n            this connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.AutoCommit\">\r\n            <summary>\r\n            Returns non-zero if the given database connection is in autocommit mode.\r\n            Autocommit mode is on by default.  Autocommit mode is disabled by a BEGIN\r\n            statement.  Autocommit mode is re-enabled by a COMMIT or ROLLBACK.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.MemoryUsed\">\r\n            <summary>\r\n            Returns the amount of memory (in bytes) currently in use by the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.MemoryHighwater\">\r\n            <summary>\r\n            Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.DefineConstants\">\r\n            <summary>\r\n            Returns a string containing the define constants (i.e. compile-time\r\n            options) used to compile the core managed assembly, delimited with\r\n            spaces.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.SQLiteVersion\">\r\n            <summary>\r\n            Returns the version of the underlying SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.SQLiteSourceId\">\r\n            <summary>\r\n            This method returns the string whose value is the same as the\r\n            SQLITE_SOURCE_ID C preprocessor macro used when compiling the\r\n            SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.SQLiteCompileOptions\">\r\n            <summary>\r\n            Returns a string containing the compile-time options used to\r\n            compile the SQLite core native library, delimited with spaces.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.InteropVersion\">\r\n            <summary>\r\n            This method returns the version of the interop SQLite assembly\r\n            used.  If the SQLite interop assembly is not in use or the\r\n            necessary information cannot be obtained for any reason, a null\r\n            value may be returned.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.InteropSourceId\">\r\n            <summary>\r\n            This method returns the string whose value contains the unique\r\n            identifier for the source checkout used to build the interop\r\n            assembly.  If the SQLite interop assembly is not in use or the\r\n            necessary information cannot be obtained for any reason, a null\r\n            value may be returned.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.InteropCompileOptions\">\r\n            <summary>\r\n            Returns a string containing the compile-time options used to\r\n            compile the SQLite interop assembly, delimited with spaces.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.ProviderVersion\">\r\n            <summary>\r\n            This method returns the version of the managed components used\r\n            to interact with the SQLite core library.  If the necessary\r\n            information cannot be obtained for any reason, a null value may\r\n            be returned.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.ProviderSourceId\">\r\n            <summary>\r\n            This method returns the string whose value contains the unique\r\n            identifier for the source checkout used to build the managed\r\n            components currently executing.  If the necessary information\r\n            cannot be obtained for any reason, a null value may be returned.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.State\">\r\n            <summary>\r\n            Returns the state of the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.Authorize\">\r\n            <summary>\r\n            This event is raised whenever SQLite encounters an action covered by the\r\n            authorizer during query preparation.  Changing the value of the\r\n            <see cref=\"F:System.Data.SQLite.AuthorizerEventArgs.ReturnCode\"/> property will determine if\r\n            the specific action will be allowed, ignored, or denied.  For the entire\r\n            duration of the event, the associated connection and statement objects\r\n            must not be modified, either directly or indirectly, by the called code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.Update\">\r\n            <summary>\r\n            This event is raised whenever SQLite makes an update/delete/insert into the database on\r\n            this connection.  It only applies to the given connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.Commit\">\r\n            <summary>\r\n            This event is raised whenever SQLite is committing a transaction.\r\n            Return non-zero to trigger a rollback.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.Trace\">\r\n            <summary>\r\n            This event is raised whenever SQLite statement first begins executing on\r\n            this connection.  It only applies to the given connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteConnection.RollBack\">\r\n            <summary>\r\n            This event is raised whenever SQLite is rolling back a transaction.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnection.DbProviderFactory\">\r\n            <summary>\r\n            Returns the <see cref=\"T:System.Data.SQLite.SQLiteFactory\"/> instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SynchronizationModes\">\r\n            <summary>\r\n            The I/O file cache flushing behavior for the connection\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SynchronizationModes.Normal\">\r\n            <summary>\r\n            Normal file flushing at critical sections of the code\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SynchronizationModes.Full\">\r\n            <summary>\r\n            Full file flushing after every write operation\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SynchronizationModes.Off\">\r\n            <summary>\r\n            Use the default operating system's file flushing, SQLite does not explicitly flush the file buffers after writing\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteAuthorizerEventHandler\">\r\n            <summary>\r\n            Raised when authorization is required to perform an action contained\r\n            within a SQL query.\r\n            </summary>\r\n            <param name=\"sender\">The connection performing the action.</param>\r\n            <param name=\"e\">A <see cref=\"T:System.Data.SQLite.AuthorizerEventArgs\"/> that contains the\r\n            event data.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteCommitHandler\">\r\n            <summary>\r\n            Raised when a transaction is about to be committed.  To roll back a transaction, set the\r\n            rollbackTrans boolean value to true.\r\n            </summary>\r\n            <param name=\"sender\">The connection committing the transaction</param>\r\n            <param name=\"e\">Event arguments on the transaction</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteUpdateEventHandler\">\r\n            <summary>\r\n            Raised when data is inserted, updated and deleted on a given connection\r\n            </summary>\r\n            <param name=\"sender\">The connection committing the transaction</param>\r\n            <param name=\"e\">The event parameters which triggered the event</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteTraceEventHandler\">\r\n            <summary>\r\n            Raised when a statement first begins executing on a given connection\r\n            </summary>\r\n            <param name=\"sender\">The connection executing the statement</param>\r\n            <param name=\"e\">Event arguments of the trace</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteBackupCallback\">\r\n            <summary>\r\n            Raised between each backup step.\r\n            </summary>\r\n            <param name=\"source\">\r\n            The source database connection.\r\n            </param>\r\n            <param name=\"sourceName\">\r\n            The source database name.\r\n            </param>\r\n            <param name=\"destination\">\r\n            The destination database connection.\r\n            </param>\r\n            <param name=\"destinationName\">\r\n            The destination database name.\r\n            </param>\r\n            <param name=\"pages\">\r\n            The number of pages copied with each step.\r\n            </param>\r\n            <param name=\"remainingPages\">\r\n            The number of pages remaining to be copied.\r\n            </param>\r\n            <param name=\"totalPages\">\r\n            The total number of pages in the source database.\r\n            </param>\r\n            <param name=\"retry\">\r\n            Set to true if the operation needs to be retried due to database\r\n            locking issues; otherwise, set to false.\r\n            </param>\r\n            <returns>\r\n            True to continue with the backup process or false to halt the backup\r\n            process, rolling back any changes that have been made so far.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.AuthorizerEventArgs\">\r\n            <summary>\r\n            The data associated with a call into the authorizer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.UserData\">\r\n            <summary>\r\n            The user-defined native data associated with this event.  Currently,\r\n            this will always contain the value of <see cref=\"F:System.IntPtr.Zero\"/>.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.ActionCode\">\r\n            <summary>\r\n            The action code responsible for the current call into the authorizer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.Argument1\">\r\n            <summary>\r\n            The first string argument for the current call into the authorizer.\r\n            The exact value will vary based on the action code, see the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteAuthorizerActionCode\"/> enumeration for possible\r\n            values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.Argument2\">\r\n            <summary>\r\n            The second string argument for the current call into the authorizer.\r\n            The exact value will vary based on the action code, see the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteAuthorizerActionCode\"/> enumeration for possible\r\n            values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.Database\">\r\n            <summary>\r\n            The database name for the current call into the authorizer, if\r\n            applicable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.Context\">\r\n            <summary>\r\n            The name of the inner-most trigger or view that is responsible for\r\n            the access attempt or a null value if this access attempt is directly\r\n            from top-level SQL code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.AuthorizerEventArgs.ReturnCode\">\r\n            <summary>\r\n            The return code for the current call into the authorizer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.AuthorizerEventArgs.#ctor\">\r\n            <summary>\r\n            Constructs an instance of this class with default property values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.AuthorizerEventArgs.#ctor(System.IntPtr,System.Data.SQLite.SQLiteAuthorizerActionCode,System.String,System.String,System.String,System.String,System.Data.SQLite.SQLiteAuthorizerReturnCode)\">\r\n            <summary>\r\n            Constructs an instance of this class with specific property values.\r\n            </summary>\r\n            <param name=\"pUserData\">\r\n            The user-defined native data associated with this event.\r\n            </param>\r\n            <param name=\"actionCode\">\r\n            The authorizer action code.\r\n            </param>\r\n            <param name=\"argument1\">\r\n            The first authorizer argument.\r\n            </param>\r\n            <param name=\"argument2\">\r\n            The second authorizer argument.\r\n            </param>\r\n            <param name=\"database\">\r\n            The database name, if applicable.\r\n            </param>\r\n            <param name=\"context\">\r\n            The name of the inner-most trigger or view that is responsible for\r\n            the access attempt or a null value if this access attempt is directly\r\n            from top-level SQL code.\r\n            </param>\r\n            <param name=\"returnCode\">\r\n            The authorizer return code.\r\n            </param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.UpdateEventType\">\r\n            <summary>\r\n            Whenever an update event is triggered on a connection, this enum will indicate\r\n            exactly what type of operation is being performed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventType.Delete\">\r\n            <summary>\r\n            A row is being deleted from the given database and table\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventType.Insert\">\r\n            <summary>\r\n            A row is being inserted into the table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventType.Update\">\r\n            <summary>\r\n            A row is being updated in the table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.UpdateEventArgs\">\r\n            <summary>\r\n            Passed during an Update callback, these event arguments detail the type of update operation being performed\r\n            on the given connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventArgs.Database\">\r\n            <summary>\r\n            The name of the database being updated (usually \"main\" but can be any attached or temporary database)\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventArgs.Table\">\r\n            <summary>\r\n            The name of the table being updated\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventArgs.Event\">\r\n            <summary>\r\n            The type of update being performed (insert/update/delete)\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UpdateEventArgs.RowId\">\r\n            <summary>\r\n            The RowId affected by this update.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.CommitEventArgs\">\r\n            <summary>\r\n            Event arguments raised when a transaction is being committed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CommitEventArgs.AbortTransaction\">\r\n            <summary>\r\n            Set to true to abort the transaction and trigger a rollback\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.TraceEventArgs\">\r\n            <summary>\r\n            Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TraceEventArgs.Statement\">\r\n            <summary>\r\n            SQL statement text as the statement first begins executing\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.ISQLiteConnectionPool\">\r\n            <summary>\r\n            This interface represents a custom connection pool implementation\r\n            usable by System.Data.SQLite.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteConnectionPool.GetCounts(System.String,System.Collections.Generic.Dictionary{System.String,System.Int32}@,System.Int32@,System.Int32@,System.Int32@)\">\r\n            <summary>\r\n            Counts the number of pool entries matching the specified file name.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The file name to match or null to match all files.\r\n            </param>\r\n            <param name=\"counts\">\r\n            The pool entry counts for each matching file.\r\n            </param>\r\n            <param name=\"openCount\">\r\n            The total number of connections successfully opened from any pool.\r\n            </param>\r\n            <param name=\"closeCount\">\r\n            The total number of connections successfully closed from any pool.\r\n            </param>\r\n            <param name=\"totalCount\">\r\n            The total number of pool entries for all matching files.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteConnectionPool.ClearPool(System.String)\">\r\n            <summary>\r\n            Disposes of all pooled connections associated with the specified\r\n            database file name.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The database file name.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteConnectionPool.ClearAllPools\">\r\n            <summary>\r\n            Disposes of all pooled connections.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteConnectionPool.Add(System.String,System.Object,System.Int32)\">\r\n            <summary>\r\n            Adds a connection to the pool of those associated with the\r\n            specified database file name.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The database file name.\r\n            </param>\r\n            <param name=\"handle\">\r\n            The database connection handle.\r\n            </param>\r\n            <param name=\"version\">\r\n            The connection pool version at the point the database connection\r\n            handle was received from the connection pool.  This is also the\r\n            connection pool version that the database connection handle was\r\n            created under.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteConnectionPool.Remove(System.String,System.Int32,System.Int32@)\">\r\n            <summary>\r\n            Removes a connection from the pool of those associated with the\r\n            specified database file name with the intent of using it to\r\n            interact with the database.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The database file name.\r\n            </param>\r\n            <param name=\"maxPoolSize\">\r\n            The new maximum size of the connection pool for the specified\r\n            database file name.\r\n            </param>\r\n            <param name=\"version\">\r\n            The connection pool version associated with the returned database\r\n            connection handle, if any.\r\n            </param>\r\n            <returns>\r\n            The database connection handle associated with the specified\r\n            database file name or null if it cannot be obtained.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnectionPool\">\r\n            <summary>\r\n            This default method implementations in this class should not be used by\r\n            applications that make use of COM (either directly or indirectly) due\r\n            to possible deadlocks that can occur during finalization of some COM\r\n            objects.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool._syncRoot\">\r\n            <summary>\r\n            This field is used to synchronize access to the private static data\r\n            in this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool._connectionPool\">\r\n            <summary>\r\n            When this field is non-null, it will be used to provide the\r\n            implementation of all the connection pool methods; otherwise,\r\n            the default method implementations will be used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool._queueList\">\r\n            <summary>\r\n            The dictionary of connection pools, based on the normalized file\r\n            name of the SQLite database.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool._poolVersion\">\r\n            <summary>\r\n            The default version number new pools will get.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool._poolOpened\">\r\n            <summary>\r\n            The number of connections successfully opened from any pool.\r\n            This value is incremented by the Remove method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool._poolClosed\">\r\n            <summary>\r\n            The number of connections successfully closed from any pool.\r\n            This value is incremented by the Add method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.GetCounts(System.String,System.Collections.Generic.Dictionary{System.String,System.Int32}@,System.Int32@,System.Int32@,System.Int32@)\">\r\n            <summary>\r\n            Counts the number of pool entries matching the specified file name.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The file name to match or null to match all files.\r\n            </param>\r\n            <param name=\"counts\">\r\n            The pool entry counts for each matching file.\r\n            </param>\r\n            <param name=\"openCount\">\r\n            The total number of connections successfully opened from any pool.\r\n            </param>\r\n            <param name=\"closeCount\">\r\n            The total number of connections successfully closed from any pool.\r\n            </param>\r\n            <param name=\"totalCount\">\r\n            The total number of pool entries for all matching files.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.ClearPool(System.String)\">\r\n            <summary>\r\n            Disposes of all pooled connections associated with the specified\r\n            database file name.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The database file name.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.ClearAllPools\">\r\n            <summary>\r\n            Disposes of all pooled connections.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.Add(System.String,System.Data.SQLite.SQLiteConnectionHandle,System.Int32)\">\r\n            <summary>\r\n            Adds a connection to the pool of those associated with the\r\n            specified database file name.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The database file name.\r\n            </param>\r\n            <param name=\"handle\">\r\n            The database connection handle.\r\n            </param>\r\n            <param name=\"version\">\r\n            The connection pool version at the point the database connection\r\n            handle was received from the connection pool.  This is also the\r\n            connection pool version that the database connection handle was\r\n            created under.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.Remove(System.String,System.Int32,System.Int32@)\">\r\n            <summary>\r\n            Removes a connection from the pool of those associated with the\r\n            specified database file name with the intent of using it to\r\n            interact with the database.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The database file name.\r\n            </param>\r\n            <param name=\"maxPoolSize\">\r\n            The new maximum size of the connection pool for the specified\r\n            database file name.\r\n            </param>\r\n            <param name=\"version\">\r\n            The connection pool version associated with the returned database\r\n            connection handle, if any.\r\n            </param>\r\n            <returns>\r\n            The database connection handle associated with the specified\r\n            database file name or null if it cannot be obtained.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.GetConnectionPool\">\r\n            <summary>\r\n            This method is used to obtain a reference to the custom connection\r\n            pool implementation currently in use, if any.\r\n            </summary>\r\n            <returns>\r\n            The custom connection pool implementation or null if the default\r\n            connection pool implementation should be used.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.SetConnectionPool(System.Data.SQLite.ISQLiteConnectionPool)\">\r\n            <summary>\r\n            This method is used to set the reference to the custom connection\r\n            pool implementation to use, if any.\r\n            </summary>\r\n            <param name=\"connectionPool\">\r\n            The custom connection pool implementation to use or null if the\r\n            default connection pool implementation should be used.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.ResizePool(System.Data.SQLite.SQLiteConnectionPool.PoolQueue,System.Boolean)\">\r\n            <summary>\r\n            We do not have to thread-lock anything in this function, because it\r\n            is only called by other functions above which already take the lock.\r\n            </summary>\r\n            <param name=\"queue\">\r\n            The pool queue to resize.\r\n            </param>\r\n            <param name=\"add\">\r\n            If a function intends to add to the pool, this is true, which\r\n            forces the resize to take one more than it needs from the pool.\r\n            </param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnectionPool.PoolQueue\">\r\n            <summary>\r\n            Keeps track of connections made on a specified file.  The PoolVersion\r\n            dictates whether old objects get returned to the pool or discarded\r\n            when no longer in use.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.Queue\">\r\n            <summary>\r\n            The queue of weak references to the actual database connection\r\n            handles.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.PoolVersion\">\r\n            <summary>\r\n            This pool version associated with the database connection\r\n            handles in this pool queue.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.MaxPoolSize\">\r\n            <summary>\r\n            The maximum size of this pool queue.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.#ctor(System.Int32,System.Int32)\">\r\n            <summary>\r\n            Constructs a connection pool queue using the specified version\r\n            and maximum size.  Normally, all the database connection\r\n            handles in this pool are associated with a single database file\r\n            name.\r\n            </summary>\r\n            <param name=\"version\">\r\n            The initial pool version for this connection pool queue.\r\n            </param>\r\n            <param name=\"maxSize\">\r\n            The initial maximum size for this connection pool queue.\r\n            </param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnectionStringBuilder\">\r\n            <summary>\r\n            SQLite implementation of DbConnectionStringBuilder.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionStringBuilder._properties\">\r\n            <summary>\r\n            Properties of this class\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionStringBuilder.#ctor\">\r\n            <overloads>\r\n            Constructs a new instance of the class\r\n            </overloads>\r\n            <summary>\r\n            Default constructor\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionStringBuilder.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs a new instance of the class using the specified connection string.\r\n            </summary>\r\n            <param name=\"connectionString\">The connection string to parse</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionStringBuilder.Initialize(System.String)\">\r\n            <summary>\r\n            Private initializer, which assigns the connection string and resets the builder\r\n            </summary>\r\n            <param name=\"cnnString\">The connection string to assign</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionStringBuilder.TryGetValue(System.String,System.Object@)\">\r\n            <summary>\r\n            Helper function for retrieving values from the connectionstring\r\n            </summary>\r\n            <param name=\"keyword\">The keyword to retrieve settings for</param>\r\n            <param name=\"value\">The resulting parameter value</param>\r\n            <returns>Returns true if the value was found and returned</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteConnectionStringBuilder.FallbackGetProperties(System.Collections.Hashtable)\">\r\n            <summary>\r\n            Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties()\r\n            </summary>\r\n            <param name=\"propertyList\">The hashtable to fill with property descriptors</param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.Version\">\r\n            <summary>\r\n            Gets/Sets the default version of the SQLite engine to instantiate.  Currently the only valid value is 3, indicating version 3 of the sqlite library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.SyncMode\">\r\n            <summary>\r\n            Gets/Sets the synchronization mode (file flushing) of the connection string.  Default is \"Normal\".\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.UseUTF16Encoding\">\r\n            <summary>\r\n            Gets/Sets the encoding for the connection string.  The default is \"False\" which indicates UTF-8 encoding.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.Pooling\">\r\n            <summary>\r\n            Gets/Sets whether or not to use connection pooling.  The default is \"False\"\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.BinaryGUID\">\r\n            <summary>\r\n            Gets/Sets whethor not to store GUID's in binary format.  The default is True\r\n            which saves space in the database.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.DataSource\">\r\n            <summary>\r\n            Gets/Sets the filename to open on the connection string.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.Uri\">\r\n            <summary>\r\n            An alternate to the data source property\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.FullUri\">\r\n            <summary>\r\n            An alternate to the data source property that uses the SQLite URI syntax.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.DefaultTimeout\">\r\n            <summary>\r\n            Gets/sets the default command timeout for newly-created commands.  This is especially useful for \r\n            commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.Enlist\">\r\n            <summary>\r\n            Determines whether or not the connection will automatically participate\r\n            in the current distributed transaction (if one exists)\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.FailIfMissing\">\r\n            <summary>\r\n            If set to true, will throw an exception if the database specified in the connection\r\n            string does not exist.  If false, the database will be created automatically.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.LegacyFormat\">\r\n            <summary>\r\n            If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger\r\n            database sizes.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.ReadOnly\">\r\n            <summary>\r\n            When enabled, the database will be opened for read-only access and writing will be disabled.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.Password\">\r\n            <summary>\r\n            Gets/sets the database encryption password\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.HexPassword\">\r\n            <summary>\r\n            Gets/sets the database encryption hexadecimal password\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.PageSize\">\r\n            <summary>\r\n            Gets/Sets the page size for the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.MaxPageCount\">\r\n            <summary>\r\n            Gets/Sets the maximum number of pages the database may hold\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.CacheSize\">\r\n            <summary>\r\n            Gets/Sets the cache size for the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.DateTimeFormat\">\r\n            <summary>\r\n            Gets/Sets the DateTime format for the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.DateTimeKind\">\r\n            <summary>\r\n            Gets/Sets the DateTime kind for the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.DateTimeFormatString\">\r\n            <summary>\r\n            Gets/sets the DateTime format string used for formatting\r\n            and parsing purposes.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.BaseSchemaName\">\r\n            <summary>\r\n            Gets/Sets the placeholder base schema name used for\r\n            .NET Framework compatibility purposes.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.JournalMode\">\r\n            <summary>\r\n            Determines how SQLite handles the transaction journal file.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.DefaultIsolationLevel\">\r\n            <summary>\r\n            Sets the default isolation level for transactions on the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.ForeignKeys\">\r\n            <summary>\r\n            If enabled, use foreign key constraints\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.Flags\">\r\n            <summary>\r\n            Gets/Sets the extra behavioral flags.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.SetDefaults\">\r\n            <summary>\r\n            If enabled, apply the default connection settings to opened databases.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteConnectionStringBuilder.ToFullPath\">\r\n            <summary>\r\n            If enabled, attempt to resolve the provided data source file name to a\r\n            full path before opening.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.TypeAffinity\">\r\n            <summary>\r\n            SQLite has very limited types, and is inherently text-based.  The first 5 types below represent the sum of all types SQLite\r\n            understands.  The DateTime extension to the spec is for internal use only.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.Uninitialized\">\r\n            <summary>\r\n            Not used\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.Int64\">\r\n            <summary>\r\n            All integers in SQLite default to Int64\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.Double\">\r\n            <summary>\r\n            All floating point numbers in SQLite default to double\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.Text\">\r\n            <summary>\r\n            The default data type of SQLite is text\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.Blob\">\r\n            <summary>\r\n            Typically blob types are only seen when returned from a function\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.Null\">\r\n            <summary>\r\n            Null types can be returned from functions\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.DateTime\">\r\n            <summary>\r\n            Used internally by this provider\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.TypeAffinity.None\">\r\n            <summary>\r\n            Used internally by this provider\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteConnectionEventType\">\r\n            <summary>\r\n            These are the event types associated with the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteConnectionEventHandler\"/>\r\n            delegate (and its corresponding event) and the\r\n            <see cref=\"T:System.Data.SQLite.ConnectionEventArgs\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.Invalid\">\r\n            <summary>\r\n            Not used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.Unknown\">\r\n            <summary>\r\n            Not used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.Opening\">\r\n            <summary>\r\n            The connection is being opened.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.ConnectionString\">\r\n            <summary>\r\n            The connection string has been parsed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.Opened\">\r\n            <summary>\r\n            The connection was opened.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.ChangeDatabase\">\r\n            <summary>\r\n            The <see cref=\"F:System.Data.SQLite.SQLiteConnectionEventType.ChangeDatabase\"/> method was called on the\r\n            connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.NewTransaction\">\r\n            <summary>\r\n            A transaction was created using the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.EnlistTransaction\">\r\n            <summary>\r\n            The connection was enlisted into a transaction.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.NewCommand\">\r\n            <summary>\r\n            A command was created using the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.NewDataReader\">\r\n            <summary>\r\n            A data reader was created using the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.NewCriticalHandle\">\r\n            <summary>\r\n            An instance of a <see cref=\"T:System.Runtime.InteropServices.CriticalHandle\"/> derived class has\r\n            been created to wrap a native resource.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.Closing\">\r\n            <summary>\r\n            The connection is being closed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteConnectionEventType.Closed\">\r\n            <summary>\r\n            The connection was closed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteDateFormats\">\r\n             <summary>\r\n             This implementation of SQLite for ADO.NET can process date/time fields in\r\n             databases in one of six formats.\r\n             </summary>\r\n             <remarks>\r\n             ISO8601 format is more compatible, readable, fully-processable, but less\r\n             accurate as it does not provide time down to fractions of a second.\r\n             JulianDay is the numeric format the SQLite uses internally and is arguably\r\n             the most compatible with 3rd party tools.  It is not readable as text\r\n             without post-processing.  Ticks less compatible with 3rd party tools that\r\n             query the database, and renders the DateTime field unreadable as text\r\n             without post-processing.  UnixEpoch is more compatible with Unix systems.\r\n             InvariantCulture allows the configured format for the invariant culture\r\n             format to be used and is human readable.  CurrentCulture allows the\r\n             configured format for the current culture to be used and is also human\r\n             readable.\r\n            \r\n             The preferred order of choosing a DateTime format is JulianDay, ISO8601,\r\n             and then Ticks.  Ticks is mainly present for legacy code support.\r\n             </remarks>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.Ticks\">\r\n            <summary>\r\n            Use the value of DateTime.Ticks.  This value is not recommended and is not well supported with LINQ.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.ISO8601\">\r\n            <summary>\r\n            Use the ISO-8601 format.  Uses the \"yyyy-MM-dd HH:mm:ss.FFFFFFFK\" format for UTC DateTime values and\r\n            \"yyyy-MM-dd HH:mm:ss.FFFFFFF\" format for local DateTime values).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.JulianDay\">\r\n            <summary>\r\n            The interval of time in days and fractions of a day since January 1, 4713 BC.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.UnixEpoch\">\r\n            <summary>\r\n            The whole number of seconds since the Unix epoch (January 1, 1970).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.InvariantCulture\">\r\n            <summary>\r\n            Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.CurrentCulture\">\r\n            <summary>\r\n            Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDateFormats.Default\">\r\n            <summary>\r\n            The default format for this provider.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteJournalModeEnum\">\r\n             <summary>\r\n             This enum determines how SQLite treats its journal file.\r\n             </summary>\r\n             <remarks>\r\n             By default SQLite will create and delete the journal file when needed during a transaction.\r\n             However, for some computers running certain filesystem monitoring tools, the rapid\r\n             creation and deletion of the journal file can cause those programs to fail, or to interfere with SQLite.\r\n            \r\n             If a program or virus scanner is interfering with SQLite's journal file, you may receive errors like \"unable to open database file\"\r\n             when starting a transaction.  If this is happening, you may want to change the default journal mode to Persist.\r\n             </remarks>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Default\">\r\n            <summary>\r\n            The default mode, this causes SQLite to use the existing journaling mode for the database.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Delete\">\r\n            <summary>\r\n            SQLite will create and destroy the journal file as-needed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Persist\">\r\n            <summary>\r\n            When this is set, SQLite will keep the journal file even after a transaction has completed.  It's contents will be erased,\r\n            and the journal re-used as often as needed.  If it is deleted, it will be recreated the next time it is needed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Off\">\r\n            <summary>\r\n            This option disables the rollback journal entirely.  Interrupted transactions or a program crash can cause database\r\n            corruption in this mode!\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Truncate\">\r\n            <summary>\r\n            SQLite will truncate the journal file to zero-length instead of deleting it.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Memory\">\r\n            <summary>\r\n            SQLite will store the journal in volatile RAM.  This saves disk I/O but at the expense of database safety and integrity.\r\n            If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the\r\n            database file will very likely go corrupt.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteJournalModeEnum.Wal\">\r\n            <summary>\r\n            SQLite uses a write-ahead log instead of a rollback journal to implement transactions.  The WAL journaling mode is persistent;\r\n            after being set it stays in effect across multiple database connections and after closing and reopening the database. A database\r\n            in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteSynchronousEnum\">\r\n            <summary>\r\n            Possible values for the \"synchronous\" database setting.  This setting determines\r\n            how often the database engine calls the xSync method of the VFS.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteSynchronousEnum.Default\">\r\n            <summary>\r\n            Use the default \"synchronous\" database setting.  Currently, this should be\r\n            the same as using the FULL mode.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteSynchronousEnum.Off\">\r\n            <summary>\r\n            The database engine continues without syncing as soon as it has handed\r\n            data off to the operating system.  If the application running SQLite\r\n            crashes, the data will be safe, but the database might become corrupted\r\n            if the operating system crashes or the computer loses power before that\r\n            data has been written to the disk surface.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteSynchronousEnum.Normal\">\r\n            <summary>\r\n            The database engine will still sync at the most critical moments, but\r\n            less often than in FULL mode.  There is a very small (though non-zero)\r\n            chance that a power failure at just the wrong time could corrupt the\r\n            database in NORMAL mode.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteSynchronousEnum.Full\">\r\n            <summary>\r\n            The database engine will use the xSync method of the VFS to ensure that\r\n            all content is safely written to the disk surface prior to continuing.\r\n            This ensures that an operating system crash or power failure will not\r\n            corrupt the database.  FULL synchronous is very safe, but it is also\r\n            slower.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteExecuteType\">\r\n            <summary>\r\n            The requested command execution type.  This controls which method of the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteCommand\"/> object will be called.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteExecuteType.None\">\r\n            <summary>\r\n            Do nothing.  No method will be called.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteExecuteType.NonQuery\">\r\n            <summary>\r\n            The command is not expected to return a result -OR- the result is not\r\n            needed.  The <see cref=\"M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery\"/> or\r\n            <see cref=\"M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(System.Data.CommandBehavior)\"/>  method\r\n            will be called.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteExecuteType.Scalar\">\r\n            <summary>\r\n            The command is expected to return a scalar result -OR- the result should\r\n            be limited to a scalar result.  The <see cref=\"M:System.Data.SQLite.SQLiteCommand.ExecuteScalar\"/>\r\n            or <see cref=\"M:System.Data.SQLite.SQLiteCommand.ExecuteScalar(System.Data.CommandBehavior)\"/> method will\r\n            be called.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteExecuteType.Reader\">\r\n            <summary>\r\n            The command is expected to return <see cref=\"T:System.Data.SQLite.SQLiteDataReader\"/> result.\r\n            The <see cref=\"M:System.Data.SQLite.SQLiteCommand.ExecuteReader\"/> or\r\n            <see cref=\"M:System.Data.SQLite.SQLiteCommand.ExecuteReader(System.Data.CommandBehavior)\"/> method will\r\n            be called.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteExecuteType.Default\">\r\n            <summary>\r\n            Use the default command execution type.  Using this value is the same\r\n            as using the <see cref=\"F:System.Data.SQLite.SQLiteExecuteType.NonQuery\"/> value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteAuthorizerActionCode\">\r\n            <summary>\r\n            The action code responsible for the current call into the authorizer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.None\">\r\n            <summary>\r\n            No action is being performed.  This value should not be used from\r\n            external code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Copy\">\r\n            <summary>\r\n            No longer used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateIndex\">\r\n             <summary>\r\n             An index will be created.  The action-specific arguments are the\r\n             index name and the table name.\r\n            \r\n             </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTable\">\r\n            <summary>\r\n            A table will be created.  The action-specific arguments are the\r\n            table name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempIndex\">\r\n            <summary>\r\n            A temporary index will be created.  The action-specific arguments\r\n            are the index name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempTable\">\r\n            <summary>\r\n            A temporary table will be created.  The action-specific arguments\r\n            are the table name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempTrigger\">\r\n            <summary>\r\n            A temporary trigger will be created.  The action-specific arguments\r\n            are the trigger name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempView\">\r\n            <summary>\r\n            A temporary view will be created.  The action-specific arguments are\r\n            the view name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTrigger\">\r\n            <summary>\r\n            A trigger will be created.  The action-specific arguments are the\r\n            trigger name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateView\">\r\n            <summary>\r\n            A view will be created.  The action-specific arguments are the view\r\n            name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Delete\">\r\n            <summary>\r\n            A DELETE statement will be executed.  The action-specific arguments\r\n            are the table name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropIndex\">\r\n            <summary>\r\n            An index will be dropped.  The action-specific arguments are the\r\n            index name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTable\">\r\n            <summary>\r\n            A table will be dropped.  The action-specific arguments are the tables\r\n            name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempIndex\">\r\n            <summary>\r\n            A temporary index will be dropped.  The action-specific arguments are\r\n            the index name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempTable\">\r\n            <summary>\r\n            A temporary table will be dropped.  The action-specific arguments are\r\n            the table name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempTrigger\">\r\n            <summary>\r\n            A temporary trigger will be dropped.  The action-specific arguments\r\n            are the trigger name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempView\">\r\n            <summary>\r\n            A temporary view will be dropped.  The action-specific arguments are\r\n            the view name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTrigger\">\r\n            <summary>\r\n            A trigger will be dropped.  The action-specific arguments are the\r\n            trigger name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropView\">\r\n            <summary>\r\n            A view will be dropped.  The action-specific arguments are the view\r\n            name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Insert\">\r\n            <summary>\r\n            An INSERT statement will be executed.  The action-specific arguments\r\n            are the table name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Pragma\">\r\n            <summary>\r\n            A PRAGMA statement will be executed.  The action-specific arguments\r\n            are the name of the PRAGMA and the new value or a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Read\">\r\n            <summary>\r\n            A table column will be read.  The action-specific arguments are the\r\n            table name and the column name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Select\">\r\n            <summary>\r\n            A SELECT statement will be executed.  The action-specific arguments\r\n            are both null values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Transaction\">\r\n            <summary>\r\n            A transaction will be started, committed, or rolled back.  The\r\n            action-specific arguments are the name of the operation (BEGIN,\r\n            COMMIT, or ROLLBACK) and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update\">\r\n            <summary>\r\n            An UPDATE statement will be executed.  The action-specific arguments\r\n            are the table name and the column name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Attach\">\r\n            <summary>\r\n            A database will be attached to the connection.  The action-specific\r\n            arguments are the database file name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Detach\">\r\n            <summary>\r\n            A database will be detached from the connection.  The action-specific\r\n            arguments are the database name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.AlterTable\">\r\n            <summary>\r\n            The schema of a table will be altered.  The action-specific arguments\r\n            are the database name and the table name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Reindex\">\r\n            <summary>\r\n            An index will be deleted and then recreated.  The action-specific\r\n            arguments are the index name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Analyze\">\r\n            <summary>\r\n            A table will be analyzed to gathers statistics about it.  The\r\n            action-specific arguments are the table name and a null value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateVtable\">\r\n            <summary>\r\n            A virtual table will be created.  The action-specific arguments are\r\n            the table name and the module name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropVtable\">\r\n            <summary>\r\n            A virtual table will be dropped.  The action-specific arguments are\r\n            the table name and the module name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Function\">\r\n            <summary>\r\n            A SQL function will be called.  The action-specific arguments are a\r\n            null value and the function name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Savepoint\">\r\n            <summary>\r\n            A savepoint will be created, released, or rolled back.  The\r\n            action-specific arguments are the name of the operation (BEGIN,\r\n            RELEASE, or ROLLBACK) and the savepoint name.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerActionCode.Recursive\">\r\n            <summary>\r\n            A recursive query will be executed.  The action-specific arguments\r\n            are two null values.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteAuthorizerReturnCode\">\r\n            <summary>\r\n            The return code for the current call into the authorizer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerReturnCode.Ok\">\r\n            <summary>\r\n            The action will be allowed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerReturnCode.Deny\">\r\n            <summary>\r\n            The overall action will be disallowed and an error message will be\r\n            returned from the query preparation method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteAuthorizerReturnCode.Ignore\">\r\n            <summary>\r\n            The specific action will be disallowed; however, the overall action\r\n            will continue.  The exact effects of this return code vary depending\r\n            on the specific action, please refer to the SQLite core library\r\n            documentation for futher details.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteType\">\r\n            <summary>\r\n            Class used internally to determine the datatype of a column in a resultset\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteType.Type\">\r\n            <summary>\r\n            The DbType of the column, or DbType.Object if it cannot be determined\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteType.Affinity\">\r\n            <summary>\r\n            The affinity of a column, used for expressions or when Type is DbType.Object\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteDataAdapter\">\r\n            <summary>\r\n            SQLite implementation of DbDataAdapter.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.#ctor\">\r\n            <overloads>\r\n            This class is just a shell around the DbDataAdapter.  Nothing from\r\n            DbDataAdapter is overridden here, just a few constructors are defined.\r\n            </overloads>\r\n            <summary>\r\n            Default constructor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.Data.SQLite.SQLiteCommand)\">\r\n            <summary>\r\n            Constructs a data adapter using the specified select command.\r\n            </summary>\r\n            <param name=\"cmd\">\r\n            The select command to associate with the adapter.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.String,System.Data.SQLite.SQLiteConnection)\">\r\n            <summary>\r\n            Constructs a data adapter with the supplied select command text and\r\n            associated with the specified connection.\r\n            </summary>\r\n            <param name=\"commandText\">\r\n            The select command text to associate with the data adapter.\r\n            </param>\r\n            <param name=\"connection\">\r\n            The connection to associate with the select command.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.String,System.String)\">\r\n            <summary>\r\n            Constructs a data adapter with the specified select command text,\r\n            and using the specified database connection string.\r\n            </summary>\r\n            <param name=\"commandText\">\r\n            The select command text to use to construct a select command.\r\n            </param>\r\n            <param name=\"connectionString\">\r\n            A connection string suitable for passing to a new SQLiteConnection,\r\n            which is associated with the select command.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.String,System.String,System.Boolean)\">\r\n            <summary>\r\n            Constructs a data adapter with the specified select command text,\r\n            and using the specified database connection string.\r\n            </summary>\r\n            <param name=\"commandText\">\r\n            The select command text to use to construct a select command.\r\n            </param>\r\n            <param name=\"connectionString\">\r\n            A connection string suitable for passing to a new SQLiteConnection,\r\n            which is associated with the select command.\r\n            </param>\r\n            <param name=\"parseViaFramework\">\r\n            Non-zero to parse the connection string using the built-in (i.e.\r\n            framework provided) parser when opening the connection.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.OnRowUpdating(System.Data.Common.RowUpdatingEventArgs)\">\r\n            <summary>\r\n            Raised by the underlying DbDataAdapter when a row is being updated\r\n            </summary>\r\n            <param name=\"value\">The event's specifics</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataAdapter.OnRowUpdated(System.Data.Common.RowUpdatedEventArgs)\">\r\n            <summary>\r\n            Raised by DbDataAdapter after a row is updated\r\n            </summary>\r\n            <param name=\"value\">The event's specifics</param>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteDataAdapter.RowUpdating\">\r\n            <summary>\r\n            Row updating event handler\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteDataAdapter.RowUpdated\">\r\n            <summary>\r\n            Row updated event handler\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataAdapter.SelectCommand\">\r\n            <summary>\r\n            Gets/sets the select command for this DataAdapter\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataAdapter.InsertCommand\">\r\n            <summary>\r\n            Gets/sets the insert command for this DataAdapter\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataAdapter.UpdateCommand\">\r\n            <summary>\r\n            Gets/sets the update command for this DataAdapter\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataAdapter.DeleteCommand\">\r\n            <summary>\r\n            Gets/sets the delete command for this DataAdapter\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteDataReader\">\r\n            <summary>\r\n            SQLite implementation of DbDataReader.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._command\">\r\n            <summary>\r\n            Underlying command this reader is attached to\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._activeStatementIndex\">\r\n            <summary>\r\n            Index of the current statement in the command being processed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._activeStatement\">\r\n            <summary>\r\n            Current statement being Read()\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._readingState\">\r\n            <summary>\r\n            State of the current statement being processed.\r\n            -1 = First Step() executed, so the first Read() will be ignored\r\n             0 = Actively reading\r\n             1 = Finished reading\r\n             2 = Non-row-returning statement, no records\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._rowsAffected\">\r\n            <summary>\r\n            Number of records affected by the insert/update statements executed on the command\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._fieldCount\">\r\n            <summary>\r\n            Count of fields (columns) in the row-returning statement currently being processed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._fieldIndexes\">\r\n            <summary>\r\n            Maps the field (column) names to their corresponding indexes within the results.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._fieldTypeArray\">\r\n            <summary>\r\n            Datatypes of active fields (columns) in the current statement, used for type-restricting data\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._commandBehavior\">\r\n            <summary>\r\n            The behavior of the datareader\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._disposeCommand\">\r\n            <summary>\r\n            If set, then dispose of the command object when the reader is finished\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._throwOnDisposed\">\r\n            <summary>\r\n            If set, then raise an exception when the object is accessed after being disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._keyInfo\">\r\n            <summary>\r\n            An array of rowid's for the active statement if CommandBehavior.KeyInfo is specified\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._version\">\r\n            <summary>\r\n            Matches the version of the connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteDataReader._baseSchemaName\">\r\n            <summary>\r\n            The \"stub\" (i.e. placeholder) base schema name to use when returning\r\n            column schema information.  Matches the base schema name used by the\r\n            associated connection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.#ctor(System.Data.SQLite.SQLiteCommand,System.Data.CommandBehavior)\">\r\n            <summary>\r\n            Internal constructor, initializes the datareader and sets up to begin executing statements\r\n            </summary>\r\n            <param name=\"cmd\">The SQLiteCommand this data reader is for</param>\r\n            <param name=\"behave\">The expected behavior of the data reader</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Dispose of all resources used by this datareader.\r\n            </summary>\r\n            <param name=\"disposing\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.Close\">\r\n            <summary>\r\n            Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.CheckClosed\">\r\n            <summary>\r\n            Throw an error if the datareader is closed\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.CheckValidRow\">\r\n            <summary>\r\n            Throw an error if a row is not loaded\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetEnumerator\">\r\n            <summary>\r\n            Enumerator support\r\n            </summary>\r\n            <returns>Returns a DbEnumerator object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.VerifyType(System.Int32,System.Data.DbType)\">\r\n             <summary>\r\n             SQLite is inherently un-typed.  All datatypes in SQLite are natively strings.  The definition of the columns of a table\r\n             and the affinity of returned types are all we have to go on to type-restrict data in the reader.\r\n            \r\n             This function attempts to verify that the type of data being requested of a column matches the datatype of the column.  In\r\n             the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob)\r\n             to a set of known types that closely match that affinity.  It's not an exact science, but its the best we can do.\r\n             </summary>\r\n             <returns>\r\n             This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity.\r\n             </returns>\r\n             <param name=\"i\">The index of the column to type-check</param>\r\n             <param name=\"typ\">The type we want to get out of the column</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetBoolean(System.Int32)\">\r\n            <summary>\r\n            Retrieves the column as a boolean value\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>bool</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetByte(System.Int32)\">\r\n            <summary>\r\n            Retrieves the column as a single byte value\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>byte</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)\">\r\n            <summary>\r\n            Retrieves a column as an array of bytes (blob)\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <param name=\"fieldOffset\">The zero-based index of where to begin reading the data</param>\r\n            <param name=\"buffer\">The buffer to write the bytes into</param>\r\n            <param name=\"bufferoffset\">The zero-based index of where to begin writing into the array</param>\r\n            <param name=\"length\">The number of bytes to retrieve</param>\r\n            <returns>The actual number of bytes written into the array</returns>\r\n            <remarks>\r\n            To determine the number of bytes in the column, pass a null value for the buffer.  The total length will be returned.\r\n            </remarks>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetChar(System.Int32)\">\r\n            <summary>\r\n            Returns the column as a single character\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>char</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)\">\r\n            <summary>\r\n            Retrieves a column as an array of chars (blob)\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <param name=\"fieldoffset\">The zero-based index of where to begin reading the data</param>\r\n            <param name=\"buffer\">The buffer to write the characters into</param>\r\n            <param name=\"bufferoffset\">The zero-based index of where to begin writing into the array</param>\r\n            <param name=\"length\">The number of bytes to retrieve</param>\r\n            <returns>The actual number of characters written into the array</returns>\r\n            <remarks>\r\n            To determine the number of characters in the column, pass a null value for the buffer.  The total length will be returned.\r\n            </remarks>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetDataTypeName(System.Int32)\">\r\n            <summary>\r\n            Retrieves the name of the back-end datatype of the column\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>string</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetDateTime(System.Int32)\">\r\n            <summary>\r\n            Retrieve the column as a date/time value\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>DateTime</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetDecimal(System.Int32)\">\r\n            <summary>\r\n            Retrieve the column as a decimal value\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>decimal</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetDouble(System.Int32)\">\r\n            <summary>\r\n            Returns the column as a double\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>double</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetFieldType(System.Int32)\">\r\n            <summary>\r\n            Returns the .NET type of a given column\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>Type</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetFloat(System.Int32)\">\r\n            <summary>\r\n            Returns a column as a float value\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>float</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetGuid(System.Int32)\">\r\n            <summary>\r\n            Returns the column as a Guid\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>Guid</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetInt16(System.Int32)\">\r\n            <summary>\r\n            Returns the column as a short\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>Int16</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetInt32(System.Int32)\">\r\n            <summary>\r\n            Retrieves the column as an int\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>Int32</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetInt64(System.Int32)\">\r\n            <summary>\r\n            Retrieves the column as a long\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>Int64</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetName(System.Int32)\">\r\n            <summary>\r\n            Retrieves the name of the column\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>string</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetOrdinal(System.String)\">\r\n            <summary>\r\n            Retrieves the i of a column, given its name\r\n            </summary>\r\n            <param name=\"name\">The name of the column to retrieve</param>\r\n            <returns>The int i of the column</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetSchemaTable\">\r\n            <summary>\r\n            Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done\r\n            to gather the necessary information so it can be represented in an ADO.NET manner.\r\n            </summary>\r\n            <returns>Returns a DataTable containing the schema information for the active SELECT statement being processed.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetString(System.Int32)\">\r\n            <summary>\r\n            Retrieves the column as a string\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>string</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetValue(System.Int32)\">\r\n            <summary>\r\n            Retrieves the column as an object corresponding to the underlying datatype of the column\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetValues(System.Object[])\">\r\n            <summary>\r\n            Retreives the values of multiple columns, up to the size of the supplied array\r\n            </summary>\r\n            <param name=\"values\">The array to fill with values from the columns in the current resultset</param>\r\n            <returns>The number of columns retrieved</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetValues\">\r\n            <summary>\r\n            Returns a collection containing all the column names and values for the\r\n            current row of data in the current resultset, if any.  If there is no\r\n            current row or no current resultset, an exception may be thrown.\r\n            </summary>\r\n            <returns>\r\n            The collection containing the column name and value information for the\r\n            current row of data in the current resultset or null if this information\r\n            cannot be obtained.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.IsDBNull(System.Int32)\">\r\n            <summary>\r\n            Returns True if the specified column is null\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>True or False</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.NextResult\">\r\n            <summary>\r\n            Moves to the next resultset in multiple row-returning SQL command.\r\n            </summary>\r\n            <returns>True if the command was successful and a new resultset is available, False otherwise.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetConnection(System.Data.SQLite.SQLiteDataReader)\">\r\n            <summary>\r\n            This method attempts to query the database connection associated with\r\n            the data reader in use.  If the underlying command or connection is\r\n            unavailable, a null value will be returned.\r\n            </summary>\r\n            <returns>\r\n            The connection object -OR- null if it is unavailable.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetFlags(System.Data.SQLite.SQLiteDataReader)\">\r\n            <summary>\r\n            This method attempts to query the flags associated with the database\r\n            connection in use.  If the database connection is disposed, the default\r\n            flags will be returned.\r\n            </summary>\r\n            <param name=\"dataReader\">\r\n            The data reader containing the databse connection to query the flags from.\r\n            </param>\r\n            <returns>\r\n            The connection flags value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.GetSQLiteType(System.Int32)\">\r\n            <summary>\r\n            Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls.\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>A SQLiteType structure</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteDataReader.Read\">\r\n            <summary>\r\n            Reads the next row from the resultset\r\n            </summary>\r\n            <returns>True if a new row was successfully loaded and is ready for processing</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.Depth\">\r\n            <summary>\r\n            Not implemented.  Returns 0\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.FieldCount\">\r\n            <summary>\r\n            Returns the number of columns in the current resultset\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.VisibleFieldCount\">\r\n            <summary>\r\n            Returns the number of visible fields in the current resultset\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.HasRows\">\r\n            <summary>\r\n            Returns True if the resultset has rows that can be fetched\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.IsClosed\">\r\n            <summary>\r\n            Returns True if the data reader is closed\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.RecordsAffected\">\r\n            <summary>\r\n            Retrieve the count of records affected by an update/insert command.  Only valid once the data reader is closed!\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.Item(System.String)\">\r\n            <summary>\r\n            Indexer to retrieve data from a column given its name\r\n            </summary>\r\n            <param name=\"name\">The name of the column to retrieve data for</param>\r\n            <returns>The value contained in the column</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteDataReader.Item(System.Int32)\">\r\n            <summary>\r\n            Indexer to retrieve data from a column given its i\r\n            </summary>\r\n            <param name=\"i\">The index of the column to retrieve</param>\r\n            <returns>The value contained in the column</returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteException\">\r\n            <summary>\r\n            SQLite exception class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\r\n            <summary>\r\n            Private constructor for use with serialization.\r\n            </summary>\r\n            <param name=\"info\">\r\n            Holds the serialized object data about the exception being thrown.\r\n            </param>\r\n            <param name=\"context\">\r\n            Contains contextual information about the source or destination.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.#ctor(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            <summary>\r\n            Public constructor for generating a SQLite exception given the error\r\n            code and message.\r\n            </summary>\r\n            <param name=\"errorCode\">\r\n            The SQLite return code to report.\r\n            </param>\r\n            <param name=\"message\">\r\n            Message text to go along with the return code message text.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.#ctor(System.String)\">\r\n            <summary>\r\n            Public constructor that uses the base class constructor for the error\r\n            message.\r\n            </summary>\r\n            <param name=\"message\">Error message text.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.#ctor\">\r\n            <summary>\r\n            Public constructor that uses the default base class constructor.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.#ctor(System.String,System.Exception)\">\r\n            <summary>\r\n            Public constructor that uses the base class constructor for the error\r\n            message and inner exception.\r\n            </summary>\r\n            <param name=\"message\">Error message text.</param>\r\n            <param name=\"innerException\">The original (inner) exception.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\r\n            <summary>\r\n            Adds extra information to the serialized object data specific to this\r\n            class type.  This is only used for serialization.\r\n            </summary>\r\n            <param name=\"info\">\r\n            Holds the serialized object data about the exception being thrown.\r\n            </param>\r\n            <param name=\"context\">\r\n            Contains contextual information about the source or destination.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.GetErrorString(System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Returns the error message for the specified SQLite return code.\r\n            </summary>\r\n            <param name=\"errorCode\">The SQLite return code.</param>\r\n            <returns>The error message or null if it cannot be found.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteException.GetStockErrorMessage(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            <summary>\r\n            Returns the composite error message based on the SQLite return code\r\n            and the optional detailed error message.\r\n            </summary>\r\n            <param name=\"errorCode\">The SQLite return code.</param>\r\n            <param name=\"message\">Optional detailed error message.</param>\r\n            <returns>Error message text for the return code.</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteException.ResultCode\">\r\n            <summary>\r\n            Gets the associated SQLite result code for this exception as a\r\n            <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/>.  This property returns the same\r\n            underlying value as the <see cref=\"P:System.Data.SQLite.SQLiteException.ErrorCode\"/> property.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteException.ErrorCode\">\r\n            <summary>\r\n            Gets the associated SQLite return code for this exception as an\r\n            <see cref=\"T:System.Int32\"/>.  For desktop versions of the .NET Framework,\r\n            this property overrides the property of the same name within the\r\n            <see cref=\"T:System.Runtime.InteropServices.ExternalException\"/>\r\n            class.  This property returns the same underlying value as the\r\n            <see cref=\"P:System.Data.SQLite.SQLiteException.ResultCode\"/> property.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteErrorCode\">\r\n            <summary>\r\n            SQLite error codes.  Actually, this enumeration represents a return code,\r\n            which may also indicate success in one of several ways (e.g. SQLITE_OK,\r\n            SQLITE_ROW, and SQLITE_DONE).  Therefore, the name of this enumeration is\r\n            something of a misnomer.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Unknown\">\r\n            <summary>\r\n            The error code is unknown.  This error code\r\n            is only used by the managed wrapper itself.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Ok\">\r\n            <summary>\r\n            Successful result\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Error\">\r\n            <summary>\r\n            SQL error or missing database\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Internal\">\r\n            <summary>\r\n            Internal logic error in SQLite\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Perm\">\r\n            <summary>\r\n            Access permission denied\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Abort\">\r\n            <summary>\r\n            Callback routine requested an abort\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Busy\">\r\n            <summary>\r\n            The database file is locked\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Locked\">\r\n            <summary>\r\n            A table in the database is locked\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.NoMem\">\r\n            <summary>\r\n            A malloc() failed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.ReadOnly\">\r\n            <summary>\r\n            Attempt to write a readonly database\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Interrupt\">\r\n            <summary>\r\n            Operation terminated by sqlite3_interrupt()\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.IoErr\">\r\n            <summary>\r\n            Some kind of disk I/O error occurred\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Corrupt\">\r\n            <summary>\r\n            The database disk image is malformed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.NotFound\">\r\n            <summary>\r\n            Unknown opcode in sqlite3_file_control()\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Full\">\r\n            <summary>\r\n            Insertion failed because database is full\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.CantOpen\">\r\n            <summary>\r\n            Unable to open the database file\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Protocol\">\r\n            <summary>\r\n            Database lock protocol error\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Empty\">\r\n            <summary>\r\n            Database is empty\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Schema\">\r\n            <summary>\r\n            The database schema changed\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.TooBig\">\r\n            <summary>\r\n            String or BLOB exceeds size limit\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Constraint\">\r\n            <summary>\r\n            Abort due to constraint violation\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Mismatch\">\r\n            <summary>\r\n            Data type mismatch\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Misuse\">\r\n            <summary>\r\n            Library used incorrectly\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.NoLfs\">\r\n            <summary>\r\n            Uses OS features not supported on host\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Auth\">\r\n            <summary>\r\n            Authorization denied\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Format\">\r\n            <summary>\r\n            Auxiliary database format error\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Range\">\r\n            <summary>\r\n            2nd parameter to sqlite3_bind out of range\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.NotADb\">\r\n            <summary>\r\n            File opened that is not a database file\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Notice\">\r\n            <summary>\r\n            Notifications from sqlite3_log()\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Warning\">\r\n            <summary>\r\n            Warnings from sqlite3_log()\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Row\">\r\n            <summary>\r\n            sqlite3_step() has another row ready\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.Done\">\r\n            <summary>\r\n            sqlite3_step() has finished executing\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteErrorCode.NonExtendedMask\">\r\n            <summary>\r\n            Used to mask off extended result codes\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteFactory\">\r\n            <summary>\r\n            SQLite implementation of <see cref=\"T:System.Data.Common.DbProviderFactory\"/>.\r\n            </summary>\r\n            <summary>\r\n            SQLite implementation of <see cref=\"T:System.IServiceProvider\"/>.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.#ctor\">\r\n            <summary>\r\n            Constructs a new instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFactory.Instance\">\r\n            <summary>\r\n            Static instance member which returns an instanced <see cref=\"T:System.Data.SQLite.SQLiteFactory\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.CreateCommand\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteCommand\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.CreateCommandBuilder\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteCommandBuilder\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.CreateConnection\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.CreateConnectionStringBuilder\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteConnectionStringBuilder\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.CreateDataAdapter\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteDataAdapter\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.CreateParameter\">\r\n            <summary>\r\n            Creates and returns a new <see cref=\"T:System.Data.SQLite.SQLiteParameter\"/> object.\r\n            </summary>\r\n            <returns>The new object.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFactory.System#IServiceProvider#GetService(System.Type)\">\r\n            <summary>\r\n            Will provide a <see cref=\"T:System.IServiceProvider\"/> object in .NET 3.5.\r\n            </summary>\r\n            <param name=\"serviceType\">The class or interface type to query for.</param>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteFactory.Log\">\r\n            <summary>\r\n            This event is raised whenever SQLite raises a logging event.\r\n            Note that this should be set as one of the first things in the\r\n            application.  This event is provided for backward compatibility only.\r\n            New code should use the <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class instead.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteFunction\">\r\n             <summary>\r\n             This abstract class is designed to handle user-defined functions easily.  An instance of the derived class is made for each\r\n             connection to the database.\r\n             </summary>\r\n             <remarks>\r\n             Although there is one instance of a class derived from SQLiteFunction per database connection, the derived class has no access\r\n             to the underlying connection.  This is necessary to deter implementers from thinking it would be a good idea to make database\r\n             calls during processing.\r\n            \r\n             It is important to distinguish between a per-connection instance, and a per-SQL statement context.  One instance of this class\r\n             services all SQL statements being stepped through on that connection, and there can be many.  One should never store per-statement\r\n             information in member variables of user-defined function classes.\r\n            \r\n             For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step.  This data will\r\n             be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes.\r\n             </remarks>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._base\">\r\n            <summary>\r\n            The base connection this function is attached to\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._contextDataList\">\r\n            <summary>\r\n            Internal array used to keep track of aggregate function context data\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._flags\">\r\n            <summary>\r\n            The connection flags associated with this object (this should be the\r\n            same value as the flags associated with the parent connection object).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._InvokeFunc\">\r\n            <summary>\r\n            Holds a reference to the callback function for user functions\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._StepFunc\">\r\n            <summary>\r\n            Holds a reference to the callbakc function for stepping in an aggregate function\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._FinalFunc\">\r\n            <summary>\r\n            Holds a reference to the callback function for finalizing an aggregate function\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._CompareFunc\">\r\n            <summary>\r\n            Holds a reference to the callback function for collation sequences\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._context\">\r\n            <summary>\r\n            Current context of the current callback.  Only valid during a callback\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteFunction._registeredFunctions\">\r\n            <summary>\r\n            This static list contains all the user-defined functions declared using the proper attributes.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.#ctor\">\r\n            <summary>\r\n            Internal constructor, initializes the function's internal variables.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String,System.Boolean)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified data-type\r\n            conversion parameters.\r\n            </summary>\r\n            <param name=\"format\">\r\n            The DateTime format to be used when converting string values to a\r\n            DateTime and binding DateTime parameters.\r\n            </param>\r\n            <param name=\"kind\">\r\n            The <see cref=\"T:System.DateTimeKind\"/> to be used when creating DateTime\r\n            values.\r\n            </param>\r\n            <param name=\"formatString\">\r\n            The format string to be used when parsing and formatting DateTime\r\n            values.\r\n            </param>\r\n            <param name=\"utf16\">\r\n            Non-zero to create a UTF-16 data-type conversion context; otherwise,\r\n            a UTF-8 data-type conversion context will be created.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.Dispose\">\r\n            <summary>\r\n            Disposes of any active contextData variables that were not automatically cleaned up.  Sometimes this can happen if\r\n            someone closes the connection while a DataReader is open.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Placeholder for a user-defined disposal routine\r\n            </summary>\r\n            <param name=\"disposing\">True if the object is being disposed explicitly</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.Invoke(System.Object[])\">\r\n            <summary>\r\n            Scalar functions override this method to do their magic.\r\n            </summary>\r\n            <remarks>\r\n            Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available\r\n            to force them into a certain type.  Therefore the only types you will ever see as parameters are\r\n            DBNull.Value, Int64, Double, String or byte[] array.\r\n            </remarks>\r\n            <param name=\"args\">The arguments for the command to process</param>\r\n            <returns>You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or\r\n            you may return an Exception-derived class if you wish to return an error to SQLite.  Do not actually throw the error,\r\n            just return it!</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.Step(System.Object[],System.Int32,System.Object@)\">\r\n            <summary>\r\n            Aggregate functions override this method to do their magic.\r\n            </summary>\r\n            <remarks>\r\n            Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible.\r\n            </remarks>\r\n            <param name=\"args\">The arguments for the command to process</param>\r\n            <param name=\"stepNumber\">The 1-based step number.  This is incrememted each time the step method is called.</param>\r\n            <param name=\"contextData\">A placeholder for implementers to store contextual data pertaining to the current context.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.Final(System.Object)\">\r\n            <summary>\r\n            Aggregate functions override this method to finish their aggregate processing.\r\n            </summary>\r\n            <remarks>\r\n            If you implemented your aggregate function properly,\r\n            you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have\r\n            all the information you need in there to figure out what to return.\r\n            NOTE:  It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will\r\n            be null.  This can happen when no rows were returned.  You can either return null, or 0 or some other custom return value\r\n            if that is the case.\r\n            </remarks>\r\n            <param name=\"contextData\">Your own assigned contextData, provided for you so you can return your final results.</param>\r\n            <returns>You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or\r\n            you may return an Exception-derived class if you wish to return an error to SQLite.  Do not actually throw the error,\r\n            just return it!\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.Compare(System.String,System.String)\">\r\n            <summary>\r\n            User-defined collation sequences override this method to provide a custom string sorting algorithm.\r\n            </summary>\r\n            <param name=\"param1\">The first string to compare</param>\r\n            <param name=\"param2\">The second strnig to compare</param>\r\n            <returns>1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.ConvertParams(System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to.\r\n            </summary>\r\n            <remarks>\r\n            Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available\r\n            to force them into a certain type.  Therefore the only types you will ever see as parameters are\r\n            DBNull.Value, Int64, Double, String or byte[] array.\r\n            </remarks>\r\n            <param name=\"nArgs\">The number of arguments</param>\r\n            <param name=\"argsptr\">A pointer to the array of arguments</param>\r\n            <returns>An object array of the arguments once they've been converted to .NET values</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.SetReturnValue(System.IntPtr,System.Object)\">\r\n            <summary>\r\n            Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context.\r\n            </summary>\r\n            <param name=\"context\">The context the return value applies to</param>\r\n            <param name=\"returnValue\">The parameter to return to SQLite</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.ScalarCallback(System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method.\r\n            WARNING: Must not throw exceptions.\r\n            </summary>\r\n            <param name=\"context\">A raw context pointer</param>\r\n            <param name=\"nArgs\">Number of arguments passed in</param>\r\n            <param name=\"argsptr\">A pointer to the array of arguments</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.CompareCallback(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.\r\n            WARNING: Must not throw exceptions.\r\n            </summary>\r\n            <param name=\"ptr\">Not used</param>\r\n            <param name=\"len1\">Length of the string pv1</param>\r\n            <param name=\"ptr1\">Pointer to the first string to compare</param>\r\n            <param name=\"len2\">Length of the string pv2</param>\r\n            <param name=\"ptr2\">Pointer to the second string to compare</param>\r\n            <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater\r\n            than the second.  Returns 0 if an exception is caught.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.CompareCallback16(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.\r\n            WARNING: Must not throw exceptions.\r\n            </summary>\r\n            <param name=\"ptr\">Not used</param>\r\n            <param name=\"len1\">Length of the string pv1</param>\r\n            <param name=\"ptr1\">Pointer to the first string to compare</param>\r\n            <param name=\"len2\">Length of the string pv2</param>\r\n            <param name=\"ptr2\">Pointer to the second string to compare</param>\r\n            <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater\r\n            than the second.  Returns 0 if an exception is caught.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.StepCallback(System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method.\r\n            WARNING: Must not throw exceptions.\r\n            </summary>\r\n            <remarks>\r\n            This function takes care of doing the lookups and getting the important information put together to call the Step() function.\r\n            That includes pulling out the user's contextData and updating it after the call is made.  We use a sorted list for this so\r\n            binary searches can be done to find the data.\r\n            </remarks>\r\n            <param name=\"context\">A raw context pointer</param>\r\n            <param name=\"nArgs\">Number of arguments passed in</param>\r\n            <param name=\"argsptr\">A pointer to the array of arguments</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.FinalCallback(System.IntPtr)\">\r\n            <summary>\r\n            An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method.\r\n            WARNING: Must not throw exceptions.\r\n            </summary>\r\n            <param name=\"context\">A raw context pointer</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.#cctor\">\r\n            <summary>\r\n            Using reflection, enumerate all assemblies in the current appdomain looking for classes that\r\n            have a SQLiteFunctionAttribute attribute, and registering them accordingly.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.RegisterFunction(System.Type)\">\r\n            <summary>\r\n            Manual method of registering a function.  The type must still have the SQLiteFunctionAttributes in order to work\r\n            properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported.\r\n            </summary>\r\n            <param name=\"typ\">The type of the function to register</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.BindFunctions(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            Called by SQLiteBase derived classes, this function binds all user-defined functions to a connection.\r\n            It is done this way so that all user-defined functions will access the database using the same encoding scheme\r\n            as the connection (UTF-8 or UTF-16).\r\n            </summary>\r\n            <remarks>\r\n            The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to\r\n            all the wrapped callback functions.  The interop function uses it to map CDecl callbacks to StdCall callbacks.\r\n            </remarks>\r\n            <param name=\"sqlbase\">The base object on which the functions are to bind</param>\r\n            <param name=\"flags\">The flags associated with the parent connection object</param>\r\n            <returns>Returns a logical list of functions which the connection should retain until it is closed.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunction.BindFunction(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)\">\r\n            <summary>\r\n            This function binds a user-defined functions to a connection.\r\n            </summary>\r\n            <param name=\"sqliteBase\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteBase\"/> object instance associated with the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> that the function should be bound to.\r\n            </param>\r\n            <param name=\"functionAttribute\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunctionAttribute\"/> object instance containing\r\n            the metadata for the function to be bound.\r\n            </param>\r\n            <param name=\"function\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance that implements the\r\n            function to be bound.\r\n            </param>\r\n            <param name=\"flags\">\r\n            The flags associated with the parent connection object.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteFunction.SQLiteConvert\">\r\n            <summary>\r\n            Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert\r\n            strings and DateTime's into the current connection's encoding schema.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteFunctionEx\">\r\n            <summary>\r\n            Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call.\r\n            </summary>\r\n            <remarks>\r\n            User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays.\r\n            </remarks>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunctionEx.GetCollationSequence\">\r\n            <summary>\r\n            Obtains the collating sequence in effect for the given function.\r\n            </summary>\r\n            <returns></returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.FunctionType\">\r\n            <summary>\r\n            The type of user-defined function to declare\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.FunctionType.Scalar\">\r\n            <summary>\r\n            Scalar functions are designed to be called and return a result immediately.  Examples include ABS(), Upper(), Lower(), etc.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.FunctionType.Aggregate\">\r\n            <summary>\r\n            Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data.\r\n            Examples include SUM(), COUNT(), AVG(), etc.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.FunctionType.Collation\">\r\n            <summary>\r\n            Collation sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause.  Typically text in an ORDER BY is\r\n            sorted using a straight case-insensitive comparison function.  Custom collating sequences can be used to alter the behavior of text sorting\r\n            in a user-defined manner.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteCallback\">\r\n            <summary>\r\n            An internal callback delegate declaration.\r\n            </summary>\r\n            <param name=\"context\">Raw native context pointer for the user function.</param>\r\n            <param name=\"argc\">Total number of arguments to the user function.</param>\r\n            <param name=\"argv\">Raw native pointer to the array of raw native argument pointers.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteFinalCallback\">\r\n            <summary>\r\n            An internal final callback delegate declaration.\r\n            </summary>\r\n            <param name=\"context\">Raw context pointer for the user function</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteCollation\">\r\n            <summary>\r\n            Internal callback delegate for implementing collation sequences\r\n            </summary>\r\n            <param name=\"puser\">Not used</param>\r\n            <param name=\"len1\">Length of the string pv1</param>\r\n            <param name=\"pv1\">Pointer to the first string to compare</param>\r\n            <param name=\"len2\">Length of the string pv2</param>\r\n            <param name=\"pv2\">Pointer to the second string to compare</param>\r\n            <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater\r\n            than the second.</returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.CollationTypeEnum\">\r\n            <summary>\r\n            The type of collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationTypeEnum.Binary\">\r\n            <summary>\r\n            The built-in BINARY collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationTypeEnum.NoCase\">\r\n            <summary>\r\n            The built-in NOCASE collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationTypeEnum.Reverse\">\r\n            <summary>\r\n            The built-in REVERSE collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationTypeEnum.Custom\">\r\n            <summary>\r\n            A custom user-defined collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.CollationEncodingEnum\">\r\n            <summary>\r\n            The encoding type the collation sequence uses\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationEncodingEnum.UTF8\">\r\n            <summary>\r\n            The collation sequence is UTF8\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationEncodingEnum.UTF16LE\">\r\n            <summary>\r\n            The collation sequence is UTF16 little-endian\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationEncodingEnum.UTF16BE\">\r\n            <summary>\r\n            The collation sequence is UTF16 big-endian\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.CollationSequence\">\r\n            <summary>\r\n            A struct describing the collating sequence a function is executing in\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationSequence.Name\">\r\n            <summary>\r\n            The name of the collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationSequence.Type\">\r\n            <summary>\r\n            The type of collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationSequence.Encoding\">\r\n            <summary>\r\n            The text encoding of the collation sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.CollationSequence._func\">\r\n            <summary>\r\n            Context of the function that requested the collating sequence\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.CollationSequence.Compare(System.String,System.String)\">\r\n            <summary>\r\n            Calls the base collating sequence to compare two strings\r\n            </summary>\r\n            <param name=\"s1\">The first string to compare</param>\r\n            <param name=\"s2\">The second string to compare</param>\r\n            <returns>-1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.CollationSequence.Compare(System.Char[],System.Char[])\">\r\n            <summary>\r\n            Calls the base collating sequence to compare two character arrays\r\n            </summary>\r\n            <param name=\"c1\">The first array to compare</param>\r\n            <param name=\"c2\">The second array to compare</param>\r\n            <returns>-1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2</returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteFunctionAttribute\">\r\n            <summary>\r\n            A simple custom attribute to enable us to easily find user-defined functions in\r\n            the loaded assemblies and initialize them in SQLite as connections are made.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunctionAttribute.#ctor\">\r\n            <summary>\r\n            Default constructor, initializes the internal variables for the function.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteFunctionAttribute.#ctor(System.String,System.Int32,System.Data.SQLite.FunctionType)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the function, as seen by the SQLite core library.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments that the function will accept.\r\n            </param>\r\n            <param name=\"functionType\">\r\n            The type of function being declared.  This will either be Scalar,\r\n            Aggregate, or Collation.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteFunctionAttribute.Name\">\r\n            <summary>\r\n            The function's name as it will be used in SQLite command text.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteFunctionAttribute.Arguments\">\r\n            <summary>\r\n            The number of arguments this function expects.  -1 if the number of arguments is variable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteFunctionAttribute.FuncType\">\r\n            <summary>\r\n            The type of function this implementation will be.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteFunctionAttribute.InstanceType\">\r\n            <summary>\r\n            The <see cref=\"T:System.Type\"/> object instance that describes the class\r\n            containing the implementation for the associated function.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteKeyReader\">\r\n            <summary>\r\n            This class provides key info for a given SQLite statement.\r\n            <remarks>\r\n            Providing key information for a given statement is non-trivial :(\r\n            </remarks>\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteKeyReader.#ctor(System.Data.SQLite.SQLiteConnection,System.Data.SQLite.SQLiteDataReader,System.Data.SQLite.SQLiteStatement)\">\r\n            <summary>\r\n            This function does all the nasty work at determining what keys need to be returned for\r\n            a given statement.\r\n            </summary>\r\n            <param name=\"cnn\"></param>\r\n            <param name=\"reader\"></param>\r\n            <param name=\"stmt\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteKeyReader.Sync\">\r\n            <summary>\r\n            Make sure all the subqueries are open and ready and sync'd with the current rowid\r\n            of the table they're supporting\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteKeyReader.Reset\">\r\n            <summary>\r\n            Release any readers on any subqueries\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteKeyReader.AppendSchemaTable(System.Data.DataTable)\">\r\n            <summary>\r\n            Append all the columns we've added to the original query to the schema\r\n            </summary>\r\n            <param name=\"tbl\"></param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteKeyReader.Count\">\r\n            <summary>\r\n            How many additional columns of keyinfo we're holding\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteKeyReader.KeyInfo\">\r\n            <summary>\r\n            Used to support CommandBehavior.KeyInfo\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteKeyReader.KeyQuery\">\r\n            <summary>\r\n            A single sub-query for a given table/database.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.LogEventArgs\">\r\n            <summary>\r\n            Event data for logging event handlers.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.LogEventArgs.ErrorCode\">\r\n            <summary>\r\n            The error code.  The type of this object value should be\r\n            <see cref=\"T:System.Int32\"/> or <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/>.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.LogEventArgs.Message\">\r\n            <summary>\r\n            SQL statement text as the statement first begins executing\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.LogEventArgs.Data\">\r\n            <summary>\r\n            Extra data associated with this event, if any.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.LogEventArgs.#ctor(System.IntPtr,System.Object,System.String,System.Object)\">\r\n            <summary>\r\n            Constructs the object.\r\n            </summary>\r\n            <param name=\"pUserData\">Should be null.</param>\r\n            <param name=\"errorCode\">\r\n            The error code.  The type of this object value should be\r\n            <see cref=\"T:System.Int32\"/> or <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/>.\r\n            </param>\r\n            <param name=\"message\">The error message, if any.</param>\r\n            <param name=\"data\">The extra data, if any.</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteLogEventHandler\">\r\n            <summary>\r\n            Raised when a log event occurs.\r\n            </summary>\r\n            <param name=\"sender\">The current connection</param>\r\n            <param name=\"e\">Event arguments of the trace</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteLog\">\r\n            <summary>\r\n            Manages the SQLite custom logging functionality and the associated\r\n            callback for the whole process.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteLog.syncRoot\">\r\n            <summary>\r\n            Object used to synchronize access to the static instance data\r\n            for this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteLog._domainUnload\">\r\n            <summary>\r\n            Member variable to store the AppDomain.DomainUnload event handler.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteLog._defaultHandler\">\r\n            <summary>\r\n            The default log event handler.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteLog._callback\">\r\n            <summary>\r\n            The log callback passed to native SQLite engine.  This must live\r\n            as long as the SQLite library has a pointer to it.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteLog._sql\">\r\n            <summary>\r\n            The base SQLite object to interop with.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteLog._enabled\">\r\n            <summary>\r\n            This will be non-zero if logging is currently enabled.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.Initialize\">\r\n            <summary>\r\n            Initializes the SQLite logging facilities.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.DomainUnload(System.Object,System.EventArgs)\">\r\n            <summary>\r\n            Handles the AppDomain being unloaded.\r\n            </summary>\r\n            <param name=\"sender\">Should be null.</param>\r\n            <param name=\"e\">The data associated with this event.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.LogMessage(System.String)\">\r\n            <summary>\r\n            Log a message to all the registered log event handlers without going\r\n            through the SQLite library.\r\n            </summary>\r\n            <param name=\"message\">The message to be logged.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)\">\r\n            <summary>\r\n            Log a message to all the registered log event handlers without going\r\n            through the SQLite library.\r\n            </summary>\r\n            <param name=\"errorCode\">The SQLite error code.</param>\r\n            <param name=\"message\">The message to be logged.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.LogMessage(System.Int32,System.String)\">\r\n            <summary>\r\n            Log a message to all the registered log event handlers without going\r\n            through the SQLite library.\r\n            </summary>\r\n            <param name=\"errorCode\">The integer error code.</param>\r\n            <param name=\"message\">The message to be logged.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.LogMessage(System.Object,System.String)\">\r\n            <summary>\r\n            Log a message to all the registered log event handlers without going\r\n            through the SQLite library.\r\n            </summary>\r\n            <param name=\"errorCode\">\r\n            The error code.  The type of this object value should be\r\n            System.Int32 or SQLiteErrorCode.\r\n            </param>\r\n            <param name=\"message\">The message to be logged.</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.InitializeDefaultHandler\">\r\n            <summary>\r\n            Creates and initializes the default log event handler.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.AddDefaultHandler\">\r\n            <summary>\r\n            Adds the default log event handler to the list of handlers.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.RemoveDefaultHandler\">\r\n            <summary>\r\n            Removes the default log event handler from the list of handlers.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.LogCallback(System.IntPtr,System.Int32,System.IntPtr)\">\r\n             <summary>\r\n             Internal proxy function that calls any registered application log\r\n             event handlers.\r\n            \r\n             WARNING: This method is used more-or-less directly by native code,\r\n                      do not modify its type signature.\r\n             </summary>\r\n             <param name=\"pUserData\">\r\n             The extra data associated with this message, if any.\r\n             </param>\r\n             <param name=\"errorCode\">\r\n             The error code associated with this message.\r\n             </param>\r\n             <param name=\"pMessage\">\r\n             The message string to be logged.\r\n             </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteLog.LogEventHandler(System.Object,System.Data.SQLite.LogEventArgs)\">\r\n            <summary>\r\n            Default logger.  Currently, uses the Trace class (i.e. sends events\r\n            to the current trace listeners, if any).\r\n            </summary>\r\n            <param name=\"sender\">Should be null.</param>\r\n            <param name=\"e\">The data associated with this event.</param>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteLog._handlers\">\r\n            <summary>\r\n            Member variable to store the application log handler to call.\r\n            </summary>\r\n        </member>\r\n        <member name=\"E:System.Data.SQLite.SQLiteLog.Log\">\r\n            <summary>\r\n            This event is raised whenever SQLite raises a logging event.\r\n            Note that this should be set as one of the first things in the\r\n            application.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteLog.Enabled\">\r\n            <summary>\r\n            If this property is true, logging is enabled; otherwise, logging is\r\n            disabled.  When logging is disabled, no logging events will fire.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteMetaDataCollectionNames\">\r\n            <summary>\r\n            MetaDataCollections specific to SQLite\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Catalogs\">\r\n            <summary>\r\n            Returns a list of databases attached to the connection\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Columns\">\r\n            <summary>\r\n            Returns column information for the specified table\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Indexes\">\r\n            <summary>\r\n            Returns index information for the optionally-specified table\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.IndexColumns\">\r\n            <summary>\r\n            Returns base columns for the given index\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Tables\">\r\n            <summary>\r\n            Returns the tables in the given catalog\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Views\">\r\n            <summary>\r\n            Returns user-defined views in the given catalog\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.ViewColumns\">\r\n            <summary>\r\n            Returns underlying column information on the given view\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.ForeignKeys\">\r\n            <summary>\r\n            Returns foreign key information for the given catalog\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Triggers\">\r\n            <summary>\r\n            Returns the triggers on the database\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteParameter\">\r\n            <summary>\r\n            SQLite implementation of DbParameter.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameter._dbType\">\r\n            <summary>\r\n            The data type of the parameter\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameter._rowVersion\">\r\n            <summary>\r\n            The version information for mapping the parameter\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameter._objValue\">\r\n            <summary>\r\n            The value of the data in the parameter\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameter._sourceColumn\">\r\n            <summary>\r\n            The source column for the parameter\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameter._parameterName\">\r\n            <summary>\r\n            The column name\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameter._dataSize\">\r\n            <summary>\r\n            The data size, unused by SQLite\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor\">\r\n            <summary>\r\n            Default constructor\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs a named parameter given the specified parameter name\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Object)\">\r\n            <summary>\r\n            Constructs a named parameter given the specified parameter name and initial value\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"value\">The initial value of the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"dbType\">The datatype of the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.String)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type and source column reference\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"dbType\">The data type</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.String,System.Data.DataRowVersion)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type, source column and row version\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"dbType\">The data type</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <param name=\"rowVersion\">The row version information</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified data type\r\n            </summary>\r\n            <param name=\"dbType\">The datatype of the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Object)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified data type and sets the initial value\r\n            </summary>\r\n            <param name=\"dbType\">The datatype of the parameter</param>\r\n            <param name=\"value\">The initial value of the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.String)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified data type and source column\r\n            </summary>\r\n            <param name=\"dbType\">The datatype of the parameter</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.String,System.Data.DataRowVersion)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified data type, source column and row version\r\n            </summary>\r\n            <param name=\"dbType\">The data type</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <param name=\"rowVersion\">The row version information</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type and size\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.String)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type, size and source column\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.String,System.Data.DataRowVersion)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type, size, source column and row version\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <param name=\"rowVersion\">The row version information</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.Data.ParameterDirection,System.Boolean,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Object)\">\r\n            <summary>\r\n            Constructs a named parameter of the specified type, size, source column and row version\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n            <param name=\"direction\">Only input parameters are supported in SQLite</param>\r\n            <param name=\"isNullable\">Ignored</param>\r\n            <param name=\"precision\">Ignored</param>\r\n            <param name=\"scale\">Ignored</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <param name=\"rowVersion\">The row version information</param>\r\n            <param name=\"value\">The initial value to assign the parameter</param>   \r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.Data.ParameterDirection,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Boolean,System.Object)\">\r\n            <summary>\r\n            Constructs a named parameter, yet another flavor\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n            <param name=\"direction\">Only input parameters are supported in SQLite</param>\r\n            <param name=\"precision\">Ignored</param>\r\n            <param name=\"scale\">Ignored</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <param name=\"rowVersion\">The row version information</param>\r\n            <param name=\"sourceColumnNullMapping\">Whether or not this parameter is for comparing NULL's</param>\r\n            <param name=\"value\">The intial value to assign the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Int32)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified type and size\r\n            </summary>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Int32,System.String)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified type, size, and source column\r\n            </summary>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Int32,System.String,System.Data.DataRowVersion)\">\r\n            <summary>\r\n            Constructs an unnamed parameter of the specified type, size, source column and row version\r\n            </summary>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the parameter</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <param name=\"rowVersion\">The row version information</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.ResetDbType\">\r\n            <summary>\r\n            Resets the DbType of the parameter so it can be inferred from the value\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameter.Clone\">\r\n            <summary>\r\n            Clones a parameter\r\n            </summary>\r\n            <returns>A new, unassociated SQLiteParameter</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.IsNullable\">\r\n            <summary>\r\n            Whether or not the parameter can contain a null value\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.DbType\">\r\n            <summary>\r\n            Returns the datatype of the parameter\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.Direction\">\r\n            <summary>\r\n            Supports only input parameters\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.ParameterName\">\r\n            <summary>\r\n            Returns the parameter name\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.Size\">\r\n            <summary>\r\n            Returns the size of the parameter\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.SourceColumn\">\r\n            <summary>\r\n            Gets/sets the source column\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.SourceColumnNullMapping\">\r\n            <summary>\r\n            Used by DbCommandBuilder to determine the mapping for nullable fields\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.SourceVersion\">\r\n            <summary>\r\n            Gets and sets the row version\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameter.Value\">\r\n            <summary>\r\n            Gets and sets the parameter value.  If no datatype was specified, the datatype will assume the type from the value given.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteParameterCollection\">\r\n            <summary>\r\n            SQLite implementation of DbParameterCollection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameterCollection._command\">\r\n            <summary>\r\n            The underlying command to which this collection belongs\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameterCollection._parameterList\">\r\n            <summary>\r\n            The internal array of parameters in this collection\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteParameterCollection._unboundFlag\">\r\n            <summary>\r\n            Determines whether or not all parameters have been bound to their statement(s)\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.#ctor(System.Data.SQLite.SQLiteCommand)\">\r\n            <summary>\r\n            Initializes the collection\r\n            </summary>\r\n            <param name=\"cmd\">The command to which the collection belongs</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.GetEnumerator\">\r\n            <summary>\r\n            Retrieves an enumerator for the collection\r\n            </summary>\r\n            <returns>An enumerator for the underlying array</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Add(System.String,System.Data.DbType,System.Int32,System.String)\">\r\n            <summary>\r\n            Adds a parameter to the collection\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the value</param>\r\n            <param name=\"sourceColumn\">The source column</param>\r\n            <returns>A SQLiteParameter object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Add(System.String,System.Data.DbType,System.Int32)\">\r\n            <summary>\r\n            Adds a parameter to the collection\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <param name=\"parameterSize\">The size of the value</param>\r\n            <returns>A SQLiteParameter object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Add(System.String,System.Data.DbType)\">\r\n            <summary>\r\n            Adds a parameter to the collection\r\n            </summary>\r\n            <param name=\"parameterName\">The parameter name</param>\r\n            <param name=\"parameterType\">The data type</param>\r\n            <returns>A SQLiteParameter object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Add(System.Data.SQLite.SQLiteParameter)\">\r\n            <summary>\r\n            Adds a parameter to the collection\r\n            </summary>\r\n            <param name=\"parameter\">The parameter to add</param>\r\n            <returns>A zero-based index of where the parameter is located in the array</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Add(System.Object)\">\r\n            <summary>\r\n            Adds a parameter to the collection\r\n            </summary>\r\n            <param name=\"value\">The parameter to add</param>\r\n            <returns>A zero-based index of where the parameter is located in the array</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.AddWithValue(System.String,System.Object)\">\r\n            <summary>\r\n            Adds a named/unnamed parameter and its value to the parameter collection.\r\n            </summary>\r\n            <param name=\"parameterName\">Name of the parameter, or null to indicate an unnamed parameter</param>\r\n            <param name=\"value\">The initial value of the parameter</param>\r\n            <returns>Returns the SQLiteParameter object created during the call.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.AddRange(System.Data.SQLite.SQLiteParameter[])\">\r\n            <summary>\r\n            Adds an array of parameters to the collection\r\n            </summary>\r\n            <param name=\"values\">The array of parameters to add</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.AddRange(System.Array)\">\r\n            <summary>\r\n            Adds an array of parameters to the collection\r\n            </summary>\r\n            <param name=\"values\">The array of parameters to add</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Clear\">\r\n            <summary>\r\n            Clears the array and resets the collection\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Contains(System.String)\">\r\n            <summary>\r\n            Determines if the named parameter exists in the collection\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter to check</param>\r\n            <returns>True if the parameter is in the collection</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Contains(System.Object)\">\r\n            <summary>\r\n            Determines if the parameter exists in the collection\r\n            </summary>\r\n            <param name=\"value\">The SQLiteParameter to check</param>\r\n            <returns>True if the parameter is in the collection</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.CopyTo(System.Array,System.Int32)\">\r\n            <summary>\r\n            Not implemented\r\n            </summary>\r\n            <param name=\"array\"></param>\r\n            <param name=\"index\"></param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.GetParameter(System.String)\">\r\n            <summary>\r\n            Retrieve a parameter by name from the collection\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter to fetch</param>\r\n            <returns>A DbParameter object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.GetParameter(System.Int32)\">\r\n            <summary>\r\n            Retrieves a parameter by its index in the collection\r\n            </summary>\r\n            <param name=\"index\">The index of the parameter to retrieve</param>\r\n            <returns>A DbParameter object</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.IndexOf(System.String)\">\r\n            <summary>\r\n            Returns the index of a parameter given its name\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter to find</param>\r\n            <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.IndexOf(System.Object)\">\r\n            <summary>\r\n            Returns the index of a parameter\r\n            </summary>\r\n            <param name=\"value\">The parameter to find</param>\r\n            <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Insert(System.Int32,System.Object)\">\r\n            <summary>\r\n            Inserts a parameter into the array at the specified location\r\n            </summary>\r\n            <param name=\"index\">The zero-based index to insert the parameter at</param>\r\n            <param name=\"value\">The parameter to insert</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Remove(System.Object)\">\r\n            <summary>\r\n            Removes a parameter from the collection\r\n            </summary>\r\n            <param name=\"value\">The parameter to remove</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.RemoveAt(System.String)\">\r\n            <summary>\r\n            Removes a parameter from the collection given its name\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter to remove</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.RemoveAt(System.Int32)\">\r\n            <summary>\r\n            Removes a parameter from the collection given its index\r\n            </summary>\r\n            <param name=\"index\">The zero-based parameter index to remove</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.SetParameter(System.String,System.Data.Common.DbParameter)\">\r\n            <summary>\r\n            Re-assign the named parameter to a new parameter object\r\n            </summary>\r\n            <param name=\"parameterName\">The name of the parameter to replace</param>\r\n            <param name=\"value\">The new parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.SetParameter(System.Int32,System.Data.Common.DbParameter)\">\r\n            <summary>\r\n            Re-assign a parameter at the specified index\r\n            </summary>\r\n            <param name=\"index\">The zero-based index of the parameter to replace</param>\r\n            <param name=\"value\">The new parameter</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.Unbind\">\r\n            <summary>\r\n            Un-binds all parameters from their statements\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteParameterCollection.MapParameters(System.Data.SQLite.SQLiteStatement)\">\r\n            <summary>\r\n            This function attempts to map all parameters in the collection to all statements in a Command.\r\n            Since named parameters may span multiple statements, this function makes sure all statements are bound\r\n            to the same named parameter.  Unnamed parameters are bound in sequence.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.IsSynchronized\">\r\n            <summary>\r\n            Returns false\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.IsFixedSize\">\r\n            <summary>\r\n            Returns false\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.IsReadOnly\">\r\n            <summary>\r\n            Returns false\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.SyncRoot\">\r\n            <summary>\r\n            Returns null\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.Count\">\r\n            <summary>\r\n            Returns a count of parameters in the collection\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.Item(System.String)\">\r\n            <summary>\r\n            Overloaded to specialize the return value of the default indexer\r\n            </summary>\r\n            <param name=\"parameterName\">Name of the parameter to get/set</param>\r\n            <returns>The specified named SQLite parameter</returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteParameterCollection.Item(System.Int32)\">\r\n            <summary>\r\n            Overloaded to specialize the return value of the default indexer\r\n            </summary>\r\n            <param name=\"index\">The index of the parameter to get/set</param>\r\n            <returns>The specified SQLite parameter</returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteStatement\">\r\n            <summary>\r\n            Represents a single SQL statement in SQLite.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._sql\">\r\n            <summary>\r\n            The underlying SQLite object this statement is bound to\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._sqlStatement\">\r\n            <summary>\r\n            The command text of this SQL statement\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._sqlite_stmt\">\r\n            <summary>\r\n            The actual statement pointer\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._unnamedParameters\">\r\n            <summary>\r\n            An index from which unnamed parameters begin\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._paramNames\">\r\n            <summary>\r\n            Names of the parameters as SQLite understands them to be\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._paramValues\">\r\n            <summary>\r\n            Parameters for this statement\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._command\">\r\n            <summary>\r\n            Command this statement belongs to (if any)\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteStatement._flags\">\r\n            <summary>\r\n            The flags associated with the parent connection object.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.#ctor(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteStatementHandle,System.String,System.Data.SQLite.SQLiteStatement)\">\r\n            <summary>\r\n            Initializes the statement and attempts to get all information about parameters in the statement\r\n            </summary>\r\n            <param name=\"sqlbase\">The base SQLite object</param>\r\n            <param name=\"flags\">The flags associated with the parent connection object</param>\r\n            <param name=\"stmt\">The statement</param>\r\n            <param name=\"strCommand\">The command text for this statement</param>\r\n            <param name=\"previous\">The previous command in a multi-statement command</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.Dispose\">\r\n            <summary>\r\n            Disposes and finalizes the statement\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.TryGetChanges(System.Int32@)\">\r\n            <summary>\r\n            If the underlying database connection is open, fetches the number of changed rows\r\n            resulting from the most recent query; otherwise, does nothing.\r\n            </summary>\r\n            <param name=\"changes\">\r\n            The number of changes when true is returned.\r\n            Undefined if false is returned.\r\n            </param>\r\n            <returns>Non-zero if the number of changed rows was fetched.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.MapParameter(System.String,System.Data.SQLite.SQLiteParameter)\">\r\n            <summary>\r\n            Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to\r\n            this statement, and if so, keeps a reference to the parameter so it can be bound later.\r\n            </summary>\r\n            <param name=\"s\">The parameter name to map</param>\r\n            <param name=\"p\">The parameter to assign it</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.BindParameters\">\r\n            <summary>\r\n             Bind all parameters, making sure the caller didn't miss any\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.ToBoolean(System.Object,System.IFormatProvider)\">\r\n            <summary>\r\n            Attempts to convert an arbitrary object to the Boolean data type.\r\n            Null object values are converted to false.  Throws a SQLiteException\r\n            upon failure.\r\n            </summary>\r\n            <param name=\"obj\">The object value to convert.</param>\r\n            <param name=\"provider\">The format provider to use.</param>\r\n            <returns>The converted boolean value.</returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteStatement.BindParameter(System.Int32,System.Data.SQLite.SQLiteParameter)\">\r\n            <summary>\r\n            Perform the bind operation for an individual parameter\r\n            </summary>\r\n            <param name=\"index\">The index of the parameter to bind</param>\r\n            <param name=\"param\">The parameter we're binding</param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteTransaction\">\r\n            <summary>\r\n            SQLite implementation of DbTransaction.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteTransaction._cnn\">\r\n            <summary>\r\n            The connection to which this transaction is bound\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteTransaction.#ctor(System.Data.SQLite.SQLiteConnection,System.Boolean)\">\r\n            <summary>\r\n            Constructs the transaction object, binding it to the supplied connection\r\n            </summary>\r\n            <param name=\"connection\">The connection to open a transaction on</param>\r\n            <param name=\"deferredLock\">TRUE to defer the writelock, or FALSE to lock immediately</param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteTransaction.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes the transaction.  If it is currently active, any changes are rolled back.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteTransaction.Commit\">\r\n            <summary>\r\n            Commits the current transaction.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteTransaction.Rollback\">\r\n            <summary>\r\n            Rolls back the active transaction.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteTransaction.Connection\">\r\n            <summary>\r\n            Returns the underlying connection to which this transaction applies.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteTransaction.DbConnection\">\r\n            <summary>\r\n            Forwards to the local Connection property\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteTransaction.IsolationLevel\">\r\n            <summary>\r\n            Gets the isolation level of the transaction.  SQLite only supports Serializable transactions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SR\">\r\n            <summary>\r\n              A strongly-typed resource class, for looking up localized strings, etc.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SR.ResourceManager\">\r\n            <summary>\r\n              Returns the cached ResourceManager instance used by this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SR.Culture\">\r\n            <summary>\r\n              Overrides the current thread's CurrentUICulture property for all\r\n              resource lookups using this strongly typed resource class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SR.DataTypes\">\r\n             <summary>\r\n               Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; standalone=&quot;yes&quot;?&gt;\r\n            &lt;DocumentElement&gt;\r\n              &lt;DataTypes&gt;\r\n                &lt;TypeName&gt;smallint&lt;/TypeName&gt;\r\n                &lt;ProviderDbType&gt;10&lt;/ProviderDbType&gt;\r\n                &lt;ColumnSize&gt;5&lt;/ColumnSize&gt;\r\n                &lt;DataType&gt;System.Int16&lt;/DataType&gt;\r\n                &lt;CreateFormat&gt;smallint&lt;/CreateFormat&gt;\r\n                &lt;IsAutoIncrementable&gt;false&lt;/IsAutoIncrementable&gt;\r\n                &lt;IsCaseSensitive&gt;false&lt;/IsCaseSensitive&gt;\r\n                &lt;IsFixedLength&gt;true&lt;/IsFixedLength&gt;\r\n                &lt;IsFixedPrecisionScale&gt;true&lt;/IsFixedPrecisionScale&gt;\r\n                &lt;IsLong&gt;false&lt;/IsLong&gt;\r\n                &lt;IsNullable&gt;true&lt;/ [rest of string was truncated]&quot;;.\r\n             </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SR.Keywords\">\r\n            <summary>\r\n              Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SR.MetaDataCollections\">\r\n             <summary>\r\n               Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;\r\n            &lt;DocumentElement&gt;\r\n              &lt;MetaDataCollections&gt;\r\n                &lt;CollectionName&gt;MetaDataCollections&lt;/CollectionName&gt;\r\n                &lt;NumberOfRestrictions&gt;0&lt;/NumberOfRestrictions&gt;\r\n                &lt;NumberOfIdentifierParts&gt;0&lt;/NumberOfIdentifierParts&gt;\r\n              &lt;/MetaDataCollections&gt;\r\n              &lt;MetaDataCollections&gt;\r\n                &lt;CollectionName&gt;DataSourceInformation&lt;/CollectionName&gt;\r\n                &lt;NumberOfRestrictions&gt;0&lt;/NumberOfRestrictions&gt;\r\n                &lt;NumberOfIdentifierParts&gt;0&lt;/NumberOfIdentifierParts&gt;\r\n              &lt;/MetaDataCollections&gt;\r\n              &lt;MetaDataC [rest of string was truncated]&quot;;.\r\n             </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods.DllFileExtension\">\r\n            <summary>\r\n            The file extension used for dynamic link libraries.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods.ConfigFileExtension\">\r\n            <summary>\r\n            The file extension used for the XML configuration file.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods.XmlConfigFileName\">\r\n            <summary>\r\n            This is the name of the XML configuration file specific to the\r\n            System.Data.SQLite assembly.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods.staticSyncRoot\">\r\n            <summary>\r\n            This lock is used to protect the static _SQLiteNativeModuleFileName,\r\n            _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods.processorArchitecturePlatforms\">\r\n            <summary>\r\n            This dictionary stores the mappings between processor architecture\r\n            names and platform names.  These mappings are now used for two\r\n            purposes.  First, they are used to determine if the assembly code\r\n            base should be used instead of the location, based upon whether one\r\n            or more of the named sub-directories exist within the assembly code\r\n            base.  Second, they are used to assist in loading the appropriate\r\n            SQLite interop assembly into the current process.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.#cctor\">\r\n            <summary>\r\n            For now, this method simply calls the Initialize method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.Initialize\">\r\n            <summary>\r\n            Attempts to initialize this class by pre-loading the native SQLite\r\n            library for the processor architecture of the current process.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName\">\r\n            <summary>\r\n            Queries and returns the XML configuration file name for the assembly\r\n            containing the managed System.Data.SQLite components.\r\n            </summary>\r\n            <returns>\r\n            The XML configuration file name -OR- null if it cannot be determined\r\n            or does not exist.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.GetSettingValue(System.String,System.String)\">\r\n            <summary>\r\n            Queries and returns the value of the specified setting, using the XML\r\n            configuration file and/or the environment variables for the current\r\n            process and/or the current system, when available.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the setting.\r\n            </param>\r\n            <param name=\"default\">\r\n            The value to be returned if the setting has not been set explicitly\r\n            or cannot be determined.\r\n            </param>\r\n            <returns>\r\n            The value of the setting -OR- the default value specified by\r\n            <paramref name=\"default\" /> if it has not been set explicitly or\r\n            cannot be determined.  By default, all references to existing\r\n            environment variables will be expanded to their corresponding values\r\n            within the value to be returned unless either the \"No_Expand\" or\r\n            \"No_Expand_<paramref name=\"name\" />\" environment variable is set [to\r\n            anything].\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory\">\r\n            <summary>\r\n            Queries and returns the directory for the assembly currently being\r\n            executed.\r\n            </summary>\r\n            <returns>\r\n            The directory for the assembly currently being executed -OR- null if\r\n            it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods.PROCESSOR_ARCHITECTURE\">\r\n            <summary>\r\n            The name of the environment variable containing the processor\r\n            architecture of the current process.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.LoadLibrary(System.String)\">\r\n            <summary>\r\n            This is the P/Invoke method that wraps the native Win32 LoadLibrary\r\n            function.  See the MSDN documentation for full details on what it\r\n            does.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The name of the executable library.\r\n            </param>\r\n            <returns>\r\n            The native module handle upon success -OR- IntPtr.Zero on failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods._SQLiteNativeModuleFileName\">\r\n            <summary>\r\n            The native module file name for the native SQLite library or null.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.UnsafeNativeMethods._SQLiteNativeModuleHandle\">\r\n            <summary>\r\n            The native module handle for the native SQLite library or the value\r\n            IntPtr.Zero.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.SearchForDirectory(System.String@,System.String@)\">\r\n            <summary>\r\n            Searches for the native SQLite library in the directory containing\r\n            the assembly currently being executed as well as the base directory\r\n            for the current application domain.\r\n            </summary>\r\n            <param name=\"baseDirectory\">\r\n            Upon success, this parameter will be modified to refer to the base\r\n            directory containing the native SQLite library.\r\n            </param>\r\n            <param name=\"processorArchitecture\">\r\n            Upon success, this parameter will be modified to refer to the name\r\n            of the immediate directory (i.e. the offset from the base directory)\r\n            containing the native SQLite library.\r\n            </param>\r\n            <returns>\r\n            Non-zero (success) if the native SQLite library was found; otherwise,\r\n            zero (failure).\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.GetBaseDirectory\">\r\n            <summary>\r\n            Queries and returns the base directory of the current application\r\n            domain.\r\n            </summary>\r\n            <returns>\r\n            The base directory for the current application domain -OR- null if it\r\n            cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.FixUpDllFileName(System.String)\">\r\n            <summary>\r\n            Determines if the dynamic link library file name requires a suffix\r\n            and adds it if necessary.\r\n            </summary>\r\n            <param name=\"fileName\">\r\n            The original dynamic link library file name to inspect.\r\n            </param>\r\n            <returns>\r\n            The dynamic link library file name, possibly modified to include an\r\n            extension.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.GetProcessorArchitecture\">\r\n            <summary>\r\n            Queries and returns the processor architecture of the current\r\n            process.\r\n            </summary>\r\n            <returns>\r\n            The processor architecture of the current process -OR- null if it\r\n            cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.GetPlatformName(System.String)\">\r\n            <summary>\r\n            Given the processor architecture, returns the name of the platform.\r\n            </summary>\r\n            <param name=\"processorArchitecture\">\r\n            The processor architecture to be translated to a platform name.\r\n            </param>\r\n            <returns>\r\n            The platform name for the specified processor architecture -OR- null\r\n            if it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.UnsafeNativeMethods.PreLoadSQLiteDll(System.String,System.String,System.String@,System.IntPtr@)\">\r\n            <summary>\r\n            Attempts to load the native SQLite library based on the specified\r\n            directory and processor architecture.\r\n            </summary>\r\n            <param name=\"baseDirectory\">\r\n            The base directory to use, null for default (the base directory of\r\n            the current application domain).  This directory should contain the\r\n            processor architecture specific sub-directories.\r\n            </param>\r\n            <param name=\"processorArchitecture\">\r\n            The requested processor architecture, null for default (the\r\n            processor architecture of the current process).  This caller should\r\n            almost always specify null for this parameter.\r\n            </param>\r\n            <param name=\"nativeModuleFileName\">\r\n            The candidate native module file name to load will be stored here,\r\n            if necessary.\r\n            </param>\r\n            <param name=\"nativeModuleHandle\">\r\n            The native module handle as returned by LoadLibrary will be stored\r\n            here, if necessary.  This value will be IntPtr.Zero if the call to\r\n            LoadLibrary fails.\r\n            </param>\r\n            <returns>\r\n            Non-zero if the native module was loaded successfully; otherwise,\r\n            zero.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteContext\">\r\n            <summary>\r\n            This class represents a context from the SQLite core library that can\r\n            be passed to the sqlite3_result_*() and associated functions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.ISQLiteNativeHandle\">\r\n            <summary>\r\n            This interface represents a native handle provided by the SQLite core\r\n            library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.ISQLiteNativeHandle.NativeHandle\">\r\n            <summary>\r\n            The native handle value.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteContext.pContext\">\r\n            <summary>\r\n            The native context handle.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.#ctor(System.IntPtr)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified native\r\n            context handle.\r\n            </summary>\r\n            <param name=\"pContext\">\r\n            The native context handle to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetNull\">\r\n            <summary>\r\n            Sets the context result to NULL.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetDouble(System.Double)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.Double\"/>\r\n            value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Double\"/> value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetInt(System.Int32)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.Int32\"/>\r\n            value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Int32\"/> value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetInt64(System.Int64)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.Int64\"/>\r\n            value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Int64\"/> value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetString(System.String)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.String\"/>\r\n            value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.String\"/> value to use.  This value will be\r\n            converted to the UTF-8 encoding prior to being used.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetError(System.String)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.String\"/>\r\n            value containing an error message.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.String\"/> value containing the error message text.\r\n            This value will be converted to the UTF-8 encoding prior to being\r\n            used.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetErrorCode(System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/>\r\n            value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetErrorTooBig\">\r\n            <summary>\r\n            Sets the context result to contain the error code SQLITE_TOOBIG.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetErrorNoMemory\">\r\n            <summary>\r\n            Sets the context result to contain the error code SQLITE_NOMEM.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetBlob(System.Byte[])\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.Byte\"/> array\r\n            value.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Byte\"/> array value to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetZeroBlob(System.Int32)\">\r\n            <summary>\r\n            Sets the context result to a BLOB of zeros of the specified size.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The number of zero bytes to use for the BLOB context result.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteContext.SetValue(System.Data.SQLite.SQLiteValue)\">\r\n            <summary>\r\n            Sets the context result to the specified <see cref=\"T:System.Data.SQLite.SQLiteValue\"/>.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteContext.NativeHandle\">\r\n            <summary>\r\n            Returns the underlying SQLite native handle associated with this\r\n            object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteValue\">\r\n            <summary>\r\n            This class represents a value from the SQLite core library that can be\r\n            passed to the sqlite3_value_*() and associated functions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteValue.pValue\">\r\n            <summary>\r\n            The native value handle.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.#ctor(System.IntPtr)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified native\r\n            value handle.\r\n            </summary>\r\n            <param name=\"pValue\">\r\n            The native value handle to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.PreventNativeAccess\">\r\n            <summary>\r\n            Invalidates the native value handle, thereby preventing further\r\n            access to it from this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.ArrayFromSizeAndIntPtr(System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Converts a logical array of native pointers to native sqlite3_value\r\n            structures into a managed array of <see cref=\"T:System.Data.SQLite.SQLiteValue\"/>\r\n            object instances.\r\n            </summary>\r\n            <param name=\"argc\">\r\n            The number of elements in the logical array of native sqlite3_value\r\n            structures.\r\n            </param>\r\n            <param name=\"argv\">\r\n            The native pointer to the logical array of native sqlite3_value\r\n            structures to convert.\r\n            </param>\r\n            <returns>\r\n            The managed array of <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> object instances or\r\n            null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetTypeAffinity\">\r\n            <summary>\r\n            Gets and returns the type affinity associated with this value.\r\n            </summary>\r\n            <returns>\r\n            The type affinity associated with this value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetBytes\">\r\n            <summary>\r\n            Gets and returns the number of bytes associated with this value, if\r\n            it refers to a UTF-8 encoded string.\r\n            </summary>\r\n            <returns>\r\n            The number of bytes associated with this value.  The returned value\r\n            may be zero.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetInt\">\r\n            <summary>\r\n            Gets and returns the <see cref=\"T:System.Int32\"/> associated with this\r\n            value.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Int32\"/> associated with this value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetInt64\">\r\n            <summary>\r\n            Gets and returns the <see cref=\"T:System.Int64\"/> associated with\r\n            this value.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Int64\"/> associated with this value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetDouble\">\r\n            <summary>\r\n            Gets and returns the <see cref=\"T:System.Double\"/> associated with this\r\n            value.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Double\"/> associated with this value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetString\">\r\n            <summary>\r\n            Gets and returns the <see cref=\"T:System.String\"/> associated with this\r\n            value.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.String\"/> associated with this value.  The value is\r\n            converted from the UTF-8 encoding prior to being returned.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.GetBlob\">\r\n            <summary>\r\n            Gets and returns the <see cref=\"T:System.Byte\"/> array associated with this\r\n            value.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Byte\"/> array associated with this value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteValue.Persist\">\r\n            <summary>\r\n            Uses the native value handle to obtain and store the managed value\r\n            for this object instance, thus saving it for later use.  The type\r\n            of the managed value is determined by the type affinity of the\r\n            native value.  If the type affinity is not recognized by this\r\n            method, no work is done and false is returned.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if the native value was persisted successfully.\r\n            </returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteValue.NativeHandle\">\r\n            <summary>\r\n            Returns the underlying SQLite native handle associated with this\r\n            object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteValue.Persisted\">\r\n            <summary>\r\n            Returns non-zero if the native SQLite value has been successfully\r\n            persisted as a managed value within this object instance (i.e. the\r\n            <see cref=\"P:System.Data.SQLite.SQLiteValue.Value\"/> property may then be read successfully).\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteValue.Value\">\r\n            <summary>\r\n            If the managed value for this object instance is available (i.e. it\r\n            has been previously persisted via the <see cref=\"M:System.Data.SQLite.SQLiteValue.Persist\"/>) method,\r\n            that value is returned; otherwise, an exception is thrown.  The\r\n            returned value may be null.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndexConstraintOp\">\r\n            <summary>\r\n            These are the allowed values for the operators that are part of a\r\n            constraint term in the WHERE clause of a query that uses a virtual\r\n            table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintOp.EqualTo\">\r\n            <summary>\r\n            This value represents the equality operator.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintOp.GreaterThan\">\r\n            <summary>\r\n            This value represents the greater than operator.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintOp.LessThanOrEqualTo\">\r\n            <summary>\r\n            This value represents the less than or equal to operator.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintOp.LessThan\">\r\n            <summary>\r\n            This value represents the less than operator.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintOp.GreaterThanOrEqualTo\">\r\n            <summary>\r\n            This value represents the greater than or equal to operator.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintOp.Match\">\r\n            <summary>\r\n            This value represents the MATCH operator.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndexConstraint\">\r\n            <summary>\r\n            This class represents the native sqlite3_index_constraint structure\r\n            from the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexConstraint.#ctor(System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_constraint)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified native\r\n            sqlite3_index_constraint structure.\r\n            </summary>\r\n            <param name=\"constraint\">\r\n            The native sqlite3_index_constraint structure to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexConstraint.#ctor(System.Int32,System.Data.SQLite.SQLiteIndexConstraintOp,System.Byte,System.Int32)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified field\r\n            values.\r\n            </summary>\r\n            <param name=\"iColumn\">\r\n            Column on left-hand side of constraint.\r\n            </param>\r\n            <param name=\"op\">\r\n            Constraint operator (<see cref=\"T:System.Data.SQLite.SQLiteIndexConstraintOp\"/>).\r\n            </param>\r\n            <param name=\"usable\">\r\n            True if this constraint is usable.\r\n            </param>\r\n            <param name=\"iTermOffset\">\r\n            Used internally - <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/>\r\n            should ignore.\r\n            </param>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraint.iColumn\">\r\n            <summary>\r\n            Column on left-hand side of constraint.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraint.op\">\r\n            <summary>\r\n            Constraint operator (<see cref=\"T:System.Data.SQLite.SQLiteIndexConstraintOp\"/>).\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraint.usable\">\r\n            <summary>\r\n            True if this constraint is usable.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraint.iTermOffset\">\r\n            <summary>\r\n            Used internally - <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/>\r\n            should ignore.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndexOrderBy\">\r\n            <summary>\r\n            This class represents the native sqlite3_index_orderby structure from\r\n            the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexOrderBy.#ctor(System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_orderby)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified native\r\n            sqlite3_index_orderby structure.\r\n            </summary>\r\n            <param name=\"orderBy\">\r\n            The native sqlite3_index_orderby structure to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexOrderBy.#ctor(System.Int32,System.Byte)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified field\r\n            values.\r\n            </summary>\r\n            <param name=\"iColumn\">\r\n            Column number.\r\n            </param>\r\n            <param name=\"desc\">\r\n            True for DESC.  False for ASC.\r\n            </param>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexOrderBy.iColumn\">\r\n            <summary>\r\n            Column number.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexOrderBy.desc\">\r\n            <summary>\r\n            True for DESC.  False for ASC.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndexConstraintUsage\">\r\n            <summary>\r\n            This class represents the native sqlite3_index_constraint_usage\r\n            structure from the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexConstraintUsage.#ctor(System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_constraint_usage)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified native\r\n            sqlite3_index_constraint_usage structure.\r\n            </summary>\r\n            <param name=\"constraintUsage\">\r\n            The native sqlite3_index_constraint_usage structure to use.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexConstraintUsage.#ctor(System.Int32,System.Byte)\">\r\n            <summary>\r\n            Constructs an instance of this class using the specified field\r\n            values.\r\n            </summary>\r\n            <param name=\"argvIndex\">\r\n            If greater than 0, constraint is part of argv to xFilter.\r\n            </param>\r\n            <param name=\"omit\">\r\n            Do not code a test for this constraint.\r\n            </param>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintUsage.argvIndex\">\r\n            <summary>\r\n            If greater than 0, constraint is part of argv to xFilter.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteIndexConstraintUsage.omit\">\r\n            <summary>\r\n            Do not code a test for this constraint.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndexInputs\">\r\n            <summary>\r\n            This class represents the various inputs provided by the SQLite core\r\n            library to the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexInputs.#ctor(System.Int32,System.Int32)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"nConstraint\">\r\n            The number of <see cref=\"T:System.Data.SQLite.SQLiteIndexConstraint\"/> instances to\r\n            pre-allocate space for.\r\n            </param>\r\n            <param name=\"nOrderBy\">\r\n            The number of <see cref=\"T:System.Data.SQLite.SQLiteIndexOrderBy\"/> instances to\r\n            pre-allocate space for.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexInputs.Constraints\">\r\n            <summary>\r\n            An array of <see cref=\"T:System.Data.SQLite.SQLiteIndexConstraint\"/> object instances,\r\n            each containing information supplied by the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexInputs.OrderBys\">\r\n            <summary>\r\n            An array of <see cref=\"T:System.Data.SQLite.SQLiteIndexOrderBy\"/> object instances,\r\n            each containing information supplied by the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndexOutputs\">\r\n            <summary>\r\n            This class represents the various outputs provided to the SQLite core\r\n            library by the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexOutputs.#ctor(System.Int32)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"nConstraint\">\r\n            The number of <see cref=\"T:System.Data.SQLite.SQLiteIndexConstraintUsage\"/> instances\r\n            to pre-allocate space for.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndexOutputs.CanUseEstimatedRows\">\r\n            <summary>\r\n            Determines if the native estimatedRows field can be used, based on\r\n            the available version of the SQLite core library.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if the <see cref=\"P:System.Data.SQLite.SQLiteIndexOutputs.EstimatedRows\"/> property is supported\r\n            by the SQLite core library.\r\n            </returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.ConstraintUsages\">\r\n            <summary>\r\n            An array of <see cref=\"T:System.Data.SQLite.SQLiteIndexConstraintUsage\"/> object\r\n            instances, each containing information to be supplied to the SQLite\r\n            core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.IndexNumber\">\r\n            <summary>\r\n            Number used to help identify the selected index.  This value will\r\n            later be provided to the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/>\r\n            method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.IndexString\">\r\n            <summary>\r\n            String used to help identify the selected index.  This value will\r\n            later be provided to the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/>\r\n            method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.NeedToFreeIndexString\">\r\n            <summary>\r\n            Non-zero if the index string must be freed by the SQLite core\r\n            library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.OrderByConsumed\">\r\n            <summary>\r\n            True if output is already ordered.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.EstimatedCost\">\r\n            <summary>\r\n            Estimated cost of using this index.  Using a null value here\r\n            indicates that a default estimated cost value should be used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndexOutputs.EstimatedRows\">\r\n            <summary>\r\n            Estimated number of rows returned.  Using a null value here\r\n            indicates that a default estimated rows value should be used.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteIndex\">\r\n            <summary>\r\n            This class represents the various inputs and outputs used with the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndex.#ctor(System.Int32,System.Int32)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"nConstraint\">\r\n            The number of <see cref=\"T:System.Data.SQLite.SQLiteIndexConstraint\"/> (and\r\n            <see cref=\"T:System.Data.SQLite.SQLiteIndexConstraintUsage\"/>) instances to\r\n            pre-allocate space for.\r\n            </param>\r\n            <param name=\"nOrderBy\">\r\n            The number of <see cref=\"T:System.Data.SQLite.SQLiteIndexOrderBy\"/> instances to\r\n            pre-allocate space for.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndex.FromIntPtr(System.IntPtr,System.Data.SQLite.SQLiteIndex@)\">\r\n            <summary>\r\n            Converts a native pointer to a native sqlite3_index_info structure\r\n            into a new <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance.\r\n            </summary>\r\n            <param name=\"pIndex\">\r\n            The native pointer to the native sqlite3_index_info structure to\r\n            convert.\r\n            </param>\r\n            <param name=\"index\">\r\n            Upon success, this parameter will be modified to contain the newly\r\n            created <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteIndex.ToIntPtr(System.Data.SQLite.SQLiteIndex,System.IntPtr)\">\r\n            <summary>\r\n            Populates the outputs of a pre-allocated native sqlite3_index_info\r\n            structure using an existing <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object\r\n            instance.\r\n            </summary>\r\n            <param name=\"index\">\r\n            The existing <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance containing\r\n            the output data to use.\r\n            </param>\r\n            <param name=\"pIndex\">\r\n            The native pointer to the pre-allocated native sqlite3_index_info\r\n            structure.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndex.Inputs\">\r\n            <summary>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndexInputs\"/> object instance containing\r\n            the inputs to the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/>\r\n            method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteIndex.Outputs\">\r\n            <summary>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndexOutputs\"/> object instance containing\r\n            the outputs from the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/>\r\n            method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteVirtualTable\">\r\n            <summary>\r\n            This class represents a managed virtual table implementation.  It is\r\n            not sealed and should be used as the base class for any user-defined\r\n            virtual table classes implemented in managed code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTable.ModuleNameIndex\">\r\n            <summary>\r\n            The index within the array of strings provided to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> and\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> methods containing the\r\n            name of the module implementing this virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTable.DatabaseNameIndex\">\r\n            <summary>\r\n            The index within the array of strings provided to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> and\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> methods containing the\r\n            name of the database containing this virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTable.TableNameIndex\">\r\n            <summary>\r\n            The index within the array of strings provided to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> and\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> methods containing the\r\n            name of the virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.#ctor(System.String[])\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"arguments\">\r\n            The original array of strings provided to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> and\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> methods.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.BestIndex(System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            This method should normally be used by the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method in order to\r\n            perform index selection based on the constraints provided by the\r\n            SQLite core library.\r\n            </summary>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance containing all the\r\n            data for the inputs and outputs relating to index selection.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.Rename(System.String)\">\r\n            <summary>\r\n            Attempts to record the renaming of the virtual table associated\r\n            with this object instance.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The new name for the virtual table.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.Dispose\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteVirtualTable.Dispose\"/> method.  Zero if this method is being called\r\n            from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTable.Finalize\">\r\n            <summary>\r\n            Finalizes this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTable.Arguments\">\r\n            <summary>\r\n            The original array of strings provided to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> and\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> methods.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTable.ModuleName\">\r\n            <summary>\r\n            The name of the module implementing this virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTable.DatabaseName\">\r\n            <summary>\r\n            The name of the database containing this virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTable.TableName\">\r\n            <summary>\r\n            The name of the virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTable.Index\">\r\n            <summary>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance containing all the\r\n            data for the inputs and outputs relating to the most recent index\r\n            selection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTable.NativeHandle\">\r\n            <summary>\r\n            Returns the underlying SQLite native handle associated with this\r\n            object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\">\r\n            <summary>\r\n            This class represents a managed virtual table cursor implementation.\r\n            It is not sealed and should be used as the base class for any\r\n            user-defined virtual table cursor classes implemented in managed code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTableCursor.InvalidRowIndex\">\r\n            <summary>\r\n            This value represents an invalid integer row sequence number.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTableCursor.rowIndex\">\r\n            <summary>\r\n            The field holds the integer row sequence number for the current row\r\n            pointed to by this cursor object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.#ctor(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this object instance.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.#ctor\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.TryPersistValues(System.Data.SQLite.SQLiteValue[])\">\r\n            <summary>\r\n            Attempts to persist the specified <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> object\r\n            instances in order to make them available after the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method returns.\r\n            </summary>\r\n            <param name=\"values\">\r\n            The array of <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> object instances to be\r\n            persisted.\r\n            </param>\r\n            <returns>\r\n            The number of <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> object instances that were\r\n            successfully persisted.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\">\r\n            <summary>\r\n            This method should normally be used by the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method in order to\r\n            perform filtering of the result rows and/or to record the filtering\r\n            criteria provided by the SQLite core library.\r\n            </summary>\r\n            <param name=\"indexNumber\">\r\n            Number used to help identify the selected index.\r\n            </param>\r\n            <param name=\"indexString\">\r\n            String used to help identify the selected index.\r\n            </param>\r\n            <param name=\"values\">\r\n            The values corresponding to each column in the selected index.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.GetRowIndex\">\r\n            <summary>\r\n            Determines the integer row sequence number for the current row.\r\n            </summary>\r\n            <returns>\r\n            The integer row sequence number for the current row -OR- zero if\r\n            it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.NextRowIndex\">\r\n            <summary>\r\n            Adjusts the integer row sequence number so that it refers to the\r\n            next row.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Dispose\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Dispose\"/> method.  Zero if this method is being called\r\n            from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Finalize\">\r\n            <summary>\r\n            Finalizes this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursor.Table\">\r\n            <summary>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursor.IndexNumber\">\r\n            <summary>\r\n            Number used to help identify the selected index.  This value will\r\n            be set via the <see cref=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursor.IndexString\">\r\n            <summary>\r\n            String used to help identify the selected index.  This value will\r\n            be set via the <see cref=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursor.Values\">\r\n            <summary>\r\n            The values used to filter the rows returned via this cursor object\r\n            instance.  This value will be set via the <see cref=\"M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/>\r\n            method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursor.NativeHandle\">\r\n            <summary>\r\n            Returns the underlying SQLite native handle associated with this\r\n            object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.ISQLiteNativeModule\">\r\n            <summary>\r\n            This interface represents a virtual table implementation written in\r\n            native code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            <para>\r\n            This method is called to create a new instance of a virtual table\r\n            in response to a CREATE VIRTUAL TABLE statement. The db parameter\r\n            is a pointer to the SQLite database connection that is executing\r\n            the CREATE VIRTUAL TABLE statement. The pAux argument is the copy\r\n            of the client data pointer that was the fourth argument to the\r\n            sqlite3_create_module() or sqlite3_create_module_v2() call that\r\n            registered the virtual table module. The argv parameter is an\r\n            array of argc pointers to null terminated strings. The first\r\n            string, argv[0], is the name of the module being invoked. The\r\n            module name is the name provided as the second argument to\r\n            sqlite3_create_module() and as the argument to the USING clause of\r\n            the CREATE VIRTUAL TABLE statement that is running. The second,\r\n            argv[1], is the name of the database in which the new virtual table\r\n            is being created. The database name is \"main\" for the primary\r\n            database, or \"temp\" for TEMP database, or the name given at the\r\n            end of the ATTACH statement for attached databases. The third\r\n            element of the array, argv[2], is the name of the new virtual\r\n            table, as specified following the TABLE keyword in the CREATE\r\n            VIRTUAL TABLE statement. If present, the fourth and subsequent\r\n            strings in the argv[] array report the arguments to the module name\r\n            in the CREATE VIRTUAL TABLE statement.\r\n            </para>\r\n            <para>\r\n            The job of this method is to construct the new virtual table object\r\n            (an sqlite3_vtab object) and return a pointer to it in *ppVTab.\r\n            </para>\r\n            <para>\r\n            As part of the task of creating a new sqlite3_vtab structure, this\r\n            method must invoke sqlite3_declare_vtab() to tell the SQLite core\r\n            about the columns and datatypes in the virtual table. The\r\n            sqlite3_declare_vtab() API has the following prototype:\r\n            </para>\r\n            <para>\r\n            <code>\r\n            int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable)\r\n            </code>\r\n            </para>\r\n            <para>\r\n            The first argument to sqlite3_declare_vtab() must be the same\r\n            database connection pointer as the first parameter to this method.\r\n            The second argument to sqlite3_declare_vtab() must a\r\n            zero-terminated UTF-8 string that contains a well-formed CREATE\r\n            TABLE statement that defines the columns in the virtual table and\r\n            their data types. The name of the table in this CREATE TABLE\r\n            statement is ignored, as are all constraints. Only the column names\r\n            and datatypes matter. The CREATE TABLE statement string need not to\r\n            be held in persistent memory. The string can be deallocated and/or\r\n            reused as soon as the sqlite3_declare_vtab() routine returns.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            The native database connection handle.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            The original native pointer value that was provided to the\r\n            sqlite3_create_module(), sqlite3_create_module_v2() or\r\n            sqlite3_create_disposable_module() functions.\r\n            </param>\r\n            <param name=\"argc\">\r\n            The number of arguments from the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"argv\">\r\n            The array of string arguments from the CREATE VIRTUAL TABLE\r\n            statement.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            Upon success, this parameter must be modified to point to the newly\r\n            created native sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"pError\">\r\n            Upon failure, this parameter must be modified to point to the error\r\n            message, with the underlying memory having been obtained from the\r\n            sqlite3_malloc() function.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            <para>\r\n            The xConnect method is very similar to xCreate. It has the same\r\n            parameters and constructs a new sqlite3_vtab structure just like\r\n            xCreate. And it must also call sqlite3_declare_vtab() like xCreate.\r\n            </para>\r\n            <para>\r\n            The difference is that xConnect is called to establish a new\r\n            connection to an existing virtual table whereas xCreate is called\r\n            to create a new virtual table from scratch.\r\n            </para>\r\n            <para>\r\n            The xCreate and xConnect methods are only different when the\r\n            virtual table has some kind of backing store that must be\r\n            initialized the first time the virtual table is created. The\r\n            xCreate method creates and initializes the backing store. The\r\n            xConnect method just connects to an existing backing store.\r\n            </para>\r\n            <para>\r\n            As an example, consider a virtual table implementation that\r\n            provides read-only access to existing comma-separated-value (CSV)\r\n            files on disk. There is no backing store that needs to be created\r\n            or initialized for such a virtual table (since the CSV files\r\n            already exist on disk) so the xCreate and xConnect methods will be\r\n            identical for that module.\r\n            </para>\r\n            <para>\r\n            Another example is a virtual table that implements a full-text\r\n            index. The xCreate method must create and initialize data\r\n            structures to hold the dictionary and posting lists for that index.\r\n            The xConnect method, on the other hand, only has to locate and use\r\n            an existing dictionary and posting lists that were created by a\r\n            prior xCreate call.\r\n            </para>\r\n            <para>\r\n            The xConnect method must return SQLITE_OK if it is successful in\r\n            creating the new virtual table, or SQLITE_ERROR if it is not\r\n            successful. If not successful, the sqlite3_vtab structure must not\r\n            be allocated. An error message may optionally be returned in *pzErr\r\n            if unsuccessful. Space to hold the error message string must be\r\n            allocated using an SQLite memory allocation function like\r\n            sqlite3_malloc() or sqlite3_mprintf() as the SQLite core will\r\n            attempt to free the space using sqlite3_free() after the error has\r\n            been reported up to the application.\r\n            </para>\r\n            <para>\r\n            The xConnect method is required for every virtual table\r\n            implementation, though the xCreate and xConnect pointers of the\r\n            sqlite3_module object may point to the same function the virtual\r\n            table does not need to initialize backing store.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            The native database connection handle.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            The original native pointer value that was provided to the\r\n            sqlite3_create_module(), sqlite3_create_module_v2() or\r\n            sqlite3_create_disposable_module() functions.\r\n            </param>\r\n            <param name=\"argc\">\r\n            The number of arguments from the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"argv\">\r\n            The array of string arguments from the CREATE VIRTUAL TABLE\r\n            statement.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            Upon success, this parameter must be modified to point to the newly\r\n            created native sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"pError\">\r\n            Upon failure, this parameter must be modified to point to the error\r\n            message, with the underlying memory having been obtained from the\r\n            sqlite3_malloc() function.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            SQLite uses the xBestIndex method of a virtual table module to\r\n            determine the best way to access the virtual table. The xBestIndex\r\n            method has a prototype like this:\r\n            </para>\r\n            <code>\r\n            int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);\r\n            </code>\r\n            <para>\r\n            The SQLite core communicates with the xBestIndex method by filling\r\n            in certain fields of the sqlite3_index_info structure and passing a\r\n            pointer to that structure into xBestIndex as the second parameter.\r\n            The xBestIndex method fills out other fields of this structure\r\n            which forms the reply. The sqlite3_index_info structure looks like\r\n            this:\r\n            </para>\r\n            <code>\r\n             struct sqlite3_index_info {\r\n               /* Inputs */\r\n               const int nConstraint;   /* Number of entries in aConstraint */\r\n               const struct sqlite3_index_constraint {\r\n                  int iColumn;          /* Column on left-hand side of\r\n                                         * constraint */\r\n                  unsigned char op;     /* Constraint operator */\r\n                  unsigned char usable; /* True if this constraint is usable */\r\n                  int iTermOffset;      /* Used internally - xBestIndex should\r\n                                         * ignore */\r\n               } *const aConstraint;    /* Table of WHERE clause constraints */\r\n               const int nOrderBy;      /* Number of terms in the ORDER BY\r\n                                         * clause */\r\n               const struct sqlite3_index_orderby {\r\n                  int iColumn;          /* Column number */\r\n                  unsigned char desc;   /* True for DESC.  False for ASC. */\r\n               } *const aOrderBy;       /* The ORDER BY clause */\r\n               /* Outputs */\r\n               struct sqlite3_index_constraint_usage {\r\n                 int argvIndex;         /* if greater than zero, constraint is\r\n                                         * part of argv to xFilter */\r\n                 unsigned char omit;    /* Do not code a test for this\r\n                                         * constraint */\r\n               } *const aConstraintUsage;\r\n               int idxNum;              /* Number used to identify the index */\r\n               char *idxStr;            /* String, possibly obtained from\r\n                                         * sqlite3_malloc() */\r\n               int needToFreeIdxStr;    /* Free idxStr using sqlite3_free() if\r\n                                         * true */\r\n               int orderByConsumed;     /* True if output is already ordered */\r\n               double estimatedCost;    /* Estimated cost of using this index */\r\n             };\r\n            </code>\r\n            <para>\r\n            In addition, there are some defined constants:\r\n            </para>\r\n            <code>\r\n             #define SQLITE_INDEX_CONSTRAINT_EQ    2\r\n             #define SQLITE_INDEX_CONSTRAINT_GT    4\r\n             #define SQLITE_INDEX_CONSTRAINT_LE    8\r\n             #define SQLITE_INDEX_CONSTRAINT_LT    16\r\n             #define SQLITE_INDEX_CONSTRAINT_GE    32\r\n             #define SQLITE_INDEX_CONSTRAINT_MATCH 64\r\n            </code>\r\n            <para>\r\n            The SQLite core calls the xBestIndex method when it is compiling a\r\n            query that involves a virtual table. In other words, SQLite calls\r\n            this method when it is running sqlite3_prepare() or the equivalent.\r\n            By calling this method, the SQLite core is saying to the virtual\r\n            table that it needs to access some subset of the rows in the\r\n            virtual table and it wants to know the most efficient way to do\r\n            that access. The xBestIndex method replies with information that\r\n            the SQLite core can then use to conduct an efficient search of the\r\n            virtual table.\r\n            </para>\r\n            <para>\r\n            While compiling a single SQL query, the SQLite core might call\r\n            xBestIndex multiple times with different settings in\r\n            sqlite3_index_info. The SQLite core will then select the\r\n            combination that appears to give the best performance.\r\n            </para>\r\n            <para>\r\n            Before calling this method, the SQLite core initializes an instance\r\n            of the sqlite3_index_info structure with information about the\r\n            query that it is currently trying to process. This information\r\n            derives mainly from the WHERE clause and ORDER BY or GROUP BY\r\n            clauses of the query, but also from any ON or USING clauses if the\r\n            query is a join. The information that the SQLite core provides to\r\n            the xBestIndex method is held in the part of the structure that is\r\n            marked as \"Inputs\". The \"Outputs\" section is initialized to zero.\r\n            </para>\r\n            <para>\r\n            The information in the sqlite3_index_info structure is ephemeral\r\n            and may be overwritten or deallocated as soon as the xBestIndex\r\n            method returns. If the xBestIndex method needs to remember any part\r\n            of the sqlite3_index_info structure, it should make a copy. Care\r\n            must be take to store the copy in a place where it will be\r\n            deallocated, such as in the idxStr field with needToFreeIdxStr set\r\n            to 1.\r\n            </para>\r\n            <para>\r\n            Note that xBestIndex will always be called before xFilter, since\r\n            the idxNum and idxStr outputs from xBestIndex are required inputs\r\n            to xFilter. However, there is no guarantee that xFilter will be\r\n            called following a successful xBestIndex.\r\n            </para>\r\n            <para>\r\n            The xBestIndex method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            <para>\r\n            2.3.1 Inputs\r\n            </para>\r\n            <para>\r\n            The main thing that the SQLite core is trying to communicate to the\r\n            virtual table is the constraints that are available to limit the\r\n            number of rows that need to be searched. The aConstraint[] array\r\n            contains one entry for each constraint. There will be exactly\r\n            nConstraint entries in that array.\r\n            </para>\r\n            <para>\r\n            Each constraint will correspond to a term in the WHERE clause or in\r\n            a USING or ON clause that is of the form\r\n            </para>\r\n            <code>\r\n                column OP EXPR\r\n            </code>\r\n            <para>\r\n            Where \"column\" is a column in the virtual table, OP is an operator\r\n            like \"=\" or \"&lt;\", and EXPR is an arbitrary expression. So, for\r\n            example, if the WHERE clause contained a term like this:\r\n            </para>\r\n            <code>\r\n                     a = 5\r\n            </code>\r\n            <para>\r\n            Then one of the constraints would be on the \"a\" column with\r\n            operator \"=\" and an expression of \"5\". Constraints need not have a\r\n            literal representation of the WHERE clause. The query optimizer\r\n            might make transformations to the WHERE clause in order to extract\r\n            as many constraints as it can. So, for example, if the WHERE clause\r\n            contained something like this:\r\n            </para>\r\n            <code>\r\n                     x BETWEEN 10 AND 100 AND 999&gt;y\r\n            </code>\r\n            <para>\r\n            The query optimizer might translate this into three separate\r\n            constraints:\r\n            </para>\r\n            <code>\r\n                     x &gt;= 10\r\n                     x &lt;= 100\r\n                     y &lt; 999\r\n            </code>\r\n            <para>\r\n            For each constraint, the aConstraint[].iColumn field indicates\r\n            which column appears on the left-hand side of the constraint. The\r\n            first column of the virtual table is column 0. The rowid of the\r\n            virtual table is column -1. The aConstraint[].op field indicates\r\n            which operator is used. The SQLITE_INDEX_CONSTRAINT_* constants map\r\n            integer constants into operator values. Columns occur in the order\r\n            they were defined by the call to sqlite3_declare_vtab() in the\r\n            xCreate or xConnect method. Hidden columns are counted when\r\n            determining the column index.\r\n            </para>\r\n            <para>\r\n            The aConstraint[] array contains information about all constraints\r\n            that apply to the virtual table. But some of the constraints might\r\n            not be usable because of the way tables are ordered in a join. The\r\n            xBestIndex method must therefore only consider constraints that\r\n            have an aConstraint[].usable flag which is true.\r\n            </para>\r\n            <para>\r\n            In addition to WHERE clause constraints, the SQLite core also tells\r\n            the xBestIndex method about the ORDER BY clause. (In an aggregate\r\n            query, the SQLite core might put in GROUP BY clause information in\r\n            place of the ORDER BY clause information, but this fact should not\r\n            make any difference to the xBestIndex method.) If all terms of the\r\n            ORDER BY clause are columns in the virtual table, then nOrderBy\r\n            will be the number of terms in the ORDER BY clause and the\r\n            aOrderBy[] array will identify the column for each term in the\r\n            order by clause and whether or not that column is ASC or DESC.\r\n            </para>\r\n            <para>\r\n            2.3.2 Outputs\r\n            </para>\r\n            <para>\r\n            Given all of the information above, the job of the xBestIndex\r\n            method it to figure out the best way to search the virtual table.\r\n            </para>\r\n            <para>\r\n            The xBestIndex method fills the idxNum and idxStr fields with\r\n            information that communicates an indexing strategy to the xFilter\r\n            method. The information in idxNum and idxStr is arbitrary as far as\r\n            the SQLite core is concerned. The SQLite core just copies the\r\n            information through to the xFilter method. Any desired meaning can\r\n            be assigned to idxNum and idxStr as long as xBestIndex and xFilter\r\n            agree on what that meaning is.\r\n            </para>\r\n            <para>\r\n            The idxStr value may be a string obtained from an SQLite memory\r\n            allocation function such as sqlite3_mprintf(). If this is the case,\r\n            then the needToFreeIdxStr flag must be set to true so that the\r\n            SQLite core will know to call sqlite3_free() on that string when it\r\n            has finished with it, and thus avoid a memory leak.\r\n            </para>\r\n            <para>\r\n            If the virtual table will output rows in the order specified by the\r\n            ORDER BY clause, then the orderByConsumed flag may be set to true.\r\n            If the output is not automatically in the correct order then\r\n            orderByConsumed must be left in its default false setting. This\r\n            will indicate to the SQLite core that it will need to do a separate\r\n            sorting pass over the data after it comes out of the virtual table.\r\n            </para>\r\n            <para>\r\n            The estimatedCost field should be set to the estimated number of\r\n            disk access operations required to execute this query against the\r\n            virtual table. The SQLite core will often call xBestIndex multiple\r\n            times with different constraints, obtain multiple cost estimates,\r\n            then choose the query plan that gives the lowest estimate.\r\n            </para>\r\n            <para>\r\n            The aConstraintUsage[] array contains one element for each of the\r\n            nConstraint constraints in the inputs section of the\r\n            sqlite3_index_info structure. The aConstraintUsage[] array is used\r\n            by xBestIndex to tell the core how it is using the constraints.\r\n            </para>\r\n            <para>\r\n            The xBestIndex method may set aConstraintUsage[].argvIndex entries\r\n            to values greater than one. Exactly one entry should be set to 1,\r\n            another to 2, another to 3, and so forth up to as many or as few as\r\n            the xBestIndex method wants. The EXPR of the corresponding\r\n            constraints will then be passed in as the argv[] parameters to\r\n            xFilter.\r\n            </para>\r\n            <para>\r\n            For example, if the aConstraint[3].argvIndex is set to 1, then when\r\n            xFilter is called, the argv[0] passed to xFilter will have the EXPR\r\n            value of the aConstraint[3] constraint.\r\n            </para>\r\n            <para>\r\n            By default, the SQLite core double checks all constraints on each\r\n            row of the virtual table that it receives. If such a check is\r\n            redundant, the xBestFilter method can suppress that double-check by\r\n            setting aConstraintUsage[].omit.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"pIndex\">\r\n            The native pointer to the sqlite3_index_info structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method releases a connection to a virtual table. Only the\r\n            sqlite3_vtab object is destroyed. The virtual table is not\r\n            destroyed and any backing store associated with the virtual table\r\n            persists. This method undoes the work of xConnect.\r\n            </para>\r\n            <para>\r\n            This method is a destructor for a connection to the virtual table.\r\n            Contrast this method with xDestroy. The xDestroy is a destructor\r\n            for the entire virtual table.\r\n            </para>\r\n            <para>\r\n            The xDisconnect method is required for every virtual table\r\n            implementation, though it is acceptable for the xDisconnect and\r\n            xDestroy methods to be the same function if that makes sense for\r\n            the particular virtual table.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method releases a connection to a virtual table, just like the\r\n            xDisconnect method, and it also destroys the underlying table\r\n            implementation. This method undoes the work of xCreate.\r\n            </para>\r\n            <para>\r\n            The xDisconnect method is called whenever a database connection\r\n            that uses a virtual table is closed. The xDestroy method is only\r\n            called when a DROP TABLE statement is executed against the virtual\r\n            table.\r\n            </para>\r\n            <para>\r\n            The xDestroy method is required for every virtual table\r\n            implementation, though it is acceptable for the xDisconnect and\r\n            xDestroy methods to be the same function if that makes sense for\r\n            the particular virtual table.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\">\r\n            <summary>\r\n            <para>\r\n            The xOpen method creates a new cursor used for accessing (read\r\n            and/or writing) a virtual table. A successful invocation of this\r\n            method will allocate the memory for the sqlite3_vtab_cursor (or a\r\n            subclass), initialize the new object, and make *ppCursor point to\r\n            the new object. The successful call then returns SQLITE_OK.\r\n            </para>\r\n            <para>\r\n            For every successful call to this method, the SQLite core will\r\n            later invoke the xClose method to destroy the allocated cursor.\r\n            </para>\r\n            <para>\r\n            The xOpen method need not initialize the pVtab field of the\r\n            sqlite3_vtab_cursor structure. The SQLite core will take care of\r\n            that chore automatically.\r\n            </para>\r\n            <para>\r\n            A virtual table implementation must be able to support an arbitrary\r\n            number of simultaneously open cursors.\r\n            </para>\r\n            <para>\r\n            When initially opened, the cursor is in an undefined state. The\r\n            SQLite core will invoke the xFilter method on the cursor prior to\r\n            any attempt to position or read from the cursor.\r\n            </para>\r\n            <para>\r\n            The xOpen method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"pCursor\">\r\n            Upon success, this parameter must be modified to point to the newly\r\n            created native sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            The xClose method closes a cursor previously opened by xOpen. The\r\n            SQLite core will always call xClose once for each cursor opened\r\n            using xOpen.\r\n            </para>\r\n            <para>\r\n            This method must release all resources allocated by the\r\n            corresponding xOpen call. The routine will not be called again even\r\n            if it returns an error. The SQLite core will not use the\r\n            sqlite3_vtab_cursor again after it has been closed.\r\n            </para>\r\n            <para>\r\n            The xClose method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method begins a search of a virtual table. The first argument\r\n            is a cursor opened by xOpen. The next two argument define a\r\n            particular search index previously chosen by xBestIndex. The\r\n            specific meanings of idxNum and idxStr are unimportant as long as\r\n            xFilter and xBestIndex agree on what that meaning is.\r\n            </para>\r\n            <para>\r\n            The xBestIndex function may have requested the values of certain\r\n            expressions using the aConstraintUsage[].argvIndex values of the\r\n            sqlite3_index_info structure. Those values are passed to xFilter\r\n            using the argc and argv parameters.\r\n            </para>\r\n            <para>\r\n            If the virtual table contains one or more rows that match the\r\n            search criteria, then the cursor must be left point at the first\r\n            row. Subsequent calls to xEof must return false (zero). If there\r\n            are no rows match, then the cursor must be left in a state that\r\n            will cause the xEof to return true (non-zero). The SQLite engine\r\n            will use the xColumn and xRowid methods to access that row content.\r\n            The xNext method will be used to advance to the next row.\r\n            </para>\r\n            <para>\r\n            This method must return SQLITE_OK if successful, or an sqlite error\r\n            code if an error occurs.\r\n            </para>\r\n            <para>\r\n            The xFilter method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <param name=\"idxNum\">\r\n            Number used to help identify the selected index.\r\n            </param>\r\n            <param name=\"idxStr\">\r\n            The native pointer to the UTF-8 encoded string containing the\r\n            string used to help identify the selected index.\r\n            </param>\r\n            <param name=\"argc\">\r\n            The number of native pointers to sqlite3_value structures specified\r\n            in <paramref name=\"argv\" />.\r\n            </param>\r\n            <param name=\"argv\">\r\n            An array of native pointers to sqlite3_value structures containing\r\n            filtering criteria for the selected index.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            The xNext method advances a virtual table cursor to the next row of\r\n            a result set initiated by xFilter. If the cursor is already\r\n            pointing at the last row when this routine is called, then the\r\n            cursor no longer points to valid data and a subsequent call to the\r\n            xEof method must return true (non-zero). If the cursor is\r\n            successfully advanced to another row of content, then subsequent\r\n            calls to xEof must return false (zero).\r\n            </para>\r\n            <para>\r\n            This method must return SQLITE_OK if successful, or an sqlite error\r\n            code if an error occurs.\r\n            </para>\r\n            <para>\r\n            The xNext method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            The xEof method must return false (zero) if the specified cursor\r\n            currently points to a valid row of data, or true (non-zero)\r\n            otherwise. This method is called by the SQL engine immediately\r\n            after each xFilter and xNext invocation.\r\n            </para>\r\n            <para>\r\n            The xEof method is required for every virtual table implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <returns>\r\n            Non-zero if no more rows are available; zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            <para>\r\n            The SQLite core invokes this method in order to find the value for\r\n            the N-th column of the current row. N is zero-based so the first\r\n            column is numbered 0. The xColumn method may return its result back\r\n            to SQLite using one of the following interface:\r\n            </para>\r\n            <code>\r\n                sqlite3_result_blob()\r\n                sqlite3_result_double()\r\n                sqlite3_result_int()\r\n                sqlite3_result_int64()\r\n                sqlite3_result_null()\r\n                sqlite3_result_text()\r\n                sqlite3_result_text16()\r\n                sqlite3_result_text16le()\r\n                sqlite3_result_text16be()\r\n                sqlite3_result_zeroblob()\r\n            </code>\r\n            <para>\r\n            If the xColumn method implementation calls none of the functions\r\n            above, then the value of the column defaults to an SQL NULL.\r\n            </para>\r\n            <para>\r\n            To raise an error, the xColumn method should use one of the\r\n            result_text() methods to set the error message text, then return an\r\n            appropriate error code. The xColumn method must return SQLITE_OK on\r\n            success.\r\n            </para>\r\n            <para>\r\n            The xColumn method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <param name=\"pContext\">\r\n            The native pointer to the sqlite3_context structure to be used\r\n            for returning the specified column value to the SQLite core\r\n            library.\r\n            </param>\r\n            <param name=\"index\">\r\n            The zero-based index corresponding to the column containing the\r\n            value to be returned.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\">\r\n            <summary>\r\n            <para>\r\n            A successful invocation of this method will cause *pRowid to be\r\n            filled with the rowid of row that the virtual table cursor pCur is\r\n            currently pointing at. This method returns SQLITE_OK on success. It\r\n            returns an appropriate error code on failure.\r\n            </para>\r\n            <para>\r\n            The xRowid method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            Upon success, this parameter must be modified to contain the unique\r\n            integer row identifier for the current row for the specified cursor.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\">\r\n            <summary>\r\n            <para>\r\n            All changes to a virtual table are made using the xUpdate method.\r\n            This one method can be used to insert, delete, or update.\r\n            </para>\r\n            <para>\r\n            The argc parameter specifies the number of entries in the argv\r\n            array. The value of argc will be 1 for a pure delete operation or\r\n            N+2 for an insert or replace or update where N is the number of\r\n            columns in the table. In the previous sentence, N includes any\r\n            hidden columns.\r\n            </para>\r\n            <para>\r\n            Every argv entry will have a non-NULL value in C but may contain\r\n            the SQL value NULL. In other words, it is always true that\r\n            argv[i]!=0 for i between 0 and argc-1. However, it might be the\r\n            case that sqlite3_value_type(argv[i])==SQLITE_NULL.\r\n            </para>\r\n            <para>\r\n            The argv[0] parameter is the rowid of a row in the virtual table\r\n            to be deleted. If argv[0] is an SQL NULL, then no deletion occurs.\r\n            </para>\r\n            <para>\r\n            The argv[1] parameter is the rowid of a new row to be inserted into\r\n            the virtual table. If argv[1] is an SQL NULL, then the\r\n            implementation must choose a rowid for the newly inserted row.\r\n            Subsequent argv[] entries contain values of the columns of the\r\n            virtual table, in the order that the columns were declared. The\r\n            number of columns will match the table declaration that the\r\n            xConnect or xCreate method made using the sqlite3_declare_vtab()\r\n            call. All hidden columns are included.\r\n            </para>\r\n            <para>\r\n            When doing an insert without a rowid (argc>1, argv[1] is an SQL\r\n            NULL), the implementation must set *pRowid to the rowid of the\r\n            newly inserted row; this will become the value returned by the\r\n            sqlite3_last_insert_rowid() function. Setting this value in all the\r\n            other cases is a harmless no-op; the SQLite engine ignores the\r\n            *pRowid return value if argc==1 or argv[1] is not an SQL NULL.\r\n            </para>\r\n            <para>\r\n            Each call to xUpdate will fall into one of cases shown below. Note\r\n            that references to argv[i] mean the SQL value held within the\r\n            argv[i] object, not the argv[i] object itself.\r\n            </para>\r\n            <code>\r\n                argc = 1\r\n            </code>\r\n            <para>\r\n                    The single row with rowid equal to argv[0] is deleted. No\r\n                    insert occurs.\r\n            </para>\r\n            <code>\r\n                argc > 1\r\n                argv[0] = NULL\r\n            </code>\r\n            <para>\r\n                    A new row is inserted with a rowid argv[1] and column\r\n                    values in argv[2] and following. If argv[1] is an SQL NULL,\r\n                    the a new unique rowid is generated automatically.\r\n            </para>\r\n            <code>\r\n                argc > 1\r\n                argv[0] ? NULL\r\n                argv[0] = argv[1]\r\n            </code>\r\n            <para>\r\n                    The row with rowid argv[0] is updated with new values in\r\n                    argv[2] and following parameters.\r\n            </para>\r\n            <code>\r\n                argc > 1\r\n                argv[0] ? NULL\r\n                argv[0] ? argv[1]\r\n            </code>\r\n            <para>\r\n                    The row with rowid argv[0] is updated with rowid argv[1]\r\n                    and new values in argv[2] and following parameters. This\r\n                    will occur when an SQL statement updates a rowid, as in\r\n                    the statement:\r\n            </para>\r\n            <code>\r\n                        UPDATE table SET rowid=rowid+1 WHERE ...;\r\n            </code>\r\n            <para>\r\n            The xUpdate method must return SQLITE_OK if and only if it is\r\n            successful. If a failure occurs, the xUpdate must return an\r\n            appropriate error code. On a failure, the pVTab->zErrMsg element\r\n            may optionally be replaced with error message text stored in memory\r\n            allocated from SQLite using functions such as sqlite3_mprintf() or\r\n            sqlite3_malloc().\r\n            </para>\r\n            <para>\r\n            If the xUpdate method violates some constraint of the virtual table\r\n            (including, but not limited to, attempting to store a value of the\r\n            wrong datatype, attempting to store a value that is too large or\r\n            too small, or attempting to change a read-only value) then the\r\n            xUpdate must fail with an appropriate error code.\r\n            </para>\r\n            <para>\r\n            There might be one or more sqlite3_vtab_cursor objects open and in\r\n            use on the virtual table instance and perhaps even on the row of\r\n            the virtual table when the xUpdate method is invoked. The\r\n            implementation of xUpdate must be prepared for attempts to delete\r\n            or modify rows of the table out from other existing cursors. If the\r\n            virtual table cannot accommodate such changes, the xUpdate method\r\n            must return an error code.\r\n            </para>\r\n            <para>\r\n            The xUpdate method is optional. If the xUpdate pointer in the\r\n            sqlite3_module for a virtual table is a NULL pointer, then the\r\n            virtual table is read-only.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"argc\">\r\n            The number of new or modified column values contained in\r\n            <paramref name=\"argv\" />.\r\n            </param>\r\n            <param name=\"argv\">\r\n            The array of native pointers to sqlite3_value structures containing\r\n            the new or modified column values, if any.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            Upon success, this parameter must be modified to contain the unique\r\n            integer row identifier for the row that was inserted, if any.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method begins a transaction on a virtual table. This is method\r\n            is optional. The xBegin pointer of sqlite3_module may be NULL.\r\n            </para>\r\n            <para>\r\n            This method is always followed by one call to either the xCommit or\r\n            xRollback method. Virtual table transactions do not nest, so the\r\n            xBegin method will not be invoked more than once on a single\r\n            virtual table without an intervening call to either xCommit or\r\n            xRollback. Multiple calls to other methods can and likely will\r\n            occur in between the xBegin and the corresponding xCommit or\r\n            xRollback.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method signals the start of a two-phase commit on a virtual\r\n            table. This is method is optional. The xSync pointer of\r\n            sqlite3_module may be NULL.\r\n            </para>\r\n            <para>\r\n            This method is only invoked after call to the xBegin method and\r\n            prior to an xCommit or xRollback. In order to implement two-phase\r\n            commit, the xSync method on all virtual tables is invoked prior to\r\n            invoking the xCommit method on any virtual table. If any of the\r\n            xSync methods fail, the entire transaction is rolled back.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method causes a virtual table transaction to commit. This is\r\n            method is optional. The xCommit pointer of sqlite3_module may be\r\n            NULL.\r\n            </para>\r\n            <para>\r\n            A call to this method always follows a prior call to xBegin and\r\n            xSync.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method causes a virtual table transaction to rollback. This is\r\n            method is optional. The xRollback pointer of sqlite3_module may be\r\n            NULL.\r\n            </para>\r\n            <para>\r\n            A call to this method always follows a prior call to xBegin.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\">\r\n            <summary>\r\n            <para>\r\n            This method provides notification that the virtual table\r\n            implementation that the virtual table will be given a new name. If\r\n            this method returns SQLITE_OK then SQLite renames the table. If\r\n            this method returns an error code then the renaming is prevented.\r\n            </para>\r\n            <para>\r\n            The xRename method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"nArg\">\r\n            The number of arguments to the function being sought.\r\n            </param>\r\n            <param name=\"zName\">\r\n            The name of the function being sought.\r\n            </param>\r\n            <param name=\"callback\">\r\n            Upon success, this parameter must be modified to contain the\r\n            delegate responsible for implementing the specified function.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            Upon success, this parameter must be modified to contain the\r\n            native user-data pointer associated with\r\n            <paramref name=\"callback\" />.\r\n            </param>\r\n            <returns>\r\n            Non-zero if the specified function was found; zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            <para>\r\n            This method provides notification that the virtual table\r\n            implementation that the virtual table will be given a new name. If\r\n            this method returns SQLITE_OK then SQLite renames the table. If\r\n            this method returns an error code then the renaming is prevented.\r\n            </para>\r\n            <para>\r\n            The xRename method is required for every virtual table\r\n            implementation.\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"zNew\">\r\n            The native pointer to the UTF-8 encoded string containing the new\r\n            name for the virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            <para>\r\n            These methods provide the virtual table implementation an\r\n            opportunity to implement nested transactions. They are always\r\n            optional and will only be called in SQLite version 3.7.7 and later.\r\n            </para>\r\n            <para>\r\n            When xSavepoint(X,N) is invoked, that is a signal to the virtual\r\n            table X that it should save its current state as savepoint N. A\r\n            subsequent call to xRollbackTo(X,R) means that the state of the\r\n            virtual table should return to what it was when xSavepoint(X,R) was\r\n            last called. The call to xRollbackTo(X,R) will invalidate all\r\n            savepoints with N>R; none of the invalided savepoints will be\r\n            rolled back or released without first being reinitialized by a call\r\n            to xSavepoint(). A call to xRelease(X,M) invalidates all savepoints\r\n            where N>=M.\r\n            </para>\r\n            <para>\r\n            None of the xSavepoint(), xRelease(), or xRollbackTo() methods will\r\n            ever be called except in between calls to xBegin() and either\r\n            xCommit() or xRollback().\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            This is an integer identifier under which the the current state of\r\n            the virtual table should be saved.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            <para>\r\n            These methods provide the virtual table implementation an\r\n            opportunity to implement nested transactions. They are always\r\n            optional and will only be called in SQLite version 3.7.7 and later.\r\n            </para>\r\n            <para>\r\n            When xSavepoint(X,N) is invoked, that is a signal to the virtual\r\n            table X that it should save its current state as savepoint N. A\r\n            subsequent call to xRollbackTo(X,R) means that the state of the\r\n            virtual table should return to what it was when xSavepoint(X,R) was\r\n            last called. The call to xRollbackTo(X,R) will invalidate all\r\n            savepoints with N>R; none of the invalided savepoints will be\r\n            rolled back or released without first being reinitialized by a call\r\n            to xSavepoint(). A call to xRelease(X,M) invalidates all savepoints\r\n            where N>=M.\r\n            </para>\r\n            <para>\r\n            None of the xSavepoint(), xRelease(), or xRollbackTo() methods will\r\n            ever be called except in between calls to xBegin() and either\r\n            xCommit() or xRollback().\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            This is an integer used to indicate that any saved states with an\r\n            identifier greater than or equal to this should be deleted by the\r\n            virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            <para>\r\n            These methods provide the virtual table implementation an\r\n            opportunity to implement nested transactions. They are always\r\n            optional and will only be called in SQLite version 3.7.7 and later.\r\n            </para>\r\n            <para>\r\n            When xSavepoint(X,N) is invoked, that is a signal to the virtual\r\n            table X that it should save its current state as savepoint N. A\r\n            subsequent call to xRollbackTo(X,R) means that the state of the\r\n            virtual table should return to what it was when xSavepoint(X,R) was\r\n            last called. The call to xRollbackTo(X,R) will invalidate all\r\n            savepoints with N>R; none of the invalided savepoints will be\r\n            rolled back or released without first being reinitialized by a call\r\n            to xSavepoint(). A call to xRelease(X,M) invalidates all savepoints\r\n            where N>=M.\r\n            </para>\r\n            <para>\r\n            None of the xSavepoint(), xRelease(), or xRollbackTo() methods will\r\n            ever be called except in between calls to xBegin() and either\r\n            xCommit() or xRollback().\r\n            </para>\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            This is an integer identifier used to specify a specific saved\r\n            state for the virtual table for it to restore itself back to, which\r\n            should also have the effect of deleting all saved states with an\r\n            integer identifier greater than this one.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.ISQLiteManagedModule\">\r\n            <summary>\r\n            This interface represents a virtual table implementation written in\r\n            managed code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            The native user-data pointer associated with this module, as it was\r\n            provided to the SQLite core library when the native module instance\r\n            was created.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            The module name, database name, virtual table name, and all other\r\n            arguments passed to the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"table\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this parameter must be modified to contain an error\r\n            message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            The native user-data pointer associated with this module, as it was\r\n            provided to the SQLite core library when the native module instance\r\n            was created.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            The module name, database name, virtual table name, and all other\r\n            arguments passed to the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"table\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this parameter must be modified to contain an error\r\n            message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance containing all the\r\n            data for the inputs and outputs relating to index selection.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"cursor\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance associated\r\n            with the newly opened virtual table cursor.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"indexNumber\">\r\n            Number used to help identify the selected index.\r\n            </param>\r\n            <param name=\"indexString\">\r\n            String used to help identify the selected index.\r\n            </param>\r\n            <param name=\"values\">\r\n            The values corresponding to each column in the selected index.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <returns>\r\n            Non-zero if no more rows are available; zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"context\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteContext\"/> object instance to be used for\r\n            returning the specified column value to the SQLite core library.\r\n            </param>\r\n            <param name=\"index\">\r\n            The zero-based index corresponding to the column containing the\r\n            value to be returned.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            Upon success, this parameter must be modified to contain the unique\r\n            integer row identifier for the current row for the specified cursor.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"values\">\r\n            The array of <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> object instances containing\r\n            the new or modified column values, if any.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            Upon success, this parameter must be modified to contain the unique\r\n            integer row identifier for the row that was inserted, if any.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments to the function being sought.\r\n            </param>\r\n            <param name=\"name\">\r\n            The name of the function being sought.\r\n            </param>\r\n            <param name=\"function\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance responsible for\r\n            implementing the specified function.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            Upon success, this parameter must be modified to contain the\r\n            native user-data pointer associated with\r\n            <paramref name=\"function\"/>.\r\n            </param>\r\n            <returns>\r\n            Non-zero if the specified function was found; zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"newName\">\r\n            The new name for the virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            This is an integer identifier under which the the current state of\r\n            the virtual table should be saved.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            This is an integer used to indicate that any saved states with an\r\n            identifier greater than or equal to this should be deleted by the\r\n            virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            This is an integer identifier used to specify a specific saved\r\n            state for the virtual table for it to restore itself back to, which\r\n            should also have the effect of deleting all saved states with an\r\n            integer identifier greater than this one.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.ISQLiteManagedModule.Declared\">\r\n            <summary>\r\n            Returns non-zero if the schema for the virtual table has been\r\n            declared.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.ISQLiteManagedModule.Name\">\r\n            <summary>\r\n            Returns the name of the module as it was registered with the SQLite\r\n            core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteMemory\">\r\n            <summary>\r\n            This class contains static methods that are used to allocate,\r\n            manipulate, and free native memory provided by the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)\">\r\n            <summary>\r\n            Allocates at least the specified number of bytes of native memory\r\n            via the SQLite core library sqlite3_malloc() function and returns\r\n            the resulting native pointer.\r\n            </summary>\r\n            <param name=\"size\">\r\n            The number of bytes to allocate.\r\n            </param>\r\n            <returns>\r\n            The native pointer that points to a block of memory of at least the\r\n            specified size -OR- <see cref=\"F:System.IntPtr.Zero\"/> if the memory could\r\n            not be allocated.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMemory.Size(System.IntPtr)\">\r\n            <summary>\r\n            Gets and returns the actual size of the specified memory block that\r\n            was previously obtained from the <see cref=\"M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pMemory\">\r\n            The native pointer to the memory block previously obtained from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            The actual size, in bytes, of the memory block specified via the\r\n            native pointer.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMemory.Free(System.IntPtr)\">\r\n            <summary>\r\n            Frees a memory block previously obtained from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pMemory\">\r\n            The native pointer to the memory block previously obtained from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)\"/> method.\r\n            </param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteString\">\r\n            <summary>\r\n            This class contains static methods that are used to deal with native\r\n            UTF-8 string pointers to be used with the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteString.ThirtyBits\">\r\n            <summary>\r\n            This is the maximum possible length for the native UTF-8 encoded\r\n            strings used with the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteString.Utf8Encoding\">\r\n            <summary>\r\n            This is the <see cref=\"T:System.Text.Encoding\"/> object instance used to handle\r\n            conversions from/to UTF-8.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.GetUtf8BytesFromString(System.String)\">\r\n            <summary>\r\n            Converts the specified managed string into the UTF-8 encoding and\r\n            returns the array of bytes containing its representation in that\r\n            encoding.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The managed string to convert.\r\n            </param>\r\n            <returns>\r\n            The array of bytes containing the representation of the managed\r\n            string in the UTF-8 encoding or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.GetStringFromUtf8Bytes(System.Byte[])\">\r\n            <summary>\r\n            Converts the specified array of bytes representing a string in the\r\n            UTF-8 encoding and returns a managed string.\r\n            </summary>\r\n            <param name=\"bytes\">\r\n            The array of bytes to convert.\r\n            </param>\r\n            <returns>\r\n            The managed string or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.ProbeForUtf8ByteLength(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Probes a native pointer to a string in the UTF-8 encoding for its\r\n            terminating NUL character, within the specified length limit.\r\n            </summary>\r\n            <param name=\"pValue\">\r\n            The native NUL-terminated string pointer.\r\n            </param>\r\n            <param name=\"limit\">\r\n            The maximum length of the native string, in bytes.\r\n            </param>\r\n            <returns>\r\n            The length of the native string, in bytes -OR- zero if the length\r\n            could not be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.StringFromUtf8IntPtr(System.IntPtr)\">\r\n            <summary>\r\n            Converts the specified native NUL-terminated UTF-8 string pointer\r\n            into a managed string.\r\n            </summary>\r\n            <param name=\"pValue\">\r\n            The native NUL-terminated UTF-8 string pointer.\r\n            </param>\r\n            <returns>\r\n            The managed string or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.StringFromUtf8IntPtr(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Converts the specified native UTF-8 string pointer of the specified\r\n            length into a managed string.\r\n            </summary>\r\n            <param name=\"pValue\">\r\n            The native UTF-8 string pointer.\r\n            </param>\r\n            <param name=\"length\">\r\n            The length of the native string, in bytes.\r\n            </param>\r\n            <returns>\r\n            The managed string or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.Utf8IntPtrFromString(System.String)\">\r\n            <summary>\r\n            Converts the specified managed string into a native NUL-terminated\r\n            UTF-8 string pointer using memory obtained from the SQLite core\r\n            library.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The managed string to convert.\r\n            </param>\r\n            <returns>\r\n            The native NUL-terminated UTF-8 string pointer or\r\n            <see cref=\"F:System.IntPtr.Zero\"/> upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.StringArrayFromUtf8SizeAndIntPtr(System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Converts a logical array of native NUL-terminated UTF-8 string\r\n            pointers into an array of managed strings.\r\n            </summary>\r\n            <param name=\"argc\">\r\n            The number of elements in the logical array of native\r\n            NUL-terminated UTF-8 string pointers.\r\n            </param>\r\n            <param name=\"argv\">\r\n            The native pointer to the logical array of native NUL-terminated\r\n            UTF-8 string pointers to convert.\r\n            </param>\r\n            <returns>\r\n            The array of managed strings or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteString.Utf8IntPtrArrayFromStringArray(System.String[])\">\r\n            <summary>\r\n            Converts an array of managed strings into an array of native\r\n            NUL-terminated UTF-8 string pointers.\r\n            </summary>\r\n            <param name=\"values\">\r\n            The array of managed strings to convert.\r\n            </param>\r\n            <returns>\r\n            The array of native NUL-terminated UTF-8 string pointers or null\r\n            upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteBytes\">\r\n            <summary>\r\n            This class contains static methods that are used to deal with native\r\n            pointers to memory blocks that logically contain arrays of bytes to be\r\n            used with the SQLite core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBytes.FromIntPtr(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Converts a native pointer to a logical array of bytes of the\r\n            specified length into a managed byte array.\r\n            </summary>\r\n            <param name=\"pValue\">\r\n            The native pointer to the logical array of bytes to convert.\r\n            </param>\r\n            <param name=\"length\">\r\n            The length, in bytes, of the logical array of bytes to convert.\r\n            </param>\r\n            <returns>\r\n            The managed byte array or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteBytes.ToIntPtr(System.Byte[])\">\r\n            <summary>\r\n            Converts a managed byte array into a native pointer to a logical\r\n            array of bytes.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The managed byte array to convert.\r\n            </param>\r\n            <returns>\r\n            The native pointer to a logical byte array or null upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteMarshal\">\r\n            <summary>\r\n            This class contains static methods that are used to perform several\r\n            low-level data marshalling tasks between native and managed code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.IntPtrForOffset(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Returns a new <see cref=\"T:System.IntPtr\"/> object instance based on the\r\n            specified <see cref=\"T:System.IntPtr\"/> object instance and an integer\r\n            offset.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location that the new\r\n            <see cref=\"T:System.IntPtr\"/> object instance should point to.\r\n            </param>\r\n            <returns>\r\n            The new <see cref=\"T:System.IntPtr\"/> object instance.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.RoundUp(System.Int32,System.Int32)\">\r\n            <summary>\r\n            Rounds up an integer size to the next multiple of the alignment.\r\n            </summary>\r\n            <param name=\"size\">\r\n            The size, in bytes, to be rounded up.\r\n            </param>\r\n            <param name=\"alignment\">\r\n            The required alignment for the return value.\r\n            </param>\r\n            <returns>\r\n            The size, in bytes, rounded up to the next multiple of the\r\n            alignment.  This value may end up being the same as the original\r\n            size.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.NextOffsetOf(System.Int32,System.Int32,System.Int32)\">\r\n            <summary>\r\n            Determines the offset, in bytes, of the next structure member.\r\n            </summary>\r\n            <param name=\"offset\">\r\n            The offset, in bytes, of the current structure member.\r\n            </param>\r\n            <param name=\"size\">\r\n            The size, in bytes, of the current structure member.\r\n            </param>\r\n            <param name=\"alignment\">\r\n            The alignment, in bytes, of the next structure member.\r\n            </param>\r\n            <returns>\r\n            The offset, in bytes, of the next structure member.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.ReadInt32(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Reads a <see cref=\"T:System.Int32\"/> value from the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.Int32\"/> value to be read is located.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Int32\"/> value at the specified memory location.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.ReadDouble(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Reads a <see cref=\"T:System.Double\"/> value from the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.Double\"/> to be read is located.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Double\"/> value at the specified memory location.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.ReadIntPtr(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            Reads an <see cref=\"T:System.IntPtr\"/> value from the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.IntPtr\"/> value to be read is located.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.IntPtr\"/> value at the specified memory location.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.WriteInt32(System.IntPtr,System.Int32,System.Int32)\">\r\n            <summary>\r\n            Writes an <see cref=\"T:System.Int32\"/> value to the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.Int32\"/> value to be written is located.\r\n            </param>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Int32\"/> value to write.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.WriteInt64(System.IntPtr,System.Int32,System.Int64)\">\r\n            <summary>\r\n            Writes an <see cref=\"T:System.Int64\"/> value to the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.Int64\"/> value to be written is located.\r\n            </param>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Int64\"/> value to write.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.WriteDouble(System.IntPtr,System.Int32,System.Double)\">\r\n            <summary>\r\n            Writes a <see cref=\"T:System.Double\"/> value to the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.Double\"/> value to be written is located.\r\n            </param>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.Double\"/> value to write.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.WriteIntPtr(System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            Writes a <see cref=\"T:System.IntPtr\"/> value to the specified memory\r\n            location.\r\n            </summary>\r\n            <param name=\"pointer\">\r\n            The <see cref=\"T:System.IntPtr\"/> object instance representing the base\r\n            memory location.\r\n            </param>\r\n            <param name=\"offset\">\r\n            The integer offset from the base memory location where the\r\n            <see cref=\"T:System.IntPtr\"/> value to be written is located.\r\n            </param>\r\n            <param name=\"value\">\r\n            The <see cref=\"T:System.IntPtr\"/> value to write.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteMarshal.GetHashCode(System.Object,System.Boolean)\">\r\n            <summary>\r\n            Generates a hash code value for the object.\r\n            </summary>\r\n            <param name=\"value\">\r\n            The object instance used to calculate the hash code.\r\n            </param>\r\n            <param name=\"identity\">\r\n            Non-zero if different object instances with the same value should\r\n            generate different hash codes, where applicable.  This parameter\r\n            has no effect on the .NET Compact Framework.\r\n            </param>\r\n            <returns>\r\n            The hash code value -OR- zero if the object is null.\r\n            </returns>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteModule\">\r\n            <summary>\r\n            This class represents a managed virtual table module implementation.\r\n            It is not sealed and must be used as the base class for any\r\n            user-defined virtual table module classes implemented in managed code.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.DefaultModuleVersion\">\r\n            <summary>\r\n            The default version of the native sqlite3_module structure in use.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.nativeModule\">\r\n            <summary>\r\n            This field is used to store the native sqlite3_module structure\r\n            associated with this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.destroyModule\">\r\n            <summary>\r\n            This field is used to store the destructor delegate to be passed to\r\n            the SQLite core library via the sqlite3_create_disposable_module()\r\n            function.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.disposableModule\">\r\n            <summary>\r\n            This field is used to store a pointer to the native sqlite3_module\r\n            structure returned by the sqlite3_create_disposable_module\r\n            function.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.tables\">\r\n            <summary>\r\n            This field is used to store the virtual table instances associated\r\n            with this module.  The native pointer to the sqlite3_vtab derived\r\n            structure is used to key into this collection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.cursors\">\r\n            <summary>\r\n            This field is used to store the virtual table cursor instances\r\n            associated with this module.  The native pointer to the\r\n            sqlite3_vtab_cursor derived structure is used to key into this\r\n            collection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.functions\">\r\n            <summary>\r\n            This field is used to store the virtual table function instances\r\n            associated with this module.  The case-insensitive function name\r\n            and the number of arguments (with -1 meaning \"any\") are used to\r\n            construct the string that is used to key into this collection.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the module.  This parameter cannot be null.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CreateDisposableModule(System.IntPtr)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to create a new\r\n            disposable module containing the implementation of a virtual table.\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            The native database connection pointer to use.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xDestroyModule(System.IntPtr)\">\r\n            <summary>\r\n            This method is called by the SQLite core library when the native\r\n            module associated with this object instance is being destroyed due\r\n            to its parent connection being closed.  It may also be called by\r\n            the \"vtshim\" module if/when the sqlite3_dispose_module() function\r\n            is called.\r\n            </summary>\r\n            <param name=\"pClientData\">\r\n            The native user-data pointer associated with this module, as it was\r\n            provided to the SQLite core library when the native module instance\r\n            was created.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.AllocateNativeModule\">\r\n            <summary>\r\n            Creates and returns the native sqlite_module structure using the\r\n            configured (or default) <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/>\r\n            interface implementation.\r\n            </summary>\r\n            <returns>\r\n            The native sqlite_module structure using the configured (or\r\n            default) <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface\r\n            implementation.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.AllocateNativeModule(System.Data.SQLite.ISQLiteNativeModule)\">\r\n            <summary>\r\n            Creates and returns the native sqlite_module structure using the\r\n            specified <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface\r\n            implementation.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface implementation to\r\n            use.\r\n            </param>\r\n            <returns>\r\n            The native sqlite_module structure using the specified\r\n            <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface implementation.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CopyNativeModule(System.Data.SQLite.UnsafeNativeMethods.sqlite3_module)\">\r\n            <summary>\r\n            Creates a copy of the specified\r\n            <see cref=\"T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_module\"/> object instance,\r\n            using default implementations for the contained delegates when\r\n            necessary.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_module\"/> object\r\n            instance to copy.\r\n            </param>\r\n            <returns>\r\n            The new <see cref=\"T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_module\"/> object\r\n            instance.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CreateOrConnect(System.Boolean,System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            Calls one of the virtual table initialization methods.\r\n            </summary>\r\n            <param name=\"create\">\r\n            Non-zero to call the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/>\r\n            method; otherwise, the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/>\r\n            method will be called.\r\n            </param>\r\n            <param name=\"pDb\">\r\n            The native database connection handle.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            The original native pointer value that was provided to the\r\n            sqlite3_create_module(), sqlite3_create_module_v2() or\r\n            sqlite3_create_disposable_module() functions.\r\n            </param>\r\n            <param name=\"argc\">\r\n            The number of arguments from the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"argv\">\r\n            The array of string arguments from the CREATE VIRTUAL TABLE\r\n            statement.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            Upon success, this parameter must be modified to point to the newly\r\n            created native sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"pError\">\r\n            Upon failure, this parameter must be modified to point to the error\r\n            message, with the underlying memory having been obtained from the\r\n            sqlite3_malloc() function.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.DestroyOrDisconnect(System.Boolean,System.IntPtr)\">\r\n            <summary>\r\n            Calls one of the virtual table finalization methods.\r\n            </summary>\r\n            <param name=\"destroy\">\r\n            Non-zero to call the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/>\r\n            method; otherwise, the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method will be\r\n            called.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteModule,System.IntPtr,System.Boolean,System.Boolean,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance to be used.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"logErrors\">\r\n            Non-zero if this error message should also be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"logExceptions\">\r\n            Non-zero if caught exceptions should be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteVirtualTable,System.Boolean,System.Boolean,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance to be used.\r\n            </param>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance used to\r\n            lookup the native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"logErrors\">\r\n            Non-zero if this error message should also be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"logExceptions\">\r\n            Non-zero if caught exceptions should be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetCursorError(System.Data.SQLite.SQLiteModule,System.IntPtr,System.Boolean,System.Boolean,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance to be used.\r\n            </param>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure\r\n            used to get the native pointer to the sqlite3_vtab derived\r\n            structure.\r\n            </param>\r\n            <param name=\"logErrors\">\r\n            Non-zero if this error message should also be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"logExceptions\">\r\n            Non-zero if caught exceptions should be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetCursorError(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteVirtualTableCursor,System.Boolean,System.Boolean,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance to be used.\r\n            </param>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance used to\r\n            lookup the native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"logErrors\">\r\n            Non-zero if this error message should also be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"logExceptions\">\r\n            Non-zero if caught exceptions should be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.GetNativeModuleImpl\">\r\n            <summary>\r\n            Gets and returns the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface\r\n            implementation to be used when creating the native sqlite3_module\r\n            structure.  Derived classes may override this method to supply an\r\n            alternate implementation for the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/>\r\n            interface.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface implementation to\r\n            be used when populating the native sqlite3_module structure.  If\r\n            the returned value is null, the private methods provided by the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> class and relating to the\r\n            <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface  will be used to\r\n            create the necessary delegates.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CreateNativeModuleImpl\">\r\n            <summary>\r\n            Creates and returns the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/>\r\n            interface implementation corresponding to the current\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> interface implementation\r\n            corresponding to the current <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object\r\n            instance.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.AllocateTable\">\r\n            <summary>\r\n            Allocates a native sqlite3_vtab derived structure and returns a\r\n            native pointer to it.\r\n            </summary>\r\n            <returns>\r\n            A native pointer to a native sqlite3_vtab derived structure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.ZeroTable(System.IntPtr)\">\r\n            <summary>\r\n            Zeros out the fields of a native sqlite3_vtab derived structure.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the native sqlite3_vtab derived structure to\r\n            zero.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.FreeTable(System.IntPtr)\">\r\n            <summary>\r\n            Frees a native sqlite3_vtab structure using the provided native\r\n            pointer to it.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            A native pointer to a native sqlite3_vtab derived structure.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.AllocateCursor\">\r\n            <summary>\r\n            Allocates a native sqlite3_vtab_cursor derived structure and\r\n            returns a native pointer to it.\r\n            </summary>\r\n            <returns>\r\n            A native pointer to a native sqlite3_vtab_cursor derived structure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.FreeCursor(System.IntPtr)\">\r\n            <summary>\r\n            Frees a native sqlite3_vtab_cursor structure using the provided\r\n            native pointer to it.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            A native pointer to a native sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.TableFromCursor(System.Data.SQLite.SQLiteModule,System.IntPtr)\">\r\n            <summary>\r\n            Reads and returns the native pointer to the sqlite3_vtab derived\r\n            structure based on the native pointer to the sqlite3_vtab_cursor\r\n            derived structure.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance to be used.\r\n            </param>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure\r\n            from which to read the native pointer to the sqlite3_vtab derived\r\n            structure.\r\n            </param>\r\n            <returns>\r\n            The native pointer to the sqlite3_vtab derived structure -OR-\r\n            <see cref=\"F:System.IntPtr.Zero\"/> if it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.TableFromCursor(System.IntPtr)\">\r\n            <summary>\r\n            Reads and returns the native pointer to the sqlite3_vtab derived\r\n            structure based on the native pointer to the sqlite3_vtab_cursor\r\n            derived structure.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure\r\n            from which to read the native pointer to the sqlite3_vtab derived\r\n            structure.\r\n            </param>\r\n            <returns>\r\n            The native pointer to the sqlite3_vtab derived structure -OR-\r\n            <see cref=\"F:System.IntPtr.Zero\"/> if it cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.TableFromIntPtr(System.IntPtr)\">\r\n            <summary>\r\n            Looks up and returns the <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object\r\n            instance based on the native pointer to the sqlite3_vtab derived\r\n            structure.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance or null if\r\n            the corresponding one cannot be found.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.TableToIntPtr(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            Allocates and returns a native pointer to a sqlite3_vtab derived\r\n            structure and creates an association between it and the specified\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance to be used\r\n            when creating the association.\r\n            </param>\r\n            <returns>\r\n            The native pointer to a sqlite3_vtab derived structure or\r\n            <see cref=\"F:System.IntPtr.Zero\"/> if the method fails for any reason.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CursorFromIntPtr(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            Looks up and returns the <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/>\r\n            object instance based on the native pointer to the\r\n            sqlite3_vtab_cursor derived structure.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived structure.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance or null\r\n            if the corresponding one cannot be found.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CursorToIntPtr(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            Allocates and returns a native pointer to a sqlite3_vtab_cursor\r\n            derived structure and creates an association between it and the\r\n            specified <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance to be\r\n            used when creating the association.\r\n            </param>\r\n            <returns>\r\n            The native pointer to a sqlite3_vtab_cursor derived structure or\r\n            <see cref=\"F:System.IntPtr.Zero\"/> if the method fails for any reason.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.GetFunctionKey(System.Int32,System.String,System.Data.SQLite.SQLiteFunction)\">\r\n            <summary>\r\n            Deterimines the key that should be used to identify and store the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance for the virtual table\r\n            (i.e. to be returned via the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method).\r\n            </summary>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments to the virtual table function.\r\n            </param>\r\n            <param name=\"name\">\r\n            The name of the virtual table function.\r\n            </param>\r\n            <param name=\"function\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance associated with\r\n            this virtual table function.\r\n            </param>\r\n            <returns>\r\n            The string that should be used to identify and store the virtual\r\n            table function instance.  This method cannot return null.  If null\r\n            is returned from this method, the behavior is undefined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.DeclareTable(System.Data.SQLite.SQLiteConnection,System.String,System.String@)\">\r\n            <summary>\r\n            Attempts to declare the schema for the virtual table using the\r\n            specified database connection.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance to use when\r\n            declaring the schema of the virtual table.  This parameter may not\r\n            be null.\r\n            </param>\r\n            <param name=\"sql\">\r\n            The string containing the CREATE TABLE statement that completely\r\n            describes the schema for the virtual table.  This parameter may not\r\n            be null.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this parameter must be modified to contain an error\r\n            message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.DeclareFunction(System.Data.SQLite.SQLiteConnection,System.Int32,System.String,System.String@)\">\r\n            <summary>\r\n            Calls the native SQLite core library in order to declare a virtual\r\n            table function in response to a call into the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/>\r\n            or <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> virtual table\r\n            methods.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance to use when\r\n            declaring the schema of the virtual table.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments to the function being declared.\r\n            </param>\r\n            <param name=\"name\">\r\n            The name of the function being declared.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon success, the contents of this parameter are undefined.  Upon\r\n            failure, it should contain an appropriate error message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.IntPtr,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteVirtualTable,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance used to\r\n            lookup the native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetCursorError(System.Data.SQLite.SQLiteVirtualTableCursor,System.String)\">\r\n            <summary>\r\n            Arranges for the specified error message to be placed into the\r\n            zErrMsg field of a sqlite3_vtab derived structure, freeing the\r\n            existing error message, if any.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance used to\r\n            lookup the native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <param name=\"error\">\r\n            The error message.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetEstimatedCost(System.Data.SQLite.SQLiteIndex,System.Nullable{System.Double})\">\r\n            <summary>\r\n            Modifies the specified <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance\r\n            to contain the specified estimated cost.\r\n            </summary>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance to modify.\r\n            </param>\r\n            <param name=\"estimatedCost\">\r\n            The estimated cost value to use.  Using a null value means that the\r\n            default value provided by the SQLite core library should be used.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetEstimatedCost(System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            Modifies the specified <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance\r\n            to contain the default estimated cost.\r\n            </summary>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance to modify.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetEstimatedRows(System.Data.SQLite.SQLiteIndex,System.Nullable{System.Int64})\">\r\n            <summary>\r\n            Modifies the specified <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance\r\n            to contain the specified estimated rows.\r\n            </summary>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance to modify.\r\n            </param>\r\n            <param name=\"estimatedRows\">\r\n            The estimated rows value to use.  Using a null value means that the\r\n            default value provided by the SQLite core library should be used.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SetEstimatedRows(System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            Modifies the specified <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance\r\n            to contain the default estimated rows.\r\n            </summary>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance to modify.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pError\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pError\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xBestIndex(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"pIndex\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xDisconnect(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xDestroy(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xOpen(System.IntPtr,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xClose(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"idxNum\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"idxStr\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xNext(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xEof(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"pContext\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xRowId(System.IntPtr,System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xBegin(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xSync(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xCommit(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xRollback(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"nArg\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"zName\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"callback\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xRename(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"zNew\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xSavepoint(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xRelease(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.xRollbackTo(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            The native user-data pointer associated with this module, as it was\r\n            provided to the SQLite core library when the native module instance\r\n            was created.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            The module name, database name, virtual table name, and all other\r\n            arguments passed to the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"table\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this parameter must be modified to contain an error\r\n            message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteConnection\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            The native user-data pointer associated with this module, as it was\r\n            provided to the SQLite core library when the native module instance\r\n            was created.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            The module name, database name, virtual table name, and all other\r\n            arguments passed to the CREATE VIRTUAL TABLE statement.\r\n            </param>\r\n            <param name=\"table\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated with\r\n            the virtual table.\r\n            </param>\r\n            <param name=\"error\">\r\n            Upon failure, this parameter must be modified to contain an error\r\n            message.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"index\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteIndex\"/> object instance containing all the\r\n            data for the inputs and outputs relating to index selection.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"cursor\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance associated\r\n            with the newly opened virtual table cursor.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"indexNumber\">\r\n            Number used to help identify the selected index.\r\n            </param>\r\n            <param name=\"indexString\">\r\n            String used to help identify the selected index.\r\n            </param>\r\n            <param name=\"values\">\r\n            The values corresponding to each column in the selected index.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <returns>\r\n            Non-zero if no more rows are available; zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"context\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteContext\"/> object instance to be used for\r\n            returning the specified column value to the SQLite core library.\r\n            </param>\r\n            <param name=\"index\">\r\n            The zero-based index corresponding to the column containing the\r\n            value to be returned.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            Upon success, this parameter must be modified to contain the unique\r\n            integer row identifier for the current row for the specified cursor.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"values\">\r\n            The array of <see cref=\"T:System.Data.SQLite.SQLiteValue\"/> object instances containing\r\n            the new or modified column values, if any.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            Upon success, this parameter must be modified to contain the unique\r\n            integer row identifier for the row that was inserted, if any.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Begin(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Sync(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Commit(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            The number of arguments to the function being sought.\r\n            </param>\r\n            <param name=\"name\">\r\n            The name of the function being sought.\r\n            </param>\r\n            <param name=\"function\">\r\n            Upon success, this parameter must be modified to contain the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteFunction\"/> object instance responsible for\r\n            implementing the specified function.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            Upon success, this parameter must be modified to contain the\r\n            native user-data pointer associated with\r\n            <paramref name=\"function\"/>.\r\n            </param>\r\n            <returns>\r\n            Non-zero if the specified function was found; zero otherwise.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"newName\">\r\n            The new name for the virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            This is an integer identifier under which the the current state of\r\n            the virtual table should be saved.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            This is an integer used to indicate that any saved states with an\r\n            identifier greater than or equal to this should be deleted by the\r\n            virtual table.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            This method is called in response to the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this virtual table.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            This is an integer identifier used to specify a specific saved\r\n            state for the virtual table for it to restore itself back to, which\r\n            should also have the effect of deleting all saved states with an\r\n            integer identifier greater than this one.\r\n            </param>\r\n            <returns>\r\n            A standard SQLite return code.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Dispose\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModule.Dispose\"/> method.  Zero if this method is being\r\n            called from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.Finalize\">\r\n            <summary>\r\n            Finalizes this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteModule.LogErrorsNoThrow\">\r\n            <summary>\r\n            Returns or sets a boolean value indicating whether virtual table\r\n            errors should be logged using the <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteModule.LogExceptionsNoThrow\">\r\n            <summary>\r\n            Returns or sets a boolean value indicating whether exceptions\r\n            caught in the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method,\r\n            the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method,\r\n            the <see cref=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.IntPtr,System.String)\"/> method,\r\n            the <see cref=\"M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method,\r\n            and the <see cref=\"M:System.Data.SQLite.SQLiteModule.Dispose\"/> method should be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteModule.LogErrors\">\r\n            <summary>\r\n            Returns or sets a boolean value indicating whether virtual table\r\n            errors should be logged using the <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteModule.LogExceptions\">\r\n            <summary>\r\n            Returns or sets a boolean value indicating whether exceptions\r\n            caught in the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method,\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method, and the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModule.Dispose\"/> method should be logged using the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteLog\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteModule.Declared\">\r\n            <summary>\r\n            Returns non-zero if the schema for the virtual table has been\r\n            declared.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteModule.Name\">\r\n            <summary>\r\n            Returns the name of the module as it was registered with the SQLite\r\n            core library.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteModule.SQLiteNativeModule\">\r\n            <summary>\r\n            This class implements the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/>\r\n            interface by forwarding those method calls to the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance it contains.  If the\r\n            contained <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance is null, all\r\n            the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/> methods simply generate an\r\n            error.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.DefaultLogErrors\">\r\n            <summary>\r\n            This is the value that is always used for the \"logErrors\"\r\n            parameter to the various static error handling methods provided\r\n            by the <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.DefaultLogExceptions\">\r\n            <summary>\r\n            This is the value that is always used for the \"logExceptions\"\r\n            parameter to the various static error handling methods provided\r\n            by the <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> class.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.ModuleNotAvailableErrorMessage\">\r\n            <summary>\r\n            This is the error message text used when the contained\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance is not available\r\n            for any reason.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.module\">\r\n            <summary>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance used to provide\r\n            an implementation of the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/>\r\n            interface.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.#ctor(System.Data.SQLite.SQLiteModule)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"module\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteModule\"/> object instance used to provide\r\n            an implementation of the <see cref=\"T:System.Data.SQLite.ISQLiteNativeModule\"/>\r\n            interface.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.ModuleNotAvailableTableError(System.IntPtr)\">\r\n            <summary>\r\n            Sets the table error message to one that indicates the native\r\n            module implementation is not available.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            The native pointer to the sqlite3_vtab derived structure.\r\n            </param>\r\n            <returns>\r\n            The value of <see cref=\"F:System.Data.SQLite.SQLiteErrorCode.Error\"/>.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.ModuleNotAvailableCursorError(System.IntPtr)\">\r\n            <summary>\r\n            Sets the table error message to one that indicates the native\r\n            module implementation is not available.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            The native pointer to the sqlite3_vtab_cursor derived\r\n            structure.\r\n            </param>\r\n            <returns>\r\n            The value of <see cref=\"F:System.Data.SQLite.SQLiteErrorCode.Error\"/>.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pError\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pDb\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pAux\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pError\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"pIndex\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xDisconnect(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xDestroy(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xClose(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"idxNum\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"idxStr\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xNext(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xEof(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"pContext\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"pCursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"argc\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"argv\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xBegin(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xSync(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xCommit(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRollback(System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"nArg\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"zName\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"callback\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <param name=\"zNew\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"pVtab\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"iSavepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Dispose\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Dispose\"/> method.  Zero if this method is being\r\n            called from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Finalize\">\r\n            <summary>\r\n            Finalizes this object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator\">\r\n            <summary>\r\n            This class represents a virtual table cursor to be used with the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModuleEnumerable\"/> class.  It is not sealed and may\r\n            be used as the base class for any user-defined virtual table cursor\r\n            class that wraps an <see cref=\"T:System.Collections.IEnumerator\"/> object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.enumerator\">\r\n            <summary>\r\n            The <see cref=\"T:System.Collections.IEnumerator\"/> instance provided when this cursor\r\n            was created.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.endOfEnumerator\">\r\n            <summary>\r\n            This value will be non-zero if false has been returned from the\r\n            <see cref=\"M:System.Collections.IEnumerator.MoveNext\"/> method.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.#ctor(System.Data.SQLite.SQLiteVirtualTable,System.Collections.IEnumerator)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this object instance.\r\n            </param>\r\n            <param name=\"enumerator\">\r\n            The <see cref=\"T:System.Collections.IEnumerator\"/> instance to expose as a virtual\r\n            table cursor.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.MoveNext\">\r\n            <summary>\r\n            Advances to the next row of the virtual table cursor using the\r\n            <see cref=\"M:System.Collections.IEnumerator.MoveNext\"/> method of the\r\n            <see cref=\"T:System.Collections.IEnumerator\"/> object instance.\r\n            </summary>\r\n            <returns>\r\n            Non-zero if the current row is valid; zero otherwise.  If zero is\r\n            returned, no further rows are available.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Reset\">\r\n            <summary>\r\n            Resets the virtual table cursor position, also invalidating the\r\n            current row, using the <see cref=\"M:System.Collections.IEnumerator.Reset\"/> method of\r\n            the <see cref=\"T:System.Collections.IEnumerator\"/> object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Close\">\r\n            <summary>\r\n            Closes the virtual table cursor.  This method must not throw any\r\n            exceptions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.CheckClosed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.InvalidOperationException\"/> if the virtual\r\n            table cursor has been closed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.IDisposable.Dispose\"/> method.  Zero if this method is\r\n            being called from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Current\">\r\n            <summary>\r\n            Returns the value for the current row of the virtual table cursor\r\n            using the <see cref=\"P:System.Collections.IEnumerator.Current\"/> property of the\r\n            <see cref=\"T:System.Collections.IEnumerator\"/> object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.EndOfEnumerator\">\r\n            <summary>\r\n            Returns non-zero if the end of the virtual table cursor has been\r\n            seen (i.e. no more rows are available, including the current one).\r\n            </summary>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.IsOpen\">\r\n            <summary>\r\n            Returns non-zero if the virtual table cursor is open.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteModuleEnumerable\">\r\n             <summary>\r\n             This class implements a virtual table module that exposes an\r\n             <see cref=\"T:System.Collections.IEnumerable\"/> object instance as a read-only virtual\r\n             table.  It is not sealed and may be used as the base class for any\r\n             user-defined virtual table class that wraps an\r\n             <see cref=\"T:System.Collections.IEnumerable\"/> object instance.  The following short\r\n             example shows it being used to treat an array of strings as a table\r\n             data source:\r\n             <code>\r\n               public static class Sample\r\n               {\r\n                 public static void Main()\r\n                 {\r\n                   using (SQLiteConnection connection = new SQLiteConnection(\r\n                       \"Data Source=:memory:;\"))\r\n                   {\r\n                     connection.Open();\r\n            \r\n                     connection.CreateModule(new SQLiteModuleEnumerable(\r\n                       \"sampleModule\", new string[] { \"one\", \"two\", \"three\" }));\r\n            \r\n                     using (SQLiteCommand command = connection.CreateCommand())\r\n                     {\r\n                       command.CommandText =\r\n                           \"CREATE VIRTUAL TABLE t1 USING sampleModule;\";\r\n            \r\n                       command.ExecuteNonQuery();\r\n                     }\r\n            \r\n                     using (SQLiteCommand command = connection.CreateCommand())\r\n                     {\r\n                       command.CommandText = \"SELECT * FROM t1;\";\r\n            \r\n                       using (SQLiteDataReader dataReader = command.ExecuteReader())\r\n                       {\r\n                         while (dataReader.Read())\r\n                           Console.WriteLine(dataReader[0].ToString());\r\n                       }\r\n                     }\r\n            \r\n                     connection.Close();\r\n                   }\r\n                 }\r\n               }\r\n             </code>\r\n             </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.SQLiteModuleNoop\">\r\n            <summary>\r\n            This class implements a virtual table module that does nothing by\r\n            providing \"empty\" implementations for all of the\r\n            <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface methods.  The result\r\n            codes returned by these \"empty\" method implementations may be\r\n            controlled on a per-method basis by using and/or overriding the\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModuleNoop.GetDefaultResultCode\"/>,\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToEofResult(System.Data.SQLite.SQLiteErrorCode)\"/>,\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToFindFunctionResult(System.Data.SQLite.SQLiteErrorCode)\"/>,\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModuleNoop.GetMethodResultCode(System.String)\"/>, and\r\n            <see cref=\"M:System.Data.SQLite.SQLiteModuleNoop.SetMethodResultCode(System.String,System.Data.SQLite.SQLiteErrorCode)\"/> methods from within derived classes.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModuleNoop.resultCodes\">\r\n            <summary>\r\n            This field is used to store the <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/>\r\n            values to return, on a per-method basis, for all methods that are\r\n            part of the <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.#ctor(System.String)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the module.  This parameter cannot be null.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.GetDefaultResultCode\">\r\n            <summary>\r\n            Determines the default <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value to be\r\n            returned by methods of the <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/>\r\n            interface that lack an overridden implementation in all classes\r\n            derived from the <see cref=\"T:System.Data.SQLite.SQLiteModuleNoop\"/> class.\r\n            </summary>\r\n            <returns>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value that should be returned\r\n            by all <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface methods unless\r\n            a more specific result code has been set for that interface method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToEofResult(System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Converts a <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value into a boolean\r\n            return value for use with the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"resultCode\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value to convert.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Boolean\"/> value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToFindFunctionResult(System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Converts a <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value into a boolean\r\n            return value for use with the\r\n            <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"resultCode\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value to convert.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Boolean\"/> value.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.GetMethodResultCode(System.String)\">\r\n            <summary>\r\n            Determines the <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value that should be\r\n            returned by the specified <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/>\r\n            interface method if it lack an overridden implementation.  If no\r\n            specific <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value is available (or set)\r\n            for the specified method, the <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value\r\n            returned by the <see cref=\"M:System.Data.SQLite.SQLiteModuleNoop.GetDefaultResultCode\"/> method will be\r\n            returned instead.\r\n            </summary>\r\n            <param name=\"methodName\">\r\n            The name of the method.  Currently, this method must be part of\r\n            the <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface.\r\n            </param>\r\n            <returns>\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value that should be returned\r\n            by the <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.SetMethodResultCode(System.String,System.Data.SQLite.SQLiteErrorCode)\">\r\n            <summary>\r\n            Sets the <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value that should be\r\n            returned by the specified <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/>\r\n            interface method if it lack an overridden implementation.\r\n            </summary>\r\n            <param name=\"methodName\">\r\n            The name of the method.  Currently, this method must be part of\r\n            the <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface.\r\n            </param>\r\n            <param name=\"resultCode\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteErrorCode\"/> value that should be returned\r\n            by the <see cref=\"T:System.Data.SQLite.ISQLiteManagedModule\"/> interface method.\r\n            </param>\r\n            <returns>\r\n            Non-zero upon success.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"error\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"error\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Destroy(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </param>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <param name=\"indexNumber\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <param name=\"indexString\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <param name=\"values\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"context\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"values\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Begin(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Sync(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Commit(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Rollback(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"argumentCount\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"name\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"function\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </param>\r\n            <param name=\"newName\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"savepoint\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleNoop.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.IDisposable.Dispose\"/> method.  Zero if this method is\r\n            being called from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModuleEnumerable.declareSql\">\r\n            <summary>\r\n            The CREATE TABLE statement used to declare the schema for the\r\n            virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModuleEnumerable.enumerable\">\r\n            <summary>\r\n            The <see cref=\"T:System.Collections.IEnumerable\"/> instance containing the backing data\r\n            for the virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.SQLiteModuleEnumerable.objectIdentity\">\r\n            <summary>\r\n            Non-zero if different object instances with the same value should\r\n            generate different row identifiers, where applicable.  This has no\r\n            effect on the .NET Compact Framework.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.#ctor(System.String,System.Collections.IEnumerable)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the module.  This parameter cannot be null.\r\n            </param>\r\n            <param name=\"enumerable\">\r\n            The <see cref=\"T:System.Collections.IEnumerable\"/> instance to expose as a virtual\r\n            table.  This parameter cannot be null.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.#ctor(System.String,System.Collections.IEnumerable,System.Boolean)\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the module.  This parameter cannot be null.\r\n            </param>\r\n            <param name=\"enumerable\">\r\n            The <see cref=\"T:System.Collections.IEnumerable\"/> instance to expose as a virtual\r\n            table.  This parameter cannot be null.\r\n            </param>\r\n            <param name=\"objectIdentity\">\r\n            Non-zero if different object instances with the same value should\r\n            generate different row identifiers, where applicable.  This\r\n            parameter has no effect on the .NET Compact Framework.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.GetSqlForDeclareTable\">\r\n            <summary>\r\n            Determines the SQL statement used to declare the virtual table.\r\n            This method should be overridden in derived classes if they require\r\n            a custom virtual table schema.\r\n            </summary>\r\n            <returns>\r\n            The SQL statement used to declare the virtual table -OR- null if it\r\n            cannot be determined.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.CursorTypeMismatchError(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            Sets the table error message to one that indicates the virtual\r\n            table cursor is of the wrong type.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance.\r\n            </param>\r\n            <returns>\r\n            The value of <see cref=\"F:System.Data.SQLite.SQLiteErrorCode.Error\"/>.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.CursorEndOfEnumeratorError(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            Sets the table error message to one that indicates the virtual\r\n            table cursor has no current row.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance.\r\n            </param>\r\n            <returns>\r\n            The value of <see cref=\"F:System.Data.SQLite.SQLiteErrorCode.Error\"/>.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.GetStringFromObject(System.Data.SQLite.SQLiteVirtualTableCursor,System.Object)\">\r\n            <summary>\r\n            Determines the string to return as the column value for the object\r\n            instance value.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"value\">\r\n            The object instance to return a string representation for.\r\n            </param>\r\n            <returns>\r\n            The string representation of the specified object instance or null\r\n            upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.MakeRowId(System.Int32,System.Int32)\">\r\n            <summary>\r\n            Constructs an <see cref=\"T:System.Int64\"/> unique row identifier from two\r\n            <see cref=\"T:System.Int32\"/> values.  The first <see cref=\"T:System.Int32\"/> value\r\n            must contain the row sequence number for the current row and the\r\n            second value must contain the hash code of the enumerator value\r\n            for the current row.\r\n            </summary>\r\n            <param name=\"rowIndex\">\r\n            The integer row sequence number for the current row.\r\n            </param>\r\n            <param name=\"hashCode\">\r\n            The hash code of the enumerator value for the current row.\r\n            </param>\r\n            <returns>\r\n            The unique row identifier or zero upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.GetRowIdFromObject(System.Data.SQLite.SQLiteVirtualTableCursor,System.Object)\">\r\n            <summary>\r\n            Determines the unique row identifier for the current row.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTableCursor\"/> object instance\r\n            associated with the previously opened virtual table cursor to be\r\n            used.\r\n            </param>\r\n            <param name=\"value\">\r\n            The object instance to return a unique row identifier for.\r\n            </param>\r\n            <returns>\r\n            The unique row identifier or zero upon failure.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"error\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </summary>\r\n            <param name=\"connection\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"pClientData\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"arguments\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <param name=\"error\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Destroy(System.Data.SQLite.SQLiteVirtualTable)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </param>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <param name=\"indexNumber\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <param name=\"indexString\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <param name=\"values\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"context\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"values\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </param>\r\n            <param name=\"rowId\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </param>\r\n            <param name=\"newName\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.SQLiteModuleEnumerable.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.IDisposable.Dispose\"/> method.  Zero if this method is\r\n            being called from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1\">\r\n            <summary>\r\n            This class represents a virtual table cursor to be used with the\r\n            <see cref=\"T:System.Data.SQLite.SQLiteModuleEnumerable\"/> class.  It is not sealed and may\r\n            be used as the base class for any user-defined virtual table cursor\r\n            class that wraps an <see cref=\"T:System.Collections.Generic.IEnumerator`1\"/> object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.enumerator\">\r\n            <summary>\r\n            The <see cref=\"T:System.Collections.Generic.IEnumerator`1\"/> instance provided when this\r\n            cursor was created.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.#ctor(System.Data.SQLite.SQLiteVirtualTable,System.Collections.Generic.IEnumerator{`0})\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"table\">\r\n            The <see cref=\"T:System.Data.SQLite.SQLiteVirtualTable\"/> object instance associated\r\n            with this object instance.\r\n            </param>\r\n            <param name=\"enumerator\">\r\n            The <see cref=\"T:System.Collections.Generic.IEnumerator`1\"/> instance to expose as a virtual\r\n            table cursor.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.Close\">\r\n            <summary>\r\n            Closes the virtual table cursor.  This method must not throw any\r\n            exceptions.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.IDisposable.Dispose\"/> method.  Zero if this method is\r\n            being called from the finalizer.\r\n            </param>\r\n        </member>\r\n        <member name=\"P:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.System#Collections#Generic#IEnumerator{T}#Current\">\r\n            <summary>\r\n            Returns the value for the current row of the virtual table cursor\r\n            using the <see cref=\"P:System.Collections.Generic.IEnumerator`1.Current\"/> property of the\r\n            <see cref=\"T:System.Collections.Generic.IEnumerator`1\"/> object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"T:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1\">\r\n            <summary>\r\n            This class implements a virtual table module that exposes an\r\n            <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/> object instance as a read-only virtual\r\n            table.  It is not sealed and may be used as the base class for any\r\n            user-defined virtual table class that wraps an\r\n            <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/> object instance.\r\n            </summary>\r\n        </member>\r\n        <member name=\"F:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.enumerable\">\r\n            <summary>\r\n            The <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/> instance containing the backing\r\n            data for the virtual table.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.#ctor(System.String,System.Collections.Generic.IEnumerable{`0})\">\r\n            <summary>\r\n            Constructs an instance of this class.\r\n            </summary>\r\n            <param name=\"name\">\r\n            The name of the module.  This parameter cannot be null.\r\n            </param>\r\n            <param name=\"enumerable\">\r\n            The <see cref=\"T:System.Collections.Generic.IEnumerable`1\"/> instance to expose as a virtual\r\n            table.  This parameter cannot be null.\r\n            </param>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </summary>\r\n            <param name=\"table\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </param>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\">\r\n            <summary>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </summary>\r\n            <param name=\"cursor\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"context\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <param name=\"index\">\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </param>\r\n            <returns>\r\n            See the <see cref=\"M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)\"/> method.\r\n            </returns>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.CheckDisposed\">\r\n            <summary>\r\n            Throws an <see cref=\"T:System.ObjectDisposedException\"/> if this object\r\n            instance has been disposed.\r\n            </summary>\r\n        </member>\r\n        <member name=\"M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.Dispose(System.Boolean)\">\r\n            <summary>\r\n            Disposes of this object instance.\r\n            </summary>\r\n            <param name=\"disposing\">\r\n            Non-zero if this method is being called from the\r\n            <see cref=\"M:System.IDisposable.Dispose\"/> method.  Zero if this method is\r\n            being called from the finalizer.\r\n            </param>\r\n        </member>\r\n    </members>\r\n</doc>\r\n"
  },
  {
    "path": "library/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"MySql.Data\" version=\"6.9.8\" targetFramework=\"net35\" />\n  <package id=\"System.Data.SQLite\" version=\"1.0.94.1\" targetFramework=\"net35\" />\n  <package id=\"System.Data.SQLite.Core\" version=\"1.0.94.0\" targetFramework=\"net35\" />\n  <package id=\"System.Data.SQLite.Linq\" version=\"1.0.94.1\" targetFramework=\"net35\" />\n</packages>"
  },
  {
    "path": "pkmn-classic-framework.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.32126.315\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Library\", \"library\\Library.csproj\", \"{408EFC7E-C6B0-4160-8628-2679E34385CE}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"gts\", \"gts\\gts.csproj\", \"{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"bvCrawler4\", \"bvCrawler4\\bvCrawler4.csproj\", \"{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"bvCrawler5\", \"bvCrawler5\\bvCrawler5.csproj\", \"{BEA49E66-2204-4C10-8ED6-17F58018C2BD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"GlobalTerminalService\", \"GlobalTerminalService\\GlobalTerminalService.csproj\", \"{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"bvRestorer4\", \"bvRestorer4\\bvRestorer4.csproj\", \"{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"bvRestorer5\", \"bvRestorer5\\bvRestorer5.csproj\", \"{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"towerRestorer\", \"towerRestorer4\\towerRestorer.csproj\", \"{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"GamestatsBase\", \"GamestatsBase\\GamestatsBase\\GamestatsBase.csproj\", \"{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"VeekunImport\", \"VeekunImport\\VeekunImport.csproj\", \"{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MakeBaseStatTables\", \"MakeBaseStatTables\\MakeBaseStatTables.csproj\", \"{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"web\", \"web\\web.csproj\", \"{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RenameImages\", \"RenameImages\\RenameImages.csproj\", \"{D8787475-2D21-4E60-9320-13FA55C979AC}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{A0D01A86-7F0C-44C4-9B44-8E45C116590B}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.gitignore = .gitignore\n\t\tLICENSE.md = LICENSE.md\n\t\tREADME.md = README.md\n\t\tRoadmap.md = Roadmap.md\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{408EFC7E-C6B0-4160-8628-2679E34385CE}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{2EEAF2A8-68B7-4DB5-8818-36285D5CF9B3}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Debug|x86.Build.0 = Debug|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Release|x86.ActiveCfg = Release|x86\n\t\t{04E4EB3B-166B-4D8B-86AA-2178F2A927D5}.Release|x86.Build.0 = Release|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Debug|x86.Build.0 = Debug|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Release|x86.ActiveCfg = Release|x86\n\t\t{BEA49E66-2204-4C10-8ED6-17F58018C2BD}.Release|x86.Build.0 = Release|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Debug|x86.Build.0 = Debug|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Release|x86.ActiveCfg = Release|x86\n\t\t{7AB1A65F-3AD1-4356-94E7-F1A669BF4CE0}.Release|x86.Build.0 = Release|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Debug|x86.Build.0 = Debug|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Release|x86.ActiveCfg = Release|x86\n\t\t{5174CBF0-2A5D-466B-BC32-CE53B9AC4EAF}.Release|x86.Build.0 = Release|x86\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{9F2A0A44-B90E-4B30-8DFF-2B5E273F5BEC}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{2D667F5B-F10D-44E2-93F6-DD555D9EE7DF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{2A761C4F-00C2-45D5-B4CA-C41558CEB2DF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{99FCBB1C-D94F-458D-ABD2-8800FBDC65DA}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D8787475-2D21-4E60-9320-13FA55C979AC}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {B86878C4-9F17-469B-B51C-4CB1030489AA}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "pokedex/Shiny lock generations.txt",
    "content": "NatDex\tName\tNo ribbon including Wiimmfi events\tNo ribbon full legal\tAny including ribbons\n251\tCelebi  \t7\t7\t7\n493\tArceus  \t4\t8\t6\n494\tVictini \tx\tx\tx\n643\tReshiram\t6\t6\t6\n644\tZekrom  \t6\t6\t6\n647\tKeldeo  \tx\tx\tx\n648\tMeloetta\tx\tx\tx\n649\tGenesect\tx\tx\t5\n716\tXerneas \t7\t7\t6\n717\tYveltal \t7\t7\t6\n718\tZygarde \t8\t8\t7\n719\tDiancie \tx\tx\t6\n720\tHoopa   \tx\tx\tx\n721\tVolcanion\tx\tx\tx\n785\tTapu Koko\t8\t8\t7\n786\tTapu Lele\t8\t8\t7\n787\tTapu Bulu\t8\t8\t7\n788\tTapu Fini\t8\t8\t7\n789\tCosmog  \tx\tx\tx\n790\tCosmoem  \tx\tx\tx\n791\tSolgaleo\t8\t8\t7\n792\tLunala  \t8\t8\t7\n800\tNecrozma\t8\t8\t7\n801\tMagearna\tx\tx\t8\n802\tMarshadow\tx\tx\tx\n807\tZeraora \tx\tx\t8\n\nCap pikas other than Partner Cap are shiny locked.\nAsh Greninja is shiny locked.\nEvent Vivillons are shiny locked until Fancy in SV.\n"
  },
  {
    "path": "towerRestorer4/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=gts;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n  <startup> \n        \n    <supportedRuntime version=\"v2.0.50727\"/></startup>\n</configuration>\n"
  },
  {
    "path": "towerRestorer4/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Wfc;\n\nnamespace towerRestorer\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            if (args.Length == 0)\n            {\n                Console.WriteLine(\"Usage: towerRestorer4 <path>\");\n                Console.WriteLine(\"Attempts to insert files in <path>\");\n                Console.WriteLine(\"into the database in app configuration.\");\n                Console.WriteLine(\"Only inserts files whose names match the naming pattern:\");\n                Console.WriteLine(\"g*_pid*_rank*_room*\");\n                Console.WriteLine(\"Rank and room number are taken from the filename.\");\n                return;\n            }\n\n            Database db = Database.Instance;\n\n            String[] filenames = Directory.GetFiles(args[0]);\n            int successCount = 0;\n            int failureCount = 0;\n            int opponentSuccessCount = 0;\n            int opponentFailureCount = 0;\n            int leaderSuccessCount = 0;\n            int leaderFailureCount = 0;\n\n            Pokedex pokedex = new Pokedex(db, false);\n\n            foreach (String s in filenames)\n            {\n                String filename = s;\n\n                int slashIndex = filename.LastIndexOf(Path.DirectorySeparatorChar);\n                if (slashIndex >= 0)\n                {\n                    filename = filename.Substring(slashIndex + 1);\n                }\n\n                int dotIndex = filename.LastIndexOf('.');\n                if (dotIndex >= 0)\n                {\n                    filename = filename.Substring(0, dotIndex);\n                }\n\n                String[] split = filename.Split('_');\n\n                byte rank, room;\n\n                if (split.Length != 4 ||\n                    (split[0] != \"g4\" && split[0] != \"g5\") ||\n                    split[2].Substring(0, 4) != \"rank\" ||\n                    !Byte.TryParse(split[2].Substring(4), out rank) ||\n                    split[3].Substring(0, 4) != \"room\" ||\n                    !Byte.TryParse(split[3].Substring(4), out room)\n                    )\n                {\n                    Console.WriteLine(\"{0}: Filename pattern does not match, skipped.\", filename);\n                    failureCount++;\n                    continue;\n                }\n\n                int gen = Convert.ToInt32(split[0].Substring(1));\n\n                rank--;\n                room--;\n\n                switch (gen)\n                {\n                    case 4:\n                    {\n                        FileStream fs = File.OpenRead(s);\n                        if (fs.Length != 0xa38)\n                        {\n                            Console.WriteLine(\"{0}: file size is wrong, skipped.\", filename);\n                            failureCount++;\n                            continue;\n                        }\n\n                        byte[] data = new byte[0xa38];\n                        fs.ReadBlock(data, 0, 0xa38);\n                        fs.Close();\n\n                        // battletower/download.asp response: 2616 bytes\n                        // 00-63b: BattleTowerRecord objects x7\n                        // 63c-a37: BattleTowerTrainerProfile objects x30\n                        for (int x = 0; x < 7; x++)\n                        {\n                            try\n                            {\n                                BattleTowerRecord4 record = new BattleTowerRecord4(pokedex, data, 0xe4 * x);\n                                record.PID = 0;\n                                record.Rank = rank;\n                                record.RoomNum = room;\n                                record.BattlesWon = 7;\n                                db.BattleTowerUpdateRecord4(record);\n                                opponentSuccessCount++;\n                            }\n                            catch (Exception ex)\n                            {\n                                Console.WriteLine(ex.Message);\n                                opponentFailureCount++;\n                            }\n                        }\n\n                        for (int x = 0; x < 30; x++)\n                        {\n                            try\n                            {\n                                BattleTowerProfile4 profile = new BattleTowerProfile4(data, 0x63c + 0x22 * x);\n                                BattleTowerRecord4 record = new BattleTowerRecord4(pokedex);\n                                record.Profile = profile;\n                                record.PID = 0;\n                                record.Rank = rank;\n                                record.RoomNum = room;\n                                db.BattleTowerAddLeader4(record);\n                                leaderSuccessCount++;\n                            }\n                            catch (Exception ex)\n                            {\n                                Console.WriteLine(ex.Message);\n                                leaderFailureCount++;\n                            }\n                        }\n                    } break;\n\n                    case 5:\n                    {\n                        FileStream fs = File.OpenRead(s);\n                        if (fs.Length != 0xab4)\n                        {\n                            Console.WriteLine(\"{0}: file size is wrong, skipped.\", filename);\n                            failureCount++;\n                            continue;\n                        }\n\n                        byte[] data = new byte[0xab4];\n                        fs.ReadBlock(data, 0, 0xab4);\n                        fs.Close();\n\n                        //web/battletower/download.asp response: 2700 bytes\n                        //00-68f: BattleSubwayRecord objects x7\n                        //690-a8b: BattleSubwayTrainerProfile objects x30\n                        for (int x = 0; x < 7; x++)\n                        {\n                            try\n                            {\n                                BattleSubwayRecord5 record = new BattleSubwayRecord5(pokedex, data, 0xf0 * x);\n                                record.PID = 0;\n                                record.Rank = rank;\n                                record.RoomNum = room;\n                                record.BattlesWon = 7;\n                                record.Unknown4 = new byte[5];\n                                db.BattleSubwayUpdateRecord5(record);\n                                opponentSuccessCount++;\n                            }\n                            catch (Exception ex)\n                            {\n                                Console.WriteLine(ex.Message);\n                                opponentFailureCount++;\n                            }\n                        }\n\n                        for (int x = 0; x < 30; x++)\n                        {\n                            try\n                            {\n                                BattleSubwayProfile5 profile = new BattleSubwayProfile5(data, 0x690 + 0x22 * x);\n                                BattleSubwayRecord5 record = new BattleSubwayRecord5(pokedex);\n                                record.Profile = profile;\n                                record.PID = 0;\n                                record.Rank = rank;\n                                record.RoomNum = room;\n                                db.BattleSubwayAddLeader5(record);\n                                leaderSuccessCount++;\n                            }\n                            catch (Exception ex)\n                            {\n                                Console.WriteLine(ex.Message);\n                                leaderFailureCount++;\n                            }\n                        }\n                    } break;\n                }\n\n                Console.WriteLine(\"{0} complete\", s);\n            }\n\n            Console.WriteLine(\"Added {0} files, {1} opponents, {2} leaders.\", successCount, opponentSuccessCount, leaderSuccessCount);\n            Console.WriteLine(\"Failed: {0} files, {1} opponents, {2} leaders.\", failureCount, opponentFailureCount, leaderFailureCount);\n            Console.ReadKey();\n        }\n    }\n}\n"
  },
  {
    "path": "towerRestorer4/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"towerRestorer4\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"towerRestorer4\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"f2a9df2e-eed3-49fb-948c-f6cf46914f51\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "towerRestorer4/towerRestorer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{750A0BFD-7258-4B32-A4F9-60EEEB0BA64A}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>towerRestorer</RootNamespace>\n    <AssemblyName>towerRestorer</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408efc7e-c6b0-4160-8628-2679e34385ce}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "web/Default.aspx",
    "content": "﻿<%@ Page Title=\"Poké Classic Network\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx.cs\" Inherits=\"PkmnFoundations.GTS.Default\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n<%@ Register TagPrefix=\"pf\" TagName=\"LabelTextBox\" Src=\"~/controls/LabelTextBox.ascx\" %>\n<%@ Register TagPrefix=\"pf\" TagName=\"DnsAddress\" Src=\"~/controls/DnsAddress.ascx\" %>\n\n<asp:Content ID=\"conHead\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"home\" runat=\"server\" />\n</asp:Content>\n\n<%--\n<asp:Content ID=\"conLeft\" ContentPlaceHolderID=\"cpLeft\" runat=\"server\">\n    &nbsp;\n    <pf:RequireCss Key=\"login\" CssUrl=\"~/css/login.css\" After=\"main\" runat=\"server\" />\n    <asp:PlaceHolder Visible=\"false\" runat=\"server\">\n    <div class=\"gtsSection gtsLogin\">\n    <form id=\"theForm\" runat=\"server\">\n        <pf:LabelTextBox ID=\"txtUsername\" Label=\"Username\" runat=\"server\" />\n        <pf:LabelTextBox ID=\"txtPassword\" Label=\"Password\" TextMode=\"Password\" runat=\"server\" />\n        <asp:Button ID=\"btnSubmit\" CssClass=\"large\" Text=\"Login\" runat=\"server\" />\n    </form>\n\n    <asp:HyperLink ID=\"hlRegister\" Text=\"Create an account\" NavigateUrl=\"#\" runat=\"server\" />\n    </div>\n    </asp:PlaceHolder>\n\n</asp:Content>\n    %--%>\n\n<asp:Content ID=\"conMain\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n\n    <h2>About</h2>\n    <p>Poké Classic Network provides GTS, battle videos, and other related\n    services for Generation IV and V games. It runs in combination with Wiimmfi\n    and Kaeru WFC which provide general purpose NWFC emulation and SSL\n    offloading, respectively. (For reasons beyond my control, I cannot\n    guarantee compatibility with AltWFC servers at this time.)</p>\n\n    <h2>Getting started</h2>\n    <div class=\"gtsFloatRight\">\n        \n    </div>\n    <p>All you need to do is change the <strong>primary</strong> DNS to\n        <code><pf:DnsAddress runat=\"server\" /></code> on your DS. Make sure the\n        <strong>secondary</strong> DNS is either <code>0.0.0.0</code> or\n        otherwise the same as the primary.\n        <em>Failure to follow these instructions may lead to connection\n            instability and communication errors.</em></p>\n        <p></p>\n</asp:Content>\n"
  },
  {
    "path": "web/Default.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.GTS;\nusing System.Text;\n\nnamespace PkmnFoundations.GTS\n{\n    public partial class Default : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "web/Default.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS\n{\n\n\n    public partial class Default\n    {\n\n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n    }\n}\n"
  },
  {
    "path": "web/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"PkmnFoundations.Web.Global\" Language=\"C#\" %>\n"
  },
  {
    "path": "web/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Security;\nusing System.Web.SessionState;\nusing PkmnFoundations.Data;\n\nnamespace PkmnFoundations.Web\n{\n    public class Global : System.Web.HttpApplication\n    {\n        void Application_Start(object sender, EventArgs e)\n        {\n            // Code that runs on application startup\n            Application[\"pkmncfPokedex\"] = new Pokedex.Pokedex(Database.Instance, false);\n        }\n\n        void Application_End(object sender, EventArgs e)\n        {\n            //  Code that runs on application shutdown\n\n        }\n\n        void Application_Error(object sender, EventArgs e)\n        {\n            // Code that runs when an unhandled error occurs\n\n        }\n\n        void Session_Start(object sender, EventArgs e)\n        {\n            // Code that runs when a new session is started\n\n        }\n\n        void Session_End(object sender, EventArgs e)\n        {\n            // Code that runs when a session ends. \n            // Note: The Session_End event is raised only when the sessionstate mode\n            // is set to InProc in the Web.config file. If session mode is set to StateServer \n            // or SQLServer, the event is not raised.\n\n        }\n\n        void Application_BeginRequest(object sender, EventArgs e)\n        {\n            String pathInfo, query;\n            String targetUrl = RewriteUrl(Request.Url.PathAndQuery, out pathInfo, out query);\n\n            if (targetUrl != null)\n            {\n                Context.RewritePath(targetUrl, pathInfo, query, false);\n            }\n        }\n\n        void Application_EndRequest(object sender, EventArgs e)\n        {\n\n        }\n\n        public static String RewriteUrl(String url, out String pathInfo, out String query)\n        {\n            int q = url.IndexOf('?');\n            String path;\n            pathInfo = \"\";\n\n            if (q < 0)\n            {\n                path = url;\n                query = \"\";\n            }\n            else\n            {\n                path = url.Substring(0, q);\n                query = url.Substring(q + 1);\n            }\n\n            // todo: optimize and extend url pattern matching\n            // fixme: this doesn't work if the application isn't mounted at root\n            String[] split = path.Split('/');\n            if (split[0].Length > 0) return null;\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "web/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"web\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"web\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"3dd50bf8-64a1-4ca9-89fc-a3b120e08442\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "web/Properties/PublishProfiles/Public.pubxml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file is used by the publish/package process of your Web project. You can customize the behavior of this process\nby editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <WebPublishMethod>MSDeploy</WebPublishMethod>\n    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>\n    <LastUsedPlatform>Any CPU</LastUsedPlatform>\n    <SiteUrlToLaunchAfterPublish>https://pkmnclassic.net</SiteUrlToLaunchAfterPublish>\n    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>\n    <ExcludeApp_Data>False</ExcludeApp_Data>\n    <MSDeployServiceURL></MSDeployServiceURL>\n    <DeployIisAppPath></DeployIisAppPath>\n    <RemoteSitePhysicalPath />\n    <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>\n    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>\n    <EnableMSDeployBackup>True</EnableMSDeployBackup>\n    <UserName></UserName>\n    <_SavePWD>False</_SavePWD>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "web/RoomLeaders.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"RoomLeaders.aspx.cs\" Inherits=\"PkmnFoundations.GTS.RoomLeaders\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n    <form id=\"theForm\" runat=\"server\">\n    <p>Enter the rank and room number to get leader info:</p>\n    <div>\n        Rank:\n        <asp:TextBox ID=\"txtRank\" runat=\"server\" />\n    </div>\n    <div>\n        Room number:\n        <asp:TextBox ID=\"txtRoom\" runat=\"server\" />\n    </div>\n        <div>\n            Generation:\n            <asp:RadioButtonList ID=\"rbGeneration\" RepeatLayout=\"Flow\" runat=\"server\">\n                <asp:ListItem Text=\"4\" Value=\"4\" Selected=\"True\" />\n                <asp:ListItem Text=\"5\" Value=\"5\" />\n            </asp:RadioButtonList>\n        </div>\n    <div>\n        <asp:Button ID=\"btnGet\" Text=\"Get\" OnClick=\"btnGet_Click\" runat=\"server\" />\n    </div>\n\n    <div>\n        <asp:Literal ID=\"litResults\" runat=\"server\" />\n    </div>\n        </form>\n</asp:Content>\n"
  },
  {
    "path": "web/RoomLeaders.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Web;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS\n{\n    public partial class RoomLeaders : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnGet_Click(object sender, EventArgs e)\n        {\n            byte rank;\n            byte room;\n\n            if (!Byte.TryParse(txtRank.Text, out rank) ||\n                !Byte.TryParse(txtRoom.Text, out room))\n            {\n                litResults.Text = \"Please type numbers.\";\n                return;\n            }\n\n            if (rank > 10 || rank < 1)\n            {\n                litResults.Text = \"Rank must be 1-10.\";\n            }\n            if (room > 50 || rank < 1)\n            {\n                litResults.Text = \"Room must be 1-50.\";\n            }\n\n            rank--;\n            room--;\n\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(Context.Application);\n\n            switch (rbGeneration.SelectedValue)\n            {\n                case \"4\":\n                {\n                    BattleTowerProfile4[] results = Database.Instance.BattleTowerGetLeaders4(pokedex, rank, room);\n\n                    StringBuilder builder = new StringBuilder();\n\n                    builder.Append(\"<p>Leaders:</p><ul>\");\n                    foreach (BattleTowerProfile4 profile in results)\n                    {\n                        builder.Append(\"<li>\");\n                        TrendyPhrase4 tp = profile.PhraseLeader;\n                        builder.Append(tp.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n                        builder.Append(\"</li>\");\n                    }\n                    builder.Append(\"</ul><p>Opponents:</p><ul>\");\n\n                    BattleTowerRecord4[] opponents = Database.Instance.BattleTowerGetOpponents4(pokedex, -1, rank, room);\n                    foreach (BattleTowerRecord4 record in opponents)\n                    {\n                        builder.Append(\"<li>\");\n\n                        builder.Append(record.PhraseChallenged.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n                        builder.Append(\"<br />\");\n\n                        builder.Append(record.PhraseWon.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n                        builder.Append(\"<br />\");\n\n                        builder.Append(record.PhraseLost.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n\n                        builder.Append(\"</li>\");\n                    }\n                    litResults.Text = builder.ToString();\n                } break;\n                case \"5\":\n                    {\n                        BattleSubwayProfile5[] results = Database.Instance.BattleSubwayGetLeaders5(pokedex, rank, room);\n\n                        StringBuilder builder = new StringBuilder();\n\n                        builder.Append(\"<p>Leaders:</p><ul>\");\n                        foreach (BattleSubwayProfile5 profile in results)\n                        {\n                            builder.Append(\"<li>\");\n                            TrendyPhrase5 tp = profile.PhraseLeader;\n                            builder.Append(tp.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n                            builder.Append(\"</li>\");\n                        }\n                        builder.Append(\"</ul><p>Opponents:</p><ul>\");\n\n                        BattleSubwayRecord5[] opponents = Database.Instance.BattleSubwayGetOpponents5(pokedex, -1, rank, room);\n                        foreach (BattleSubwayRecord5 record in opponents)\n                        {\n                            builder.Append(\"<li>\");\n\n                            builder.Append(record.PhraseChallenged.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n                            builder.Append(\"<br />\");\n\n                            builder.Append(record.PhraseWon.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n                            builder.Append(\"<br />\");\n\n                            builder.Append(record.PhraseLost.Render(\"<span style=\\\"color: #0066ff; font-weight: bold;\\\">{0}</span>\"));\n\n                            builder.Append(\"</li>\");\n                        }\n                        litResults.Text = builder.ToString();\n                    } break;\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/RoomLeaders.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS {\n    \n    \n    public partial class RoomLeaders {\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// txtRank control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtRank;\n        \n        /// <summary>\n        /// txtRoom control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtRoom;\n        \n        /// <summary>\n        /// rbGeneration control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.RadioButtonList rbGeneration;\n        \n        /// <summary>\n        /// btnGet control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnGet;\n        \n        /// <summary>\n        /// litResults control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litResults;\n    }\n}\n"
  },
  {
    "path": "web/Web.Public.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\n  <connectionStrings xdt:Transform=\"Replace\">\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n  </system.web>\n\n  <system.webServer>\n    <rewrite xdt:Transform=\"Insert\">\n      <rules>\n        <rule name=\"Host and HTTPS redirect\" stopProcessing=\"true\">\n          <match url=\"(.*)\" />\n          <conditions logicalGrouping=\"MatchAny\">\n            <add input=\"{HTTP_HOST}\" pattern=\"^pkmnclassic\\.net$\" negate=\"true\" />\n            <add input=\"{HTTPS}\" pattern=\"OFF\" />\n          </conditions>\n          <action type=\"Redirect\" url=\"https://pkmnclassic.net/{R:1}\" />\n        </rule>\n      </rules>\n    </rewrite>\n  </system.webServer>\n  \n</configuration>\n"
  },
  {
    "path": "web/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n\n<configuration>\n  <connectionStrings>\n    <add name=\"pkmnFoundationsConnectionString\"\n         connectionString=\"Server=localhost;Database=gts;User ID=gts;Password=gts;Pooling=true;charset=utf8;Allow User Variables=True\"\n         providerName=\"MySql.Data.MySqlClient\" />\n  </connectionStrings>\n\n  <system.web>\n    <compilation debug=\"true\" targetFramework=\"4.0\" />\n<!--\n    <authentication mode=\"Forms\">\n      <forms loginUrl=\"~/Account/Login.aspx\" timeout=\"2880\" />\n    </authentication>\n    -->\n\n    <membership>\n      <providers>\n        <clear />\n      </providers>\n    </membership>\n\n    <profile>\n      <providers>\n        <clear />\n      </providers>\n    </profile>\n\n    <roleManager enabled=\"false\">\n      <providers>\n        <clear />\n      </providers>\n    </roleManager>\n\n    <customErrors mode=\"Off\" />\n\n  </system.web>\n\n  <system.webServer>\n    <httpErrors existingResponse=\"PassThrough\"></httpErrors>\n  </system.webServer>\n  \n  <system.data>\n    <DbProviderFactories>\n      <remove invariant=\"MySql.Data.MySqlClient\" />\n      <add name=\"MySQL Data Provider\" invariant=\"MySql.Data.MySqlClient\" \n           description=\".Net Framework Data Provider for MySQL\" \n           type=\"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d\" />\n    </DbProviderFactories>\n  </system.data>\n</configuration>\n"
  },
  {
    "path": "web/admin/AddBoxes.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"AddBoxes.aspx.cs\" Inherits=\"PkmnFoundations.GTS.admin.AddBoxes\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"admin\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n    <div>\n    <p>Upload a wiresharked box search response here to add it to the database:</p>\n    <asp:FileUpload ID=\"fuBox\" runat=\"server\" />\n    <asp:Button ID=\"btnSend\" Text=\"Send\" OnClick=\"btnSend_Click\" runat=\"server\" />\n    </div>\n    <asp:Literal ID=\"litMessage\" runat=\"server\" />\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/admin/AddBoxes.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Web;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS.admin\n{\n    public partial class AddBoxes : System.Web.UI.Page\n    {\n        protected void Page_Init(object sender, EventArgs e)\n        {\n            litMessage.Text = \"\";\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnSend_Click(object sender, EventArgs e)\n        {\n            byte[] data = fuBox.FileBytes;\n            if (data.Length < 0xf8)\n            {\n                Fail(); return;\n            }\n\n            Common.CryptMessage(data);\n            if (data[0x04] != 0x09 ||\n                data[0x05] != 0x52 ||\n                data[0x06] != 0x00 ||\n                data[0x07] != 0x00)\n            {\n                Fail(); return;\n            }\n\n            int results = BitConverter.ToInt32(data, 0x08);\n            if (data.Length != 12 + 556 * results)\n            {\n                Fail(); return;\n            }\n\n            int added = 0;\n\n            for (int x = 0; x < results; x++)\n            {\n                int pid = BitConverter.ToInt32(data, 12 + 556 * x);\n                BoxLabels4 label = (BoxLabels4)BitConverter.ToInt32(data, 16 + 556 * x);\n                ulong serial = BitConverter.ToUInt64(data, 20 + 556 * x);\n                if (serial == 0) continue;\n\n                byte[] result = new byte[540];\n                Array.Copy(data, 28 + 556 * x, result, 0, 540);\n\n                BoxRecord4 record = new BoxRecord4(pid, label, serial, result);\n                if (Database.Instance.BoxUpload4(record) != 0) added++;\n            }\n\n            litMessage.Text = \"Added \" + added.ToString() + \" boxes to the database.\";\n        }\n\n        private void Fail()\n        {\n            litMessage.Text = \"There was an error with the data.\";\n        }\n    }\n}"
  },
  {
    "path": "web/admin/AddBoxes.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.admin {\n    \n    \n    public partial class AddBoxes {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// fuBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.FileUpload fuBox;\n        \n        /// <summary>\n        /// btnSend control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSend;\n        \n        /// <summary>\n        /// litMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage;\n    }\n}\n"
  },
  {
    "path": "web/admin/AddDressup.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"AddDressup.aspx.cs\" Inherits=\"PkmnFoundations.GTS.test.AddDressup\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"admin\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n    <div>\n    <p>Upload a wiresharked Dressup search response here to add it to the database:</p>\n    <asp:FileUpload ID=\"fuBox\" runat=\"server\" />\n    <asp:Button ID=\"btnSend\" Text=\"Send\" OnClick=\"btnSend_Click\" runat=\"server\" />\n    </div>\n    <asp:Literal ID=\"litMessage\" runat=\"server\" />\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/admin/AddDressup.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing System.IO;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Web;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS.test\n{\n    public partial class AddDressup : System.Web.UI.Page\n    {\n        protected void Page_Init(object sender, EventArgs e)\n        {\n            litMessage.Text = \"\";\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnSend_Click(object sender, EventArgs e)\n        {\n            byte[] data = fuBox.FileBytes;\n            if (data.Length < 0xf8)\n            {\n                Fail(); return;\n            }\n\n            Common.CryptMessage(data);\n            if (data[0x04] != 0x21 || \n                data[0x05] != 0x4e ||\n                data[0x06] != 0x00 ||\n                data[0x07] != 0x00)\n            {\n                Fail(); return;\n            }\n\n            int results = BitConverter.ToInt32(data, 0x08);\n            if (data.Length != 12 + 236 * results)\n            {\n                Fail(); return;\n            }\n\n            int added = 0;\n\n            for (int x = 0; x < results; x++)\n            {\n                int pid = BitConverter.ToInt32(data, 12 + 236 * x);\n                ulong serial = BitConverter.ToUInt64(data, 16 + 236 * x);\n                if (serial == 0) continue;\n\n                byte[] result = new byte[224];\n                Array.Copy(data, 24 + 236 * x, result, 0, 224);\n\n                DressupRecord4 record = new DressupRecord4(pid, serial, result);\n                if (Database.Instance.DressupUpload4(record) != 0) added++;\n            }\n\n            litMessage.Text = \"Added \" + added.ToString() + \" dressup photos to the database.\";\n        }\n\n        private void Fail()\n        {\n            litMessage.Text = \"There was an error with the data.\";\n        }\n    }\n}\n"
  },
  {
    "path": "web/admin/AddDressup.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.test {\n    \n    \n    public partial class AddDressup {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// fuBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.FileUpload fuBox;\n        \n        /// <summary>\n        /// btnSend control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSend;\n        \n        /// <summary>\n        /// litMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage;\n    }\n}\n"
  },
  {
    "path": "web/admin/AddMusical.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"AddMusical.aspx.cs\" Inherits=\"PkmnFoundations.GTS.admin.AddMusical\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"admin\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n    <div>\n    <p>Upload a wiresharked Musical search response here to add it to the database:</p>\n    <asp:FileUpload ID=\"fuBox\" runat=\"server\" />\n    <asp:Button ID=\"btnSend\" Text=\"Send\" OnClick=\"btnSend_Click\" runat=\"server\" />\n    </div>\n    <asp:Literal ID=\"litMessage\" runat=\"server\" />\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/admin/AddMusical.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS.admin\n{\n    public partial class AddMusical : System.Web.UI.Page\n    {\n        protected void Page_Init(object sender, EventArgs e)\n        {\n            litMessage.Text = \"\";\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnSend_Click(object sender, EventArgs e)\n        {\n            byte[] data = fuBox.FileBytes;\n            if (data.Length < 0x248)\n            {\n                Fail(); return;\n            }\n\n            if (data[0x04] != 0x09 ||\n                data[0x05] != 0x52 ||\n                data[0x06] != 0x00 ||\n                data[0x07] != 0x00)\n            {\n                Fail(); return;\n            }\n\n            int results = BitConverter.ToInt32(data, 0x08);\n            if (data.Length != 12 + 572 * results)\n            {\n                Fail(); return;\n            }\n\n            int added = 0;\n\n            for (int x = 0; x < results; x++)\n            {\n                int pid = BitConverter.ToInt32(data, 12 + 572 * x);\n                ulong serial = BitConverter.ToUInt64(data, 16 + 572 * x);\n                if (serial == 0) continue;\n\n                byte[] result = new byte[560];\n                Array.Copy(data, 24 + 572 * x, result, 0, 560);\n\n                MusicalRecord5 record = new MusicalRecord5(pid, serial, result);\n                if (Database.Instance.MusicalUpload5(record) != 0) added++;\n            }\n\n            litMessage.Text = \"Added \" + added.ToString() + \" musical photos to the database.\";\n        }\n\n        private void Fail()\n        {\n            litMessage.Text = \"There was an error with the data.\";\n        }\n    }\n}"
  },
  {
    "path": "web/admin/AddMusical.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.admin {\n    \n    \n    public partial class AddMusical {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// fuBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.FileUpload fuBox;\n        \n        /// <summary>\n        /// btnSend control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSend;\n        \n        /// <summary>\n        /// litMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage;\n    }\n}\n"
  },
  {
    "path": "web/admin/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n    <authorization xdt:Transform=\"Replace\">\n      <allow users=\"*\"/>\n    </authorization>\n\n  </system.web>\n</configuration>"
  },
  {
    "path": "web/admin/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n    <authorization xdt:Transform=\"Replace\">\n      <deny users=\"*\"/>\n    </authorization>\n    \n  </system.web>\n</configuration>"
  },
  {
    "path": "web/admin/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n<configuration>\n  <system.web>\n    <authorization>\n\n    </authorization>\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "web/battlevideo/Default.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx.cs\" Inherits=\"PkmnFoundations.GTS.BattleVideo\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"bv\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<h1>Battle videos</h1>\n<p>Since the official Battle Video server has gone offline, you can no longer\nqueue your battle videos for retrieval. You can still type your battle video\nID into one of the below forms to check if I have it backed up. If not, you can\ntry <a href=\"https://www.pokecheck.org/?p=search&vid=\">Pokécheck</a>. If it’s\nnot there, your video is gone. If it’s still on your game cartridge, you can\nreupload it to fGTS under a new ID.</p>\n<form id=\"theForm\" runat=\"server\">\n<div>\n<h2>Generation IV (Platinum, Heart Gold, Soul Silver)</h2>\n<asp:TextBox ID=\"txtBattleVideo4\" runat=\"server\" />\n<asp:Button ID=\"btnSend4\" Text=\"Check\" OnClick=\"btnSend4_Click\" runat=\"server\" />\n<asp:Literal ID=\"litMessage4\" runat=\"server\" />\n</div>\n<div class=\"stats\">\n<asp:Literal ID=\"litTotal4\" runat=\"server\" />\nvideos saved in total.\n</div>\n\n<div>\n<h2>Generation V (Black, White, Black 2, White 2)</h2>\n<asp:TextBox ID=\"txtBattleVideo5\" runat=\"server\" />\n<asp:Button ID=\"btnSend5\" Text=\"Check\" OnClick=\"btnSend5_Click\" runat=\"server\" />\n<asp:Literal ID=\"litMessage5\" runat=\"server\" />\n<div class=\"stats\">\n<asp:Literal ID=\"litTotal5\" runat=\"server\" />\nvideos saved in total.\n</div>\n</div>\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/battlevideo/Default.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing MySql.Data.MySqlClient;\nusing System.Configuration;\nusing PkmnFoundations.Data;\n\nnamespace PkmnFoundations.GTS\n{\n    public partial class BattleVideo : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            ulong bvCount4, bvCount5;\n\n            if (Cache[\"BattleVideoCount4\"] == null ||\n                Cache[\"BattleVideoCount5\"] == null)\n            {\n                bvCount4 = Database.Instance.BattleVideoCount4();\n                bvCount5 = Database.Instance.BattleVideoCount5();\n                Cache.Insert(\"BattleVideoCount4\", bvCount4, null,\n                    DateTime.Now.AddMinutes(1),\n                    System.Web.Caching.Cache.NoSlidingExpiration);\n                Cache.Insert(\"BattleVideoCount5\", bvCount5, null,\n                    DateTime.Now.AddMinutes(1),\n                    System.Web.Caching.Cache.NoSlidingExpiration);\n            }\n            else\n            {\n                bvCount4 = Convert.ToUInt64(Cache[\"BattleVideoCount4\"]);\n                bvCount5 = Convert.ToUInt64(Cache[\"BattleVideoCount5\"]);\n            }\n\n            litMessage4.Text = \"\";\n            litMessage5.Text = \"\";\n\n            litTotal4.Text = HttpUtility.HtmlEncode(bvCount4.ToString());\n            litTotal5.Text = HttpUtility.HtmlEncode(bvCount5.ToString());\n        }\n\n        protected void btnSend4_Click(object sender, EventArgs e)\n        {\n            ulong id;\n            UInt64.TryParse(txtBattleVideo4.Text.Replace('-', ' ').Replace(\" \", \"\"), out id);\n            if (id == 0)\n            {\n                litMessage4.Text = \"The battle video ID could not be read. Please enter a battle video ID in the format, xx-xxxxx-xxxxx, and try again.\";\n                return;\n            }\n\n            using (MySqlConnection db = CreateConnection())\n            {\n                db.Open();\n                QueueVideoId4(db, id);\n                db.Close();\n            }\n        }\n\n        private void QueueVideoId4(MySqlConnection db, ulong id)\n        {\n            long count = (long)db.ExecuteScalar(\"SELECT Count(*) FROM TerminalBattleVideos4 \" +\n                \"WHERE SerialNumber = @serial_number\", \n                new MySqlParameter(\"@serial_number\", id));\n            if (count > 0)\n            {\n                litMessage4.Text = \"This battle video has been saved.\";\n                return;\n            }\n            litMessage4.Text = \"This battle video is lost.\";\n        }\n\n        protected void btnSend5_Click(object sender, EventArgs e)\n        {\n            ulong id;\n            UInt64.TryParse(txtBattleVideo5.Text.Replace('-', ' ').Replace(\" \", \"\"), out id);\n            if (id == 0)\n            {\n                litMessage5.Text = \"The battle video ID could not be read. Please enter a battle video ID in the format, xx-xxxxx-xxxxx, and try again.\";\n                return;\n            }\n\n            using (MySqlConnection db = CreateConnection())\n            {\n                db.Open();\n                QueueVideoId5(db, id);\n                db.Close();\n            }\n        }\n\n        private void QueueVideoId5(MySqlConnection db, ulong id)\n        {\n            long count = (long)db.ExecuteScalar(\"SELECT Count(*) FROM TerminalBattleVideos5 \" +\n                \"WHERE SerialNumber = @serial_number\",\n                new MySqlParameter(\"@serial_number\", id));\n            if (count > 0)\n            {\n                litMessage5.Text = \"This battle video has been saved.\";\n                return;\n            }\n            litMessage5.Text = \"This battle video is lost.\";\n        }\n\n        public static MySqlConnection CreateConnection()\n        {\n            return new MySqlConnection(ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"].ConnectionString);\n        }\n    }\n}"
  },
  {
    "path": "web/battlevideo/Default.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS {\n    \n    \n    public partial class BattleVideo {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// txtBattleVideo4 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtBattleVideo4;\n        \n        /// <summary>\n        /// btnSend4 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSend4;\n        \n        /// <summary>\n        /// litMessage4 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage4;\n        \n        /// <summary>\n        /// litTotal4 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litTotal4;\n        \n        /// <summary>\n        /// txtBattleVideo5 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtBattleVideo5;\n        \n        /// <summary>\n        /// btnSend5 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSend5;\n        \n        /// <summary>\n        /// litMessage5 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage5;\n        \n        /// <summary>\n        /// litTotal5 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litTotal5;\n    }\n}\n"
  },
  {
    "path": "web/controls/DnsAddress.ascx",
    "content": "﻿<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"DnsAddress.ascx.cs\" Inherits=\"PkmnFoundations.Web.controls.DnsAddress\" %>\n\n178.62.43.212<asp:PlaceHolder ID=\"phAttribution\" Visible=\"false\" runat=\"server\">\n    (<a href=\"https://kaeru.world/projects/wfc\">Kaeru WFC</a>)\n</asp:PlaceHolder>"
  },
  {
    "path": "web/controls/DnsAddress.ascx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace PkmnFoundations.Web.controls\n{\n    public partial class DnsAddress : System.Web.UI.UserControl\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        public bool ShowAttribution\n        {\n            get\n            {\n                return phAttribution.Visible;\n            }\n            set\n            {\n                phAttribution.Visible = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/controls/DnsAddress.ascx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.Web.controls\n{\n\n\n    public partial class DnsAddress\n    {\n\n        /// <summary>\n        /// phAttribution control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phAttribution;\n    }\n}\n"
  },
  {
    "path": "web/controls/ForeignLookup.ascx",
    "content": "﻿<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"ForeignLookup.ascx.cs\" Inherits=\"PkmnFoundations.Web.controls.ForeignLookup\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<pf:RequireCss Key=\"form\" CssUrl=\"~/css/form.css\" After=\"main\" runat=\"server\" />\n<pf:RequireScript Key=\"jquery\" ScriptUrl=\"~/scripts/jquery-1.11.1.min.js\" runat=\"server\" />\n<pf:RequireScript Key=\"form\" ScriptUrl=\"~/scripts/form.js\" runat=\"server\" />\n\n<div id=\"main\" class=\"pfLookup\" tabindex=\"0\" runat=\"server\">\n    <div class=\"pfLookupOuter\">\n    <asp:TextBox ID=\"txtInput\" class=\"input\" autocomplete=\"off\" runat=\"server\" />\n    </div>\n    <div id=\"results\" class=\"results\" style=\"visibility: hidden;\" runat=\"server\">\n        <div style=\"text-align: center; padding: 8px 0;\">\n        <pf:RetinaImage ID=\"imgLoading\" ImageUrl=\"~/images/working.gif\" AlternateSizes=\"2\" Width=\"32\" Height=\"32\" style=\"margin: 0 auto;\" runat=\"server\" />\n        </div>\n    </div>\n    <input type=\"hidden\" ID=\"hdSelectedValue\" runat=\"server\" />\n</div>\n"
  },
  {
    "path": "web/controls/ForeignLookup.ascx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing System.Web.UI.HtmlControls;\n\nnamespace PkmnFoundations.Web.controls\n{\n    public partial class ForeignLookup : System.Web.UI.UserControl\n    {\n        protected void Page_Init(object sender, EventArgs e)\n        {\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            if (SourceUrl != null)\n            {\n                String url = ResolveUrl(SourceUrl);\n                //url = url + (url.Contains('?') ? \"&lang=\" : \"?lang=\") + ((BasePage)Page).Language;\n\n                String _params = \"\\'\" + this.ClientID + \"', '\"\n                                 + txtInput.ClientID + \"', '\"\n                                 + results.ClientID + \"', '\"\n                                 + MaxRows.ToString() + \"', '\"\n                                 + url + \"\\'\";\n\n                main.Attributes[\"onfocus\"] = \"pfHandleLookupKeypress(\" + _params + \")\";\n                main.Attributes[\"onblur\"] = \"pfHideLookupResults('\" + results.ClientID + \"')\";\n                txtInput.Attributes[\"onfocus\"] = \"pfHandleLookupKeypress(\" + _params + \")\";\n                txtInput.Attributes[\"onkeypress\"] = \"return pfHandleLookupKeypress2(\" + _params + \", event)\";\n                txtInput.Attributes[\"onkeyup\"] = \"return pfHandleLookupKeypress3(\" + _params + \")\";\n                txtInput.Attributes[\"onchange\"] = \"pfHandleLookupKeypress(\" + _params + \")\";\n                txtInput.Attributes[\"onblur\"] = \"setTimeout(function(){pfHideLookupResults('\" + results.ClientID + \"')},100)\";\n                hdSelectedValue.Attributes[\"onchange\"] = OnClientValueChanged;\n            }\n        }\n\n        public String Value\n        {\n            get\n            {\n                return hdSelectedValue.Value;\n            }\n            set\n            {\n                hdSelectedValue.Value = value;\n            }\n        }\n\n        public String Text\n        {\n            get\n            {\n                return txtInput.Text;\n            }\n            set\n            {\n                txtInput.Text = value;\n            }\n        }\n\n        public String SourceUrl { get; set; }\n        public int MaxRows { get; set; }\n        public String OnClientValueChanged { get; set; }\n        public String HiddenClientID\n        {\n            get\n            {\n                return hdSelectedValue.ClientID;\n            }\n        }\n\n        public String TextClientID\n        {\n            get\n            {\n                return txtInput.ClientID;\n            }\n        }\n\n        private String m_css_class;\n        public String CssClass \n        {\n            get\n            {\n                return m_css_class;\n            }\n            set\n            {\n                m_css_class = value;\n                main.Attributes[\"class\"] = \"pfLookup \" + Common.HtmlEncode(m_css_class);\n            }\n        }\n\n        protected override void LoadViewState(object savedState)\n        {\n            ForeignLookupViewState viewstate = (ForeignLookupViewState)savedState;\n            base.LoadViewState(viewstate.UserControlViewState);\n            SourceUrl = viewstate.SourceUrl;\n            MaxRows = viewstate.MaxRows;\n            OnClientValueChanged = viewstate.OnClientValueChanged;\n            CssClass = viewstate.CssClass;\n        }\n\n        protected override object SaveViewState()\n        {\n            ForeignLookupViewState viewstate = new ForeignLookupViewState();\n            viewstate.UserControlViewState = base.SaveViewState();\n            viewstate.SourceUrl = SourceUrl;\n            viewstate.MaxRows = MaxRows;\n            viewstate.OnClientValueChanged = OnClientValueChanged;\n            viewstate.CssClass = CssClass;\n            return viewstate;\n        }\n\n        [Serializable()]\n        private struct ForeignLookupViewState\n        {\n            public object UserControlViewState;\n            public String SourceUrl;\n            public int MaxRows;\n            public String OnClientValueChanged;\n            public String CssClass;\n        }\n    }\n}\n"
  },
  {
    "path": "web/controls/ForeignLookup.ascx.designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.Web.controls {\n    \n    \n    public partial class ForeignLookup {\n        \n        /// <summary>\n        /// main control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlGenericControl main;\n        \n        /// <summary>\n        /// txtInput control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtInput;\n        \n        /// <summary>\n        /// results control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlGenericControl results;\n        \n        /// <summary>\n        /// imgLoading control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.RetinaImage imgLoading;\n        \n        /// <summary>\n        /// hdSelectedValue control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlInputHidden hdSelectedValue;\n    }\n}\n"
  },
  {
    "path": "web/controls/LabelTextBox.ascx",
    "content": "﻿<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"LabelTextBox.ascx.cs\" Inherits=\"PkmnFoundations.GTS.controls.LabelTextBox\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<pf:RequireCss Key=\"form\" CssUrl=\"~/css/form.css\" After=\"main\" runat=\"server\" />\n<pf:RequireScript Key=\"jquery\" ScriptUrl=\"~/scripts/jquery-1.11.1.min.js\" runat=\"server\" />\n<pf:RequireScript Key=\"form\" ScriptUrl=\"~/scripts/form.js\" runat=\"server\" />\n\n<div class=\"pfLabelTextBox\">\n<asp:Label ID=\"theLabel\" AssociatedControlID=\"theTextBox\" runat=\"server\" />\n<asp:TextBox ID=\"theTextBox\" runat=\"server\" />\n</div>\n"
  },
  {
    "path": "web/controls/LabelTextBox.ascx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace PkmnFoundations.GTS.controls\n{\n    public partial class LabelTextBox : System.Web.UI.UserControl\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        public String Text\n        {\n            get\n            {\n                return theTextBox.Text;\n            }\n            set\n            {\n                theTextBox.Text = value;\n            }\n        }\n\n        public String Label\n        {\n            get\n            {\n                return theLabel.Text;\n            }\n            set\n            {\n                theLabel.Text = value;\n            }\n        }\n\n        public TextBoxMode TextMode\n        {\n            get\n            {\n                return theTextBox.TextMode;\n            }\n            set\n            {\n                theTextBox.TextMode = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/controls/LabelTextBox.ascx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.controls {\n    \n    \n    public partial class LabelTextBox {\n        \n        /// <summary>\n        /// theLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label theLabel;\n        \n        /// <summary>\n        /// theTextBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox theTextBox;\n    }\n}\n"
  },
  {
    "path": "web/controls/PokemonPicker.ascx",
    "content": "﻿<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"PokemonPicker.ascx.cs\" Inherits=\"PkmnFoundations.Web.controls.PokemonPicker\" %>\n<%@ Register TagPrefix=\"pf\" TagName=\"ForeignLookup\" Src=\"~/controls/ForeignLookup.ascx\" %>\n\n<pf:ForeignLookup ID=\"theLookup\" CssClass=\"pfPokemonPicker\" MaxRows=\"8\" SourceUrl=\"~/controls/PokemonSource.ashx\" runat=\"server\" />\n"
  },
  {
    "path": "web/controls/PokemonPicker.ascx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Structures;\n\nnamespace PkmnFoundations.Web.controls\n{\n    public partial class PokemonPicker : System.Web.UI.UserControl\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        public int ? Value\n        {\n            get\n            {\n                String value = theLookup.Value;\n                return String.IsNullOrEmpty(value) ? null : (int ?)Convert.ToInt32(value);\n            }\n            set\n            {\n                if (value == null) theLookup.Value = null;\n                theLookup.Value = value.ToString();\n            }\n        }\n\n        private Generations m_max_generation;\n        public Generations MaxGeneration\n        {\n            get\n            {\n                return m_max_generation;\n            }\n            set\n            {\n                m_max_generation = value;\n                theLookup.SourceUrl = \"~/controls/PokemonSource.ashx?limit=\" + Pokedex.Pokedex.SpeciesAtGeneration(value).ToString();\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/controls/PokemonPicker.ascx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.Web.controls {\n    \n    \n    public partial class PokemonPicker {\n        \n        /// <summary>\n        /// theLookup control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.controls.ForeignLookup theLookup;\n    }\n}\n"
  },
  {
    "path": "web/controls/PokemonSource.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"PokemonSource.ashx.cs\" Class=\"PkmnFoundations.Web.controls.PokemonSource\" %>\n"
  },
  {
    "path": "web/controls/PokemonSource.ashx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Web;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Structures;\n\nnamespace PkmnFoundations.Web.controls\n{\n    /// <summary>\n    /// Summary description for PokemonSource\n    /// </summary>\n    public class PokemonSource : ForeignLookupSource\n    {\n        protected override System.Data.DataTable GetData(HttpContext context, String query, int rows, Structures.Languages lang)\n        {\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(context.Application);\n            String iso = Format.ToIso639_1(lang);\n            query = query.ToLowerInvariant();\n            int natDex = 0;\n            Int32.TryParse(query, out natDex);\n            int limit = 0;\n            if (context.Request.QueryString[\"limit\"] != null)\n            {\n                limit = Convert.ToInt32(context.Request.QueryString[\"limit\"]);\n                if (natDex > limit) return null;\n            }\n\n            Func<KeyValuePair<int, Species>, bool> filter;\n            if (natDex > 0)\n                filter = pair => pair.Key == natDex;\n            else\n                filter = pair => pair.Key <= limit && pair.Value.Name[iso].ToLowerInvariant().Contains(query);\n\n            IEnumerable<Species> data;\n            data = pokedex.Species.Where(filter).OrderBy(pair => pair.Key).Take(rows).Select(pair => pair.Value);\n\n            DataTable dt = new DataTable();\n            dt.Columns.Add(\"Text\", typeof(String));\n            dt.Columns.Add(\"Value\", typeof(int));\n            dt.Columns.Add(\"html\", typeof(String));\n\n            foreach (Species s in data)\n            {\n                String name = s.Name[iso];\n                String html = \"<img src=\\\"\" + Common.ResolveUrl(WebFormat.SpeciesImageSmall(s)) +\n                    \"\\\" alt=\\\"\" + Common.HtmlEncode(name) +\n                    \"\\\" class=\\\"sprite speciesSmall\\\" width=\\\"40px\\\" height=\\\"32px\\\" />\" +\n                    String.Format(\"{0} (#{1})\",\n                    Common.HtmlEncode(name),\n                    s.NationalDex);\n\n                dt.Rows.Add(name, s.NationalDex, html);\n            }\n\n            return dt;\n        }\n    }\n}\n"
  },
  {
    "path": "web/css/form.css",
    "content": "﻿input[type=text], input[type=password], select, textarea\n{\n    border: 1px solid #999999;\n    background-color: white;\n    box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1) inset;\n    height: 14px;\n    padding: 3px 2px;\n    font-size: 10pt;\n    font-family: Arial,Helvetica,sans-serif;\n    border-radius: 2px;\n}\n\ninput[type=text]:focus, input[type=password]:focus, select, textarea:focus,\ninput[type=text]:focus, input[type=password]:focus, select, textarea:focus\n{\n\n}\n\ninput[type=submit], button, .ui-button\n{\n    border-radius: 2px;\n    background-color: #008fc4;\n    background-image: -moz-linear-gradient(top, #008fc4 0%, #00749f 100%); /* FF3.6+ */\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#008fc4), color-stop(100%,#00749f)); /* Chrome,Safari4+ */\n    background-image: -webkit-linear-gradient(top, #008fc4 0%,#00749f 100%); /* Chrome10+,Safari5.1+ */\n    background-image: -o-linear-gradient(top, #008fc4 0%,#00749f 100%); /* Opera 11.10+ */\n    background-image: -ms-linear-gradient(top, #008fc4 0%,#00749f 100%); /* IE10+ */\n    background-image: linear-gradient(to bottom, #008fc4 0%,#00749f 100%); /* W3C */\n    background-size: 100%;\n    box-shadow: 0 2px 1px -1px #89b4d5 inset, 0 1px 2px 0 rgba(0,0,0,0.1);\n    border: 1px solid;\n    border-color: #bcd1e4 #00749f #004a68 #89b4d5;\n    color: white;\n    text-shadow: 0 1px 0 #004a68;\n    font-family: Lato,Candara,'Meiryo UI',Arial,sans-serif;\n    font-weight: bold;\n}\n\na.ui-button\n{\n    color: white;\n}\n\ninput[type=submit], button\n{\n    height: 28px;\n    margin-bottom: 4px;\n    cursor: pointer;\n}\n\ninput[type=submit].large, button.large\n{\n    width: 236px;\n}\n\n.pfLabelTextBox\n{\n    position: relative;\n    background-color: white;\n    font-family: Arial,Helvetica,sans-serif;\n    display: inline-block;\n    margin: 0; padding: 0;\n    margin-bottom: 4px;\n    vertical-align: top;\n    border-radius: 2px;\n}\n\n.pfLabelTextBox label\n{\n    display: block;\n    height: 0;\n    overflow: visible;\n    position: relative;\n    top: 3px; left: 3px;\n    color: #cccccc;\n}\n\n.pfLabelTextBox input\n{\n    display: block;\n    background-color: transparent;\n    position: relative;\n    margin-bottom: 0;\n}\n\n.pfLabelTextBox input:focus, .pfLabelTextBox input.hasContent\n{\n    background-color: white;\n}\n\n.pfColGroup\n{\n    position: relative;\n    overflow: hidden;\n}\n\n.pfColumn\n{\n    float: left;\n    position: relative;\n}\n\n.gtsBox .pfColumn\n{\n    margin: 16px;\n}\n\n.pfFormSubmit\n{\n    position: absolute;\n    bottom: 12px;\n    right: 16px;\n}\n\n.pfFormGroup\n{\n    border-spacing: 0;\n    height: 100%;\n}\n\n.gtsBox .pfFormGroup\n{\n    border-radius: 4px;\n}\n\n.pfFormKey, .pfFormValue\n{\n    margin: 0;\n    padding: 4px 8px;\n    border-bottom: 1px solid rgba(0,0,0,0.3);\n    height: 18px;\n    background-image: -moz-linear-gradient(top, transparent 0%, rgba(0,0,0,0.05) 100%); /* FF3.6+ */\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,transparent), color-stop(100%,rgba(0,0,0,0.05))); /* Chrome,Safari4+ */\n    background-image: -webkit-linear-gradient(top, transparent 0%,rgba(0,0,0,0.05) 100%); /* Chrome10+,Safari5.1+ */\n    background-image: -o-linear-gradient(top, transparent 0%,rgba(0,0,0,0.05) 100%); /* Opera 11.10+ */\n    background-image: -ms-linear-gradient(top, transparent 0%,rgba(0,0,0,0.05) 100%); /* IE10+ */\n    background-image: linear-gradient(to bottom, transparent 0%,rgba(0,0,0,0.05) 100%); /* W3C */\n}\n\n.pfFormKey\n{\n    color: white;\n    text-align: left;\n    text-shadow: 0 1px 0 rgba(0,0,0,0.3);\n}\n\n.pfFormKey\n{\n    background-color: #82d2e0;\n}\n\n.pfFormValue\n{\n}\n\n.home .pfFormKey {background-color: #ff8063;}\n.gts .pfFormKey {background-color: #43c4ff;}\n.bv .pfFormKey {background-color: #9761e9;}\n.dw .pfFormKey {background-color: #fa79d4;}\n.dex .pfFormKey {background-color: #2dd350;}\n.stat .pfFormKey {background-color: #ffc321;}\n.test .pfFormKey {background-color: #82d2e0;}\n.admin .pfFormKey {background-color: #555555;}\n\n.pfFormValue\n{\n    background-color: #f2f2f2;\n}\n\n.pfRadListItem\n{\n    display: block;\n    margin: 4px 0;\n}\n\n.pfRadListItem *\n{\n    vertical-align: middle;\n}\n\n.pfRadListItem:first-child\n{\n    margin-top: 0;\n}\n\n.pfRadListItem:last-child\n{\n    margin-bottom: 0;\n}\n\n.ui-spinner\n{\n    display: inline-block;\n    position: relative;\n    padding-right: 18px;\n}\n\n.ui-spinner-input, input.ui-spinner-input\n{\n    border-radius: 2px 0 0 2px;\n    border-right: none;\n}\n\n.ui-spinner-button\n{\n    position: absolute;\n    display: block;\n    width: 16px; height: calc(50% - 2px);\n    right: 0;\n    font-size: 8px;\n    text-align: center;\n    line-height: 9px;\n    cursor: pointer;\n    border-radius: 0;\n}\n\n.ui-spinner-up\n{\n    top: 0;\n    border-top-right-radius: 2px;\n}\n\n.ui-spinner-down\n{\n    bottom: 0;\n    border-bottom-right-radius: 2px;\n}\n\n.pfLookup\n{\n    position: relative;\n}\n\n.pfLookup input\n{\n}\n\n.pfLookup .results\n{\n    position: absolute;\n    z-index: 1;\n    left: 0;\n    right: 0;\n    overflow: auto;\n    background-color: white;\n    border: 1px solid #999;\n    box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1);\n    margin-top: -1px;\n    border-radius: 0 0 2px 2px;\n}\n\n.pfLookup .results_inner\n{\n    overflow: hidden;\n}\n\n.pfLookup .results .result\n{\n}\n\n.pfLookup .results .result.default, .pfLookup .results:hover .result:hover, .pfLookup .results:hover .result.default:hover\n{\n    background-color: #ddd;\n}\n\n.pfLookup .results:hover .result.default\n{\n    background-color: white;\n}\n\n.pfPokemonPicker .result\n{\n    padding: 4px;\n    height: 20px;\n    white-space: nowrap;\n}\n\n.pfPokemonPicker .result img.speciesSmall\n{\n    margin: -6px -4px -10px -10px;\n}\n"
  },
  {
    "path": "web/css/login.css",
    "content": "﻿.gtsLogin\n{\n    width: 236px;\n}\n\n"
  },
  {
    "path": "web/css/main.css",
    "content": "﻿@import url(//fonts.googleapis.com/css?family=Lato:400,700,400italic&subset=latin,latin-ext);\n@import url(//fonts.googleapis.com/css?family=Nunito:700);\n\nbody\n{\n    margin: 0; padding: 0;\n    font-family: Lato,Candara,'Segoe UI','Hiragino Sans','Meiryo','Arial Unicode MS','Yu Gothic UI',Arial,sans-serif;\n    font-size: 10pt;\n    font-weight: 400;\n    background-color: #666666;\n}\n\nh1, h2, h3, h4, strong\n{\n    font-weight: 700;\n}\n\nhr\n{\n    margin: 16px 0;\n    border: 1px solid #cccccc;\n    border-width: 1px 0 0;\n}\n\na\n{\n    color: #00749f;\n}\n\na:hover\n{\n    color: #004a68;\n}\n\na:visited\n{\n    color: #7e3bd0;\n}\n\na:visited:hover\n{\n    color: #512489;\n}\n\nli\n{\n    margin: 4px 0;\n}\n\n.setWidth\n{\n    width: 980px;\n    position: relative;\n    margin: 0 auto;\n}\n\n.clear\n{\n    clear: both;\n    height: 0;\n    overflow: hidden;\n}\n\n.github-contain\n{\n    position: absolute;\n    overflow: hidden;\n    top: 0; right: 0;\n    width: 160px; height: 160px;\n}\n\n.github, a.github, a.github:hover\n{\n    width: 300px;\n    height: 20px;\n    color: white;\n    background-color: black;\n    position: absolute;\n    top: 60px;\n    right: -80px;\n    text-align: center;\n    display: block;\n    margin: 0; padding: 0;\n    text-decoration: none;\n    transform: rotate(45deg);\n    -webkit-transform: rotate(45deg);\n}\n\n.rightFloat\n{\n    float: right;\n    margin-left: 16px;\n}\n\n.code\n{\n    font-family: Consolas,'Andale Mono',monospace\n}\n\n.gtsBox\n{\n    box-shadow: 0 3px 8px 0 rgba(0,0,0,0.05), 0 -4px 3px -3px rgba(0,0,0,0.1) inset;\n    background-color: #f8f8f8;\n    background-image: -moz-linear-gradient(top, #fcfcfc 0%, #f8f8f8 100%); /* FF3.6+ */\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fcfcfc), color-stop(100%,#f8f8f8)); /* Chrome,Safari4+ */\n    background-image: -webkit-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Chrome10+,Safari5.1+ */\n    background-image: -o-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Opera 11.10+ */\n    background-image: -ms-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* IE10+ */\n    background-image: linear-gradient(to bottom, #fcfcfc 0%,#f8f8f8 100%); /* W3C */\n    background-size: 100%;\n    border-radius: 12px;\n    border: 1px solid #cccccc;\n    margin: 8px;\n}\n\n.pfBoxThin\n{\n    box-shadow: 0 3px 8px 0 rgba(0,0,0,0.05);\n    background-color: #f8f8f8;\n    background-image: -moz-linear-gradient(top, #fcfcfc 0%, #f8f8f8 100%); /* FF3.6+ */\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fcfcfc), color-stop(100%,#f8f8f8)); /* Chrome,Safari4+ */\n    background-image: -webkit-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Chrome10+,Safari5.1+ */\n    background-image: -o-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Opera 11.10+ */\n    background-image: -ms-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* IE10+ */\n    background-image: linear-gradient(to bottom, #fcfcfc 0%,#f8f8f8 100%); /* W3C */\n    background-size: 100%;\n    border-radius: 4px;\n}\n\n.pfToolTip\n{\n    border-bottom: 1px dotted #999;\n    margin-bottom: -1px;\n    cursor: help;\n}\n\n.gtsNav, .gtsNav ul, .gtsNav li\n{\n    margin: 0; padding: 0;\n}\n\n.gtsNav li\n{\n    float: left;\n}\n\n.gtsNav li a\n{\n    display: block;\n}\n\n.gtsInfo\n{\n    margin-left: 40px;\n    position: relative;\n    min-height: 32px;\n}\n\n.gtsInfo::before\n{\n    width: 24px;\n    height: 0;\n    padding: 12px 0;\n    position: absolute;\n    left: -40px;\n    top: calc(50% - 16px);\n    content: 'i';\n    border: 4px solid #999999;\n    color: #999999;\n    font-family: Arial,Helvetica,sans-serif;\n    line-height: 0;\n    vertical-align: middle;\n    border-radius: 100%;\n    font-size: 24px;\n    font-weight: bold;\n    text-align: center;\n    display: block;\n}\n\n.gtsProgress\n{\n    border: 1px solid #777777;\n    height: 2px;\n    border-radius: 2px;\n}\n\n.gtsProgress .progress\n{\n    background-color: #2dd350;\n    height: 2px;\n}\n\n#gtsHeader\n{\n    padding-top: 16px;\n    background-color: #ff8063;\n    color: white;\n    background-image: url('../images/heading-backdrop.png');\n    background-size: 32px 8px;\n    overflow: hidden;\n    font-size: 12pt;\n    position: relative;\n}\n\n#gtsHeader a, #gtsHeader a:visited\n{\n    color: white;\n}\n\n#gtsHeader #gtsLogo\n{\n    width: 276px;\n    margin-right: 16px;\n    float: left;\n    text-shadow: 0 1px 1px rgba(0,0,0,0.2);\n    text-align: left;\n}\n\n#gtsHeader #gtsLogo a\n{\n    text-decoration: none;\n}\n\n#gtsHeader #gtsLogo .gtsLogoImage, #gtsHeader #gtsLogo .gtsLogoWord\n{\n    display: block;\n}\n\n#gtsHeader #gtsLogo .gtsLogoImage\n{\n    float: left;\n    margin-bottom: 4px;\n}\n\n#gtsHeader #gtsLogo .gtsLogoWords\n{\n    font-family: Nunito,Calibri,sans-serif;\n    font-weight: 700;\n    font-size: 24px;\n    line-height: 32px;\n    letter-spacing: 2px;\n    color: white;\n}\n\n#gtsHeader #gtsLogo .gtsLogoWord\n{\n    margin-left: 112px;\n}\n\n#gtsHeader #gtsHeadMain\n{\n    width: 400px;\n    float: left;\n    margin-right: 16px;\n    margin-top: 9px;\n    text-shadow: 0 1px 1px rgba(0,0,0,0.2);\n}\n\n#gtsHeader #gtsLogin\n{\n    width: 240px;\n    float: left;\n    color: black;\n    background-color: #eeeeee;\n    background-color: rgba(255,255,255,0.9);\n    padding: 16px;\n    border-radius: 16px;\n    box-shadow: 0 4px 8px 2px rgba(0,0,0,0.2);\n}\n\n#gtsHeader .gtsHeadContent\n{\n    list-style-type: circle;\n    margin-top: 0;\n    margin-left: 16px;\n    padding-left: 0;\n}\n\n#gtsHeader .gtsNav\n{\n    height: 32px;\n    margin: 16px 0 0 0; padding: 0;\n    font-size: 12pt;\n    width: 1000px;\n}\n\n#gtsHeader .gtsNav li\n{\n    display: block;\n    margin: 0; padding: 0;\n}\n\n#gtsHeader .gtsNav li a\n{\n    width: 148px;\n    height: 18px;\n    margin-right: 8px;\n    padding-top: 14px;\n    padding-left: 8px;\n    border: 1px solid #cccccc;\n    border-style: solid;\n    border-color: #cccccc #bbbbbb #aaaaaa #bbbbbb;\n    border-bottom: none;\n    box-shadow: 0 -2px 12px -4px rgba(0,0,0,0.5);\n    border-radius: 6px 6px 0 0;\n    background-color: #f8f8f8;\n    color: black;\n    text-decoration: none;\n    font-weight: bold;\n    line-height: 0;\n    vertical-align: middle;\n    position: relative;\n    z-index: 0;\n    top: 2px;\n    transition: top 0.1s ease-out, background-color 0.1s ease-out;\n}\n\n#gtsHeader .gtsNav li a:hover\n{\n    top: 0;\n    background-color: #fcfcfc;\n}\n\n.home #gtsHeader .gtsNav li.home a,\n.gts #gtsHeader .gtsNav li.gts a,\n.bv #gtsHeader .gtsNav li.bv a,\n.dw #gtsHeader .gtsNav li.dw a,\n.dex #gtsHeader .gtsNav li.dex a,\n.stat #gtsHeader .gtsNav li.stat a {z-index: 2; top: 0; background-color: #fcfcfc;}\n\n#gtsHeader .gtsNav li.home a, .home #gtsSubMenu.bv, .home .gtsNav li a {color: #ff8063;}\n#gtsHeader .gtsNav li.gts a, .gts #gtsSubMenu, .gts .gtsNav li a {color: #43c4ff;}\n#gtsHeader .gtsNav li.bv a, .bv #gtsSubMenu, .bv .gtsNav li a {color: #9761e9;}\n#gtsHeader .gtsNav li.dw a, .dw #gtsSubMenu, .dw .gtsNav li a {color: #fa79d4;}\n#gtsHeader .gtsNav li.dex a, .dex #gtsSubMenu, .dex .gtsNav li a {color: #2dd350;}\n#gtsHeader .gtsNav li.stat a, .stat #gtsSubMenu, .stat .gtsNav li a {color: #ffc321;}\n#gtsHeader .gtsNav li.test a, .test #gtsSubMenu, .test .gtsNav li a {color: #82d2e0;}\n#gtsHeader .gtsNav li.admin a, .admin #gtsSubMenu, .admin .gtsNav li a {color: #555555;}\n\n.home #gtsHeader, .home #gtsSubNav .gtsNav li a:hover .inner {background-color: #ff8063;}\n.gts #gtsHeader, .gts #gtsSubNav .gtsNav li a:hover .inner {background-color: #43c4ff;}\n.bv #gtsHeader, .bv #gtsSubNav .gtsNav li a:hover .inner {background-color: #9761e9;}\n.dw #gtsHeader, .dw #gtsSubNav .gtsNav li a:hover .inner {background-color: #fa79d4;}\n.dex #gtsHeader, .dex #gtsSubNav .gtsNav li a:hover .inner {background-color: #2dd350;}\n.stat #gtsHeader, .stat #gtsSubNav .gtsNav li a:hover .inner {background-color: #ffc321;}\n.test #gtsHeader, .test #gtsSubNav .gtsNav li a:hover .inner {background-color: #82d2e0;}\n.admin #gtsHeader, .admin #gtsSubNav .gtsNav li a:hover .inner {background-color: #555555;}\n\n#gtsMain\n{\n    background-color: white;\n    margin: 0;\n    padding: 16px 0;\n    min-height: 300px;\n    color: #111111;\n}\n\n#gtsMain .gtsHeaderArea\n{\n    clear: both;\n}\n\n#gtsMain .gtsColumn\n{\n    width: 236px;\n}\n\n#gtsMain .gtsLeftColumn\n{\n    float: left;\n    margin-right: 16px;\n}\n\n#gtsMain .gtsRightColumn\n{\n    float: right;\n}\n\n#gtsMain .gtsMainColumn\n{\n    float: left;\n}\n\n#gtsMain .gtsMainColumnThree\n{\n    width: 476px;\n}\n\n#gtsMain .gtsMainColumnTwo\n{\n    width: 728px;\n}\n\n#gtsMain .gtsColumn .gtsSection\n{\n    margin-bottom: 16px;\n}\n\n#gtsSubNav\n{\n    border: 1px solid #cccccc;\n    border-width: 1px 0;\n    box-shadow: 0 -12px 12px -12px rgba(0,0,0,0.5), 0 3px 8px 0 rgba(0,0,0,0.05), 0 -4px 3px -3px rgba(0,0,0,0.1) inset;\n    background-color: #f8f8f8;\n    color: #ff8063;\n    height: 32px;\n    padding: 0;\n    position: relative;\n    z-index: 1;\n    margin-top: -1px;\n    background-image: -moz-linear-gradient(top, #fcfcfc 0%, #f8f8f8 100%); /* FF3.6+ */\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fcfcfc), color-stop(100%,#f8f8f8)); /* Chrome,Safari4+ */\n    background-image: -webkit-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Chrome10+,Safari5.1+ */\n    background-image: -o-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* Opera 11.10+ */\n    background-image: -ms-linear-gradient(top, #fcfcfc 0%,#f8f8f8 100%); /* IE10+ */\n    background-image: linear-gradient(to bottom, #fcfcfc 0%,#f8f8f8 100%); /* W3C */\n    background-size: 100%;\n}\n\n#gtsSubNav .gtsNav\n{\n    margin: 0; padding: 6px 0;\n    margin-left: 0;\n    font-size: 12pt;\n}\n\n#gtsSubNav .gtsNav li\n{\n    height: 20px;\n    display: block;\n    margin: 0; padding: 0;\n    border-left: 1px solid #cccccc;\n}\n\n#gtsSubNav .gtsNav li a\n{\n    height: 24px;\n    padding: 0 12px;\n    margin: 0;\n    text-decoration: none;\n    font-weight: bold;\n    line-height: 0;\n    vertical-align: middle;\n    position: relative;\n    top: -2px;\n    z-index: 0;\n}\n\n#gtsSubNav .gtsNav li a .inner\n{\n    display: block;\n    line-height: 0;\n    height: 12px;\n    padding: 12px 6px 0 6px;\n    border-radius: 12px;\n}\n\n#gtsSubNav .gtsNav li a:hover\n{\n    color: white;\n    text-shadow: 0 2px 2px rgba(0,0,0,0.2);\n}\n\n#gtsSubNav .gtsNav li a:hover .inner\n{\n    box-shadow: 0 2px 2px 0 rgba(0,0,0,0.2) inset;\n}\n\n#gtsSubNav .gtsNav li:first-child\n{\n    border-left: none;\n}\n\n#gtsSubNav .gtsNav li:first-child a\n{\n    padding-left: 3px;\n}\n\n#gtsFooter\n{\n    color: white;\n    font-size: 9pt;\n    padding: 16px 0;\n    text-shadow: 0 1px 1px rgba(0,0,0,0.5);\n    box-shadow: 0 12px 12px -12px rgba(0,0,0,0.5) inset;\n    text-align: center;\n}\n\n#gtsFooter a\n{\n    color: white;\n    text-decoration: none;\n}\n\n#gtsFooter a:hover\n{\n    text-decoration: underline;\n}\n\n#gtsFooter .gtsFooterNav\n{\n    list-style-type: none;\n    margin-left: 0; padding-left: 0;\n}\n\n#gtsFooter .gtsFooterNav li\n{\n    display: inline;\n}\n\n#gtsFooter .gtsFooterNav li::after\n{\n    content: ' • ';\n}\n\n#gtsFooter .gtsFooterNav li:last-child::after\n{\n    content: none;\n}\n\n#gtsFooter *:first-child *\n{\n    margin-top: 0;\n}\n\n.pfChoiceGroup\n{\n    position: relative;\n    overflow: hidden;\n    margin: 0 -8px;\n}\n\n.pfChoice\n{\n    float: left;\n    width: 180px;\n    height: 80px;\n    border: 2px solid #eeeeee;\n    background-color: white;\n    cursor: pointer;\n    margin: 4px 8px 4px 0;\n    position: relative;\n    display: table;\n    border-spacing: 8px;\n}\n\n.pfChoiceGroupVersions .pfChoice\n{\n    width: 128px;\n    height: 48px;\n}\n\n.pfChoice .pfChoiceIcon\n{\n    display: table-cell;\n    vertical-align: middle;\n    width: 0;\n}\n\n.pfChoice .pfChoiceLabel\n{\n    display: table-cell;\n    vertical-align: middle;\n    text-align: left;\n}\n\n.pfChoice:hover\n{\n    background-color: #f6f6f6;\n    border-color: #dddddd;\n}\n\n.pfChoiceActive\n{\n    border-color: #ff8063;\n}\n\n.home .pfChoiceActive {border-color: #ff8063;}\n.gts .pfChoiceActive {border-color: #43c4ff;}\n.bv .pfChoiceActive {border-color: #9761e9;}\n.dw .pfChoiceActive {border-color: #fa79d4;}\n.dex .pfChoiceActive {border-color: #2dd350;}\n.stat .pfChoiceActive {border-color: #ffc321;}\n.test .pfChoiceActive {border-color: #82d2e0;}\n.admin .pfChoiceActive {border-color: #555555;}\n\n.pfSplitList\n{\n    margin-top: 0; margin-bottom: 0;\n}\n\n.pfRight\n{\n    float: right;\n    margin-left: 16px;\n}\n\n@media (min--moz-device-pixel-ratio: 1.01), (-o-min-device-pixel-ratio: 97/96), \n       (-webkit-min-device-pixel-ratio: 1.01), (min-device-pixel-ratio: 1.01), \n       (min-resolution: 97dpi)\n{\n    #gtsHeader\n    {\n        background-image: url('../images/heading-backdrop@2x.png');\n    }\n}\n\n@media (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), \n       (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2), \n       (min-resolution: 192dpi)\n{\n    .sprite\n    {\n        image-rendering: optimizeSpeed;\n        image-rendering: -moz-crisp-edges;\n        image-rendering: -o-crisp-edges;\n        image-rendering: -webkit-optimize-contrast;\n        image-rendering: -webkit-crisp-edges;\n        image-rendering: crisp-edges;\n        -ms-interpolation-mode: bicubic;\n    }\n}\n\n@media (print), (min--moz-device-pixel-ratio: 2.01), (-o-min-device-pixel-ratio: 193/96), \n       (-webkit-min-device-pixel-ratio: 2.01), (min-device-pixel-ratio: 2.01), \n       (min-resolution: 193dpi)\n{\n    #gtsHeader\n    {\n        background-image: url('../images/heading-backdrop@3x.png');\n    }\n\n    .sprite\n    {\n        image-rendering: optimizeQuality;\n    }\n}\n\n@media (min--moz-device-pixel-ratio: 3), (-o-min-device-pixel-ratio: 3/1), \n       (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3), \n       (min-resolution: 288dpi)\n{\n    .sprite\n    {\n        image-rendering: optimizeSpeed;\n        image-rendering: -moz-crisp-edges;\n        image-rendering: -o-crisp-edges;\n        image-rendering: -webkit-optimize-contrast;\n        image-rendering: -webkit-crisp-edges;\n        image-rendering: crisp-edges;\n        -ms-interpolation-mode: bicubic;\n    }\n}\n\n\n"
  },
  {
    "path": "web/css/pkmnstats.css",
    "content": "﻿.gtsPokemonSummary .row\n{\n    position: relative;\n}\n\n.gtsPokemonSummary .nickname\n{\n    font-size: 12pt;\n    font-weight: bold;\n    color: black;\n    margin-bottom: 4px;\n}\n\n.gtsPokemonSummary .portrait, .gtsPokemonSummary li.portrait\n{\n    width: 96px;\n    height: 96px;\n    padding: 4px;\n    border-radius: 20px;\n    background-color: white;\n}\n\n.gtsPokemonSummary .pokeball\n{\n    \n}\n\n.gtsPokemonSummary .marks, .gtsPokemonSummary li.marks\n{\n    width: 104px;\n    color: #e0e0e0;\n    color: rgba(128,128,128,0.2);\n    font-family: 'Meiryo UI',sans-serif;\n}\n\n.gtsOffer .colPortrait, .gtsOffer .pfFormValue.colPortrait\n{\n    width: 104px;\n    padding-top: 8px;\n}\n\n.colPortrait ul\n{\n    width: 104px;\n    white-space: nowrap;\n}\n\n.marks .m\n{\n    color: #808080;\n}\n\n.specialFlags, li.specialFlags\n{\n    width: 104px;\n}\n\n.shiny\n{\n    font-weight: bold;\n    vertical-align: middle;\n    color: #ee0000;\n}\n\n.pkrs, .pkrs_cure\n{\n    font-weight: bold;\n    vertical-align: middle;\n    color: white;\n    background-color: #9761e9;\n    font-size: 8px;\n    padding: 1px 5px 1px 5px;\n    border-radius: 5px;\n}\n\n.gtsPokemonSummary ul, .gtsPokemonSummary li\n{\n    list-style-type: none;\n    margin: 0; padding: 0;\n}\n\n.gtsPokemonSummary li\n{\n    margin-bottom: 4px;\n}\n\n.gtsPokemonSummary img.item, .gtsPokemonSummary img.speciesSmall\n{\n    vertical-align: middle;\n    position: relative;\n}\n\n.gtsPokemonSummary img.item\n{\n    margin: -5px 0 -3px -4px;\n}\n\n.gtsPokemonSummary img.speciesSmall\n{\n    margin: -10px -3px -4px -10px;\n}\n\n.pfFormGroup.pfGroupMoves\n{\n    margin-top: 16px;\n    overflow: hidden;\n    border-radius: 4px;\n}\n\n.pfFormGroup .type\n{\n    border-bottom: none;\n    background-color: #f2f2f2;\n    width: 64px;\n}\n\n.gtsPokemonSummary .pfFormKey\n{\n    width: 64px;\n}\n\n.gtsPokemonSummary .pfFormValue\n{\n    width: 180px;\n}\n\n.gtsPokemonSummary .pfColumn.colBasic1\n{\n    width: 104px;\n}\n\n.gtsPokemonSummary .nextIn\n{\n    display: inline;\n    position: absolute;\n    right: 8px;\n    font-size: 8pt;\n    margin-top: 3px;\n}\n\n.pfFormGroup .type\n{\n}\n\n.pfFormGroup .move .type\n{\n    height: auto;\n    display: table-cell;\n    border-radius: 0;\n    text-align: left;\n    padding: 4px 8px;\n}\n\n.pfFormGroup .move .pp\n{\n    float: right;\n}\n\n.gtsProgress.hpBar .progress\n{\n    background-color: #2dd350;\n}\n\n.gtsProgress.health50 .progress\n{\n    background-color: #ffc321;\n}\n\n.gtsProgress.health25 .progress\n{\n    background-color: #ff8063;\n}\n\n.gtsProgress.expBar .progress\n{\n    background-color: #43c4ff;\n}\n\n.gtsOffer\n{\n    margin: 8px 0;\n    width: 672px;\n}\n\n.gtsOffer .pfColumn\n{\n}\n"
  },
  {
    "path": "web/css/types.css",
    "content": "﻿.type.normal { background-color: #b0b098; }\n.type.fighting { background-color: #c03028; }\n.type.flying { background-color: #b0a0ff; }\n.type.poison { background-color: #a828a8; }\n.type.ground { background-color: #e8c870; }\n.type.rock { background-color: #b89848; }\n.type.bug { background-color: #b0d028; }\n.type.ghost { background-color: #705898; }\n.type.steel { background-color: #c0c0d8; }\n.type.fire { background-color: #ff8038; }\n.type.water { background-color: #6898f8; }\n.type.grass { background-color: #58c820; }\n.type.electric { background-color: #ffc800; }\n.type.psychic { background-color: #f858a0; }\n.type.ice { background-color: #70e0e0; }\n.type.dragon { background-color: #7038f8; }\n.type.dark { background-color: #705848; }\n.type.question { background-color: #68a090; }\n.type.shadow { background-color: #305858; }\n.type.fairy { background-color: #ff98d8; }\n\n.type\n{\n    display: inline-block;\n    font-size: 13px;\n    line-height: 0;\n    vertical-align: middle;\n    padding: 10px 0;\n    width: 64px;\n    height: 0;\n    color: white;\n    font-weight: bold;\n    text-align: center;\n    text-shadow: 0 1px 0 rgba(0,0,0,0.3);\n    box-shadow: 0 -1px 0 0 rgba(0,0,0,0.3) inset;\n    border-radius: 7px;\n    background-color: #f2f2f2;\n    background-image: -moz-linear-gradient(top, transparent 0%, rgba(0,0,0,0.1) 100%); /* FF3.6+ */\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,transparent), color-stop(100%,rgba(0,0,0,0.1))); /* Chrome,Safari4+ */\n    background-image: -webkit-linear-gradient(top, transparent 0%,rgba(0,0,0,0.1) 100%); /* Chrome10+,Safari5.1+ */\n    background-image: -o-linear-gradient(top, transparent 0%,rgba(0,0,0,0.1) 100%); /* Opera 11.10+ */\n    background-image: -ms-linear-gradient(top, transparent 0%,rgba(0,0,0,0.1) 100%); /* IE10+ */\n    background-image: linear-gradient(to bottom, transparent 0%,rgba(0,0,0,0.1) 100%); /* W3C */\n}\n"
  },
  {
    "path": "web/gts/Default.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx.cs\" Inherits=\"PkmnFoundations.GTS.AllPokemon\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n<%@ Register TagPrefix=\"pf\" TagName=\"PokemonPicker\" Src=\"~/controls/PokemonPicker.ascx\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"gts\" runat=\"server\" />\n    <pf:RequireScript Key=\"jquery\" ScriptUrl=\"~/scripts/jquery-1.11.1.min.js\" runat=\"server\" />\n    <pf:RequireScript Key=\"jquery-ui\" ScriptUrl=\"~/scripts/jquery-ui.min.js\" After=\"jquery\" runat=\"server\" />\n    <pf:RequireCss Key=\"form\" CssUrl=\"~/css/form.css\" After=\"main\" runat=\"server\" />\n    <pf:RequireCss Key=\"pkmnstats\" CssUrl=\"~/css/pkmnstats.css?1\" After=\"form\" runat=\"server\" />\n    <pf:RequireCss Key=\"types\" CssUrl=\"~/css/types.css\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n\n    <script type=\"text/javascript\">\n        $(document).ready(function ()\n        {\n            betterSpinner($(\"#<%= txtLevelMin.ClientID %>\"));\n            betterSpinner($(\"#<%= txtLevelMax.ClientID %>\"));\n        });\n\n        function betterSpinner(input)\n        {\n            input.spinner(\n            {\n                spin: function(event, ui)\n                {\n                    input.val(ui.value);\n                    input.change();\n                }\n            });\n        }\n\n        function changedMax(idMin, idMax)\n        {\n            var minValue = parseInt($(\"#\" + idMin).val(), 10);\n            var maxValue = parseInt($(\"#\" + idMax).val(), 10);\n\n            if (minValue > maxValue)\n                $(\"#\" + idMin).val(maxValue);\n        }\n\n        function changedMin(idMin, idMax)\n        {\n            var minValue = parseInt($(\"#\" + idMin).val(), 10);\n            var maxValue = parseInt($(\"#\" + idMax).val(), 10);\n\n            if (minValue > maxValue)\n                $(\"#\" + idMax).val(minValue);\n        }\n\n    </script>\n\n    <form id=\"theForm\" runat=\"server\">\n        <table class=\"pfFormGroup pfColumn pfBoxThin\">\n            <tr class=\"pfFormPair\">\n                <th class=\"pfFormKey\">Species</th>\n                <td class=\"pfFormValue\">\n                    <%-- todo: limit pokemon to gen4 when gen4 is checked --%>\n                    <pf:PokemonPicker ID=\"ppSpecies\" MaxGeneration=\"Generation5\" runat=\"server\" />\n                </td>\n\n                <th class=\"pfFormKey\" rowspan=\"3\">Version</th>\n                <td class=\"pfFormValue\" rowspan=\"3\">\n                    <div class=\"pfRadListItem\">\n                    <asp:RadioButton ID=\"rbGen4\" GroupName=\"grpGeneration\" runat=\"server\" />\n                    <asp:Label ID=\"lblGen4\" AssociatedControlID=\"rbGen4\" runat=\"server\">\n                        <asp:Image ImageUrl=\"~/images/ver-icon/10.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Diamond\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/11.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Pearl\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/12.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Platinum\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/7.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Heart Gold\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/8.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Soul Silver\" runat=\"server\" />\n                    </asp:Label>\n                    </div>\n                    <div class=\"pfRadListItem\">\n                    <asp:RadioButton ID=\"rbGen5\" GroupName=\"grpGeneration\" Checked=\"true\" runat=\"server\" />\n                    <asp:Label ID=\"lblGen5\" AssociatedControlID=\"rbGen5\" runat=\"server\">\n                        <asp:Image ImageUrl=\"~/images/ver-icon/21.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Black\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/20.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"White\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/23.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"Black 2\" runat=\"server\" />\n                        <asp:Image ImageUrl=\"~/images/ver-icon/22.png\" CssClass=\"sprite\" \n                            Width=\"32\" Height=\"32\" AlternateText=\"White 2\" runat=\"server\" />\n                    </asp:Label>\n                        </div>\n                </td>\n                <td class=\"pfFormValue\" rowspan=\"3\" style=\"vertical-align: bottom;\">\n    <asp:Button ID=\"btnSearch\" Width=\"8em\" Text=\"Search\" runat=\"server\" />\n                </td>\n\n            </tr>\n            <tr class=\"pfFormPair\">\n                <th class=\"pfFormKey\">Level</th>\n                <td class=\"pfFormValue\">\n                    <asp:TextBox ID=\"txtLevelMin\" min=\"1\" max=\"100\" Width=\"3em\" Text=\"1\" runat=\"server\" />\n                    to\n                    <asp:TextBox ID=\"txtLevelMax\" min=\"1\" max=\"100\" Width=\"3em\" Text=\"100\" runat=\"server\" />\n                </td>\n            </tr>\n            <tr class=\"pfFormPair\">\n                <th class=\"pfFormKey\">Gender</th>\n                <td class=\"pfFormValue\">\n                    <asp:CheckBox ID=\"chkMale\" Text=\"Male\" Checked=\"true\" runat=\"server\" />\n                    <asp:CheckBox ID=\"chkFemale\" Text=\"Female\" Checked=\"true\" runat=\"server\" />\n                </td>\n            </tr>\n        </table>\n    </form>\n    <div class=\"clear\"></div>\n\n    <asp:PlaceHolder ID=\"phNone\" runat=\"server\">\n        <p>No Pokémon were found matching these terms.</p>\n    </asp:PlaceHolder>\n<asp:Repeater ID=\"rptPokemon\" runat=\"server\">\n<ItemTemplate>\n\n<table class=\"gtsPokemonSummary gtsOffer pfBoxThin pfFormGroup\">\n    <td class=\"pfFormValue colPortrait\" rowspan=\"6\">\n        <ul>\n        <li class=\"portrait\">\n            <%# CreateOfferImage(Container.DataItem) %>\n        </li>\n        <li>\n            <%# CreatePokeball(Container.DataItem) %>\n            Lv. \n            <%# CreateLevel(Container.DataItem) %>\n            <%# CreateGender(Container.DataItem) %>\n            <%# CreatePokerus(Container.DataItem) %>\n        </li>\n            <%# CreateAdminLinks(Container.DataItem) %>\n        </ul>\n    </td>\n    <tr class=\"pfFormPair\">\n        <th class=\"pfFormKey\">\n            Name\n        </th>\n        <td class=\"pfFormValue\">\n            <%# CreateNickname(Container.DataItem) %>\n        </td>\n        <th class=\"pfFormKey\" rowspan=\"2\">Offered by</th>\n        <td class=\"pfFormValue\"><%# CreateTrainer(Container.DataItem) %></td>\n    </tr>\n    <tr class=\"pfFormPair\">\n        <th class=\"pfFormKey\">Species</th>\n        <td class=\"pfFormValue\"><%# CreateSpecies(Container.DataItem) %>\n            (#<%# CreatePokedex(Container.DataItem) %>)\n        </td>\n        <td class=\"pfFormValue\"></td>\n    </tr>\n    <tr class=\"pfFormPair\">\n        <th class=\"pfFormKey\">Held item</th>\n        <td class=\"pfFormValue\"><%# CreateHeldItem(Container.DataItem) %></td>\n        <th class=\"pfFormKey\" rowspan=\"2\">Wanted</th>\n        <td class=\"pfFormValue\"><%# CreateWantedSpecies(Container.DataItem) %></td>\n    </tr>\n    <tr class=\"pfFormPair\">\n        <th class=\"pfFormKey\">Nature</th>\n        <td class=\"pfFormValue\"><%# CreateNature(Container.DataItem) %></td>\n        <td class=\"pfFormValue\"><%# CreateWantedGender(Container.DataItem) %>\n            <%# CreateWantedLevel(Container.DataItem) %></td>\n    </tr>\n    <tr class=\"pfFormPair\">\n        <th class=\"pfFormKey\">Ability</th>\n        <td class=\"pfFormValue\"><%# CreateAbility(Container.DataItem) %></td>\n        <th class=\"pfFormKey\">Date</th>\n        <td class=\"pfFormValue\"><%# CreateDate(Container.DataItem) %></td>\n    </tr>\n</table>\n\n</ItemTemplate>\n</asp:Repeater>\n\n</asp:Content>\n"
  },
  {
    "path": "web/gts/Default.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Web;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS\n{\n    public partial class AllPokemon : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(Application);\n\n            int species = ppSpecies.Value ?? 0;\n            int minLevel = Convert.ToInt32(txtLevelMin.Text);\n            int maxLevel = Convert.ToInt32(txtLevelMax.Text);\n            Genders gender = Genders.Either;\n            if (chkMale.Checked && !chkFemale.Checked) gender = Genders.Male;\n            if (chkFemale.Checked && !chkMale.Checked) gender = Genders.Female;\n\n            if (rbGen4.Checked)\n            {\n                GtsRecord4[] records4 = Database.Instance.GtsSearch4(pokedex, 0, (ushort)species, gender, (byte)minLevel, (byte)maxLevel, 0, -1);\n                rptPokemon.DataSource = records4;\n                rptPokemon.DataBind();\n                phNone.Visible = records4.Length == 0;\n            }\n            else if (rbGen5.Checked)\n            {\n                GtsRecord5[] records5 = Database.Instance.GtsSearch5(pokedex, 0, (ushort)species, gender, (byte)minLevel, (byte)maxLevel, 0, -1);\n                rptPokemon.DataSource = records5;\n                rptPokemon.DataBind();\n                phNone.Visible = records5.Length == 0;\n            }\n\n            txtLevelMin.Attributes[\"onchange\"] = \"changedMin(\\'\" + txtLevelMin.ClientID + \"\\', \\'\" + txtLevelMax.ClientID + \"\\');\";\n            txtLevelMax.Attributes[\"onchange\"] = \"changedMax(\\'\" + txtLevelMin.ClientID + \"\\', \\'\" + txtLevelMax.ClientID + \"\\');\";\n        }\n\n        private string FormatLevels(byte min, byte max)\n        {\n            if (min == 0 && max == 0)\n            {\n                return \"Any level\";\n            }\n            else if (min == 0)\n            {\n                return String.Format(\"Lv. {0} and under\", max);\n            }\n            else if (max == 0)\n            {\n                return String.Format(\"Lv. {0} and up\", min);\n            }\n            else if (min == max)\n            {\n                return String.Format(\"Lv. {0}\", min);\n            }\n            else\n            {\n                return String.Format(\"Lv. {0} to {1}\", min, max);\n            }\n        }\n\n        protected string CreateOfferImage(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                return \"<img src=\\\"\" + ResolveUrl(WebFormat.PokemonImageLarge(record.Pokemon)) +\n                    \"\\\" alt=\\\"\" + Common.HtmlEncode(record.Pokemon.Species.Name.ToString()) +\n                    \"\\\" class=\\\"sprite species\\\" width=\\\"96px\\\" height=\\\"96px\\\" />\";\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreatePokeball(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                // Hide pokeballs with incorrect numbers until we catalog them.\n                if (record.Pokemon.Pokeball == null) return \"\";\n                string itemName = Common.HtmlEncode(record.Pokemon.Pokeball.Name.ToString());\n                return \"<img src=\\\"\" + ResolveUrl(WebFormat.ItemImage(record.Pokemon.Pokeball)) +\n                    \"\\\" alt=\\\"\" + itemName + \"\\\" title=\\\"\" + itemName + \n                    \"\\\" class=\\\"sprite item\\\" width=\\\"24px\\\" height=\\\"24px\\\" />\";\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreatePokerus(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                switch (record.Pokemon.Pokerus)\n                {\n                    case Pokerus.Infected:\n                        return \"<span class=\\\"pkrs\\\">PKRS</span>\";\n                    case Pokerus.Cured:\n                    case Pokerus.None:\n                    default:\n                        return \"\";\n                }\n            }\n            catch\n            {\n                return \"\";\n            }\n        }\n\n        protected string CreateLevel(object DataItem)\n        {\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            return record.Level.ToString();\n        }\n\n        protected string CreateGender(object DataItem)\n        {\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            return Format.GenderSymbol(record.Gender);\n        }\n\n        protected string CreateNickname(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                return Common.HtmlEncode(record.Pokemon.Nickname);\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreateSpecies(object DataItem)\n        {\n            try\n            {\n                Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(Application);\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                return Common.HtmlEncode(pokedex.Species[record.Species].Name.ToString());\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreatePokedex(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                return Common.HtmlEncode(record.Species.ToString());\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreateHeldItem(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                if (record.Pokemon.HeldItem == null) return \"\";\n                string itemName = Common.HtmlEncode(record.Pokemon.HeldItem.Name.ToString());\n                return \"<img src=\\\"\" + ResolveUrl(WebFormat.ItemImage(record.Pokemon.HeldItem)) +\n                    \"\\\" alt=\\\"\" + itemName + \"\\\" class=\\\"sprite item\\\" width=\\\"24px\\\" height=\\\"24px\\\" />\" +\n                    itemName;\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreateNature(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                return Common.HtmlEncode(record.Pokemon.Nature.ToString());\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreateAbility(object DataItem)\n        {\n            try\n            {\n                GtsRecordBase record = (GtsRecordBase)DataItem;\n                return Common.HtmlEncode(record.Pokemon.Ability.Name.ToString());\n            }\n            catch\n            {\n                return \"???\";\n            }\n        }\n\n        protected string CreateTrainer(object DataItem)\n        {\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            return Common.HtmlEncode(record.TrainerName);\n        }\n\n        protected string CreateWantedSpecies(object DataItem)\n        {\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(Application);\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            Species species = pokedex.Species[record.RequestedSpecies];\n\n            return \"<img src=\\\"\" + ResolveUrl(WebFormat.SpeciesImageSmall(species)) +\n                \"\\\" alt=\\\"\" + Common.HtmlEncode(species.Name.ToString()) + \n                \"\\\" class=\\\"sprite speciesSmall\\\" width=\\\"40px\\\" height=\\\"30px\\\" />\" +\n                String.Format(\"{0} (#{1})\",\n                Common.HtmlEncode(species.Name.ToString()),\n                record.RequestedSpecies);\n        }\n\n        protected string CreateWantedGender(object DataItem)\n        {\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            return Format.GenderSymbol(record.RequestedGender);\n        }\n\n        protected string CreateWantedLevel(object DataItem)\n        {\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            return FormatLevels(record.RequestedMinLevel, record.RequestedMaxLevel);\n        }\n\n        protected string CreateDate(object DataItem)\n        {\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            if (record.TimeDeposited == null) return \"\";\n            return Common.HtmlEncode(((DateTime)record.TimeDeposited).ToString(\"f\"));\n        }\n\n        protected string CreateAdminLinks(object DataItem)\n        {\n#if DEBUG\n            GtsRecordBase record = (GtsRecordBase)DataItem;\n            StringBuilder result = new StringBuilder();\n\n            result.Append(\"<li><a class=\\\"ui-button\\\" href=\\\"\");\n            result.Append(Common.HtmlEncode(Common.ResolveUrl(\"~/gts/Pokemon.aspx?g=\" + (rbGen4.Checked ? \"4\" : \"5\") + \"&offer=\" + record.TradeId.ToString())));\n            result.Append(\"\\\" target=\\\"_blank\\\">Details</a></li>\");\n\n            return result.ToString();\n#else\n            return \"\";\n#endif\n        }\n    }\n}"
  },
  {
    "path": "web/gts/Default.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS\n{\n\n\n    public partial class AllPokemon\n    {\n\n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n\n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n\n        /// <summary>\n        /// ppSpecies control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.controls.PokemonPicker ppSpecies;\n\n        /// <summary>\n        /// rbGen4 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.RadioButton rbGen4;\n\n        /// <summary>\n        /// lblGen4 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label lblGen4;\n\n        /// <summary>\n        /// rbGen5 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.RadioButton rbGen5;\n\n        /// <summary>\n        /// lblGen5 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label lblGen5;\n\n        /// <summary>\n        /// btnSearch control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSearch;\n\n        /// <summary>\n        /// txtLevelMin control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtLevelMin;\n\n        /// <summary>\n        /// txtLevelMax control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtLevelMax;\n\n        /// <summary>\n        /// chkMale control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.CheckBox chkMale;\n\n        /// <summary>\n        /// chkFemale control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.CheckBox chkFemale;\n\n        /// <summary>\n        /// phNone control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phNone;\n\n        /// <summary>\n        /// rptPokemon control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Repeater rptPokemon;\n    }\n}\n"
  },
  {
    "path": "web/gts/Pokemon.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Pokemon.aspx.cs\" Inherits=\"PkmnFoundations.Web.gts.Pokemon\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n<%@ Import Namespace=\"PkmnFoundations.Pokedex\" %>\n<%@ Import Namespace=\"PkmnFoundations.Structures\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:RequireCss Key=\"form\" CssUrl=\"~/css/form.css\" runat=\"server\" />\n    <pf:RequireCss Key=\"pkmnstats\" CssUrl=\"~/css/pkmnstats.css\" After=\"form\" runat=\"server\" />\n    <pf:RequireCss Key=\"types\" CssUrl=\"~/css/types.css\" runat=\"server\" />\n\n    <style type=\"text/css\">\n        .gtsPokemonSummary .pfGroupStats .pfFormValue.bigstat, .gtsPokemonSummary .pfGroupStats .pfFormKey.bigstat\n        {\n            width: 108px;\n        }\n\n        .gtsPokemonSummary .pfGroupStats .pfFormValue.smallstat, .gtsPokemonSummary .pfGroupStats .pfFormKey.smallstat\n        {\n            width: 20px;\n        }\n\n    </style>\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n    <asp:PlaceHolder ID=\"phSummary\" runat=\"server\">\n    <div class=\"gtsBox gtsPokemonSummary\">\n        <div class=\"row basicInfo\">\n            <div class=\"pfColumn colBasic1\">\n                <ul>\n                <li class=\"nickname\">\n                    <asp:Literal ID=\"litNickname\" runat=\"server\" />\n                </li>\n                <li class=\"portrait\">\n                <asp:Image ID=\"imgPokemon\" CssClass=\"sprite species\"\n                    Width=\"96\" Height=\"96\" runat=\"server\" />\n                </li>\n                <li class=\"specialFlags\">\n                    <asp:PlaceHolder ID=\"phShiny\" runat=\"server\">\n                        <span class=\"shiny\">★</span>\n                    </asp:PlaceHolder>\n                    <%-- todo: use images for pkrs status --%>\n                    <asp:PlaceHolder ID=\"phPkrs\" runat=\"server\">\n                        <span class=\"pkrs\">PKRS</span>\n                    </asp:PlaceHolder>\n                    <asp:PlaceHolder ID=\"phPkrsCured\" runat=\"server\">\n                        <span class=\"pkrs_cure\">CURED</span>\n                    </asp:PlaceHolder>\n                    &nbsp;\n                </li>\n                <li class=\"marks\">\n                    <asp:Literal ID=\"litMarks\" runat=\"server\" />\n                </li>\n                <li>\n                    <asp:Image ID=\"imgPokeball\" CssClass=\"sprite item\"\n                        Width=\"24\" Height=\"24\" runat=\"server\" />\n                    Lv. \n                    <asp:Literal ID=\"litLevel\" runat=\"server\" />\n                    <asp:Literal ID=\"litGender\" runat=\"server\" />\n                </li>\n                </ul>\n                <p><asp:Literal ID=\"litTrainerMemo\" Text=\"Trainer memo todo\" runat=\"server\" /></p>\n                <p><asp:Literal ID=\"litCharacteristic\" Text=\"Characteristic todo\" runat=\"server\" /></p>\n            </div>\n\n            <div class=\"pfColumn colBasic2\">\n                <table class=\"pfFormGroup pfGroupBasic2\">\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Species</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litSpecies\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Pokédex</th>\n                        <td class=\"pfFormValue\">#<asp:Literal ID=\"litPokedex\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Type</th>\n                        <td class=\"pfFormValue\">\n                            <asp:Literal ID=\"litType1\" runat=\"server\" />&nbsp;\n                            <asp:Literal ID=\"litType2\" runat=\"server\" />\n                        </td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">OT</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litOtName\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">ID No.</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litTrainerId\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Exp.</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litExperience\" runat=\"server\" />\n\n                            <div class=\"nextIn\"><asp:Literal ID=\"litExperienceNext\" runat=\"server\" /></div>\n                            <div class=\"gtsProgress expBar\">\n                                <asp:Literal ID=\"litExpProgress\" runat=\"server\">\n                                    <div class=\"progress\" style=\"width: 50%;\"></div>\n                                </asp:Literal>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Held item</th>\n                        <td class=\"pfFormValue\"><asp:Image ID=\"imgHeldItem\" CssClass=\"sprite item\" ImageUrl=\"~/images/item-sm/3202.png\" Width=\"24\" Height=\"24\" runat=\"server\" />\n                            <asp:Literal ID=\"litHeldItem\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Nature</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litNature\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Ability</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litAbility\" runat=\"server\" />\n                        </td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Version</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litVersion\" runat=\"server\" />\n                        </td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Hax check</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litHaxCheck\" runat=\"server\" />\n                        </td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Offerer pid</th>\n                        <td class=\"pfFormValue\"><asp:Literal ID=\"litOffererPid\" runat=\"server\" />\n                        </td>\n                    </tr>\n                </table>\n            </div>\n        \n            <div class=\"pfColumn colStats\">\n                <table class=\"pfFormGroup pfGroupStats\">\n                    <tr>\n                        <th></th>\n                        <th class=\"pfFormKey smallstat\">IV</th>\n                        <th class=\"pfFormKey smallstat\">EV</th>\n                        <th class=\"pfFormKey bigstat\">Stat</th>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">HP</th>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litHpIv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litHpEv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue bigstat\"><asp:Literal ID=\"litHpCurr\" runat=\"server\" /> / <asp:Literal ID=\"litHp\" runat=\"server\" /><br />\n                            <div class=\"gtsProgress hpBar\">\n                                <asp:Literal ID=\"litHpProgress\" runat=\"server\">\n                                    <div class=\"progress\" style=\"width: 50%;\"></div>\n                                </asp:Literal>\n                            </div>\n                        </td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Attack</th>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litAtkIv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litAtkEv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue bigstat\"><asp:Literal ID=\"litAtk\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Defense</th>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litDefIv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litDefEv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue bigstat\"><asp:Literal ID=\"litDef\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Sp. Atk</th>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litSAtkIv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litSAtkEv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue bigstat\"><asp:Literal ID=\"litSAtk\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Sp. Def</th>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litSDefIv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litSDefEv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue bigstat\"><asp:Literal ID=\"litSDef\" runat=\"server\" /></td>\n                    </tr>\n                    <tr class=\"pfFormPair\">\n                        <th class=\"pfFormKey\">Speed</th>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litSpeedIv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue smallstat\"><asp:Literal ID=\"litSpeedEv\" runat=\"server\" /></td>\n                        <td class=\"pfFormValue bigstat\"><asp:Literal ID=\"litSpeed\" runat=\"server\" /></td>\n                    </tr>\n                </table>\n\n                <table class=\"pfFormGroup pfGroupMoves\">\n                    <asp:Repeater ID=\"rptMoves\" runat=\"server\">\n                        <ItemTemplate>\n                            <tr class=\"move <%# ((MoveSlot)Container.DataItem).Move == null ? \"\" : ((MoveSlot)Container.DataItem).Move.Type.Identifier %>\">\n                                <th class=\"pfFormKey type <%# ((MoveSlot)Container.DataItem).Move == null ? \"\" : ((MoveSlot)Container.DataItem).Move.Type.Identifier %>\">\n                                    <%# ((MoveSlot)Container.DataItem).Move == null ? \"\" : ((MoveSlot)Container.DataItem).Move.Type.Name.ToString() %>\n                                </th>\n                                <td class=\"pfFormValue\">\n                                    <span class=\"name\">\n                                    <%# ((MoveSlot)Container.DataItem).Move == null ? \"&nbsp;\" : ((MoveSlot)Container.DataItem).Move.Name.ToString() %>\n                                    </span>\n                                    <span class=\"pp\">\n                                    <%# ((MoveSlot)Container.DataItem).Move == null ? \"\" : ((MoveSlot)Container.DataItem).RemainingPP.ToString() + \" / \" %>\n                                    <%# ((MoveSlot)Container.DataItem).Move == null ? \"\" : ((MoveSlot)Container.DataItem).PP.ToString() %>\n                                    </span>\n                                </td>\n                            </tr>\n                        </ItemTemplate>\n                    </asp:Repeater>\n                </table>\n\n            </div>\n\n            <div class=\"col colRibbons\">\n\n                <asp:Repeater ID=\"rptRibbons\" runat=\"server\">\n\n                    <ItemTemplate>\n                        <asp:Image ImageUrl='<%# \"~/images/ribbon-sm/\" + ((Ribbon)Container.DataItem).ID.ToString() + \".png\" %>'\n                            ToolTip='<%# ((Ribbon)Container.DataItem).Name.ToString() %>' CssClass=\"sprite\" runat=\"server\" />\n                    </ItemTemplate>\n\n                </asp:Repeater>\n\n                <asp:Repeater ID=\"rptUnknownRibbons\" runat=\"server\">\n\n                    <ItemTemplate>\n                        Unknown ribbon in position <%# ((int)Container.DataItem).ToString() %>.\n                    </ItemTemplate>\n\n                </asp:Repeater>\n\n            </div>\n\n        </div>\n        <div class=\"clear\"></div>\n\n        <div>\n        </div>\n\n    </div>\n    </asp:PlaceHolder>\n</asp:Content>\n"
  },
  {
    "path": "web/gts/Pokemon.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Support;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.Web.gts\n{\n    public partial class Pokemon : System.Web.UI.Page\n    {\n        protected void Page_Init(object sender, EventArgs e)\n        {\n#if !DEBUG\n            throw new WebException(403);\n#endif\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            Pokedex.Pokedex pokedex = AppStateHelper.Pokedex(Application);\n            GtsRecordBase record = null;\n            PokemonPartyBase pkmn = null;\n\n            if (Request.QueryString.Count == 0 || Request.QueryString.Count > 2) throw new WebException(400);\n            if (Request.QueryString[\"offer\"] != null ||\n                Request.QueryString[\"exchange\"] != null)\n            {\n                String generation = Request.QueryString[\"g\"];\n                if (generation == null ||\n                    Request.QueryString.Count != 2)\n                    throw new WebException(400);\n\n                int tradeId;\n                bool isExchanged;\n\n                if (Request.QueryString[\"offer\"] != null)\n                {\n                    tradeId = Convert.ToInt32(Request.QueryString[\"offer\"]);\n                    isExchanged = false;\n                }\n                else if (Request.QueryString[\"exchange\"] != null)\n                {\n                    tradeId = Convert.ToInt32(Request.QueryString[\"exchange\"]);\n                    isExchanged = true;\n                }\n                else\n                {\n                    AssertHelper.Unreachable();\n                    throw new WebException(400);\n                }\n\n                // todo: when userprofiles are ready, add checks that they allow viewing their GTS history\n                switch (generation)\n                {\n                    case \"4\":\n                    {\n                        record = Database.Instance.GtsGetRecord4(pokedex, tradeId, isExchanged, true);\n                        if (record != null) pkmn = record.Pokemon;\n\n                    } break;\n                    case \"5\":\n                    {\n                         record = Database.Instance.GtsGetRecord5(pokedex, tradeId, isExchanged, true);\n                        if (record != null) pkmn = record.Pokemon;\n\n                    } break;\n                    default:\n                        throw new WebException(400);\n                }\n            }\n            else if (Request.QueryString[\"check\"] != null)\n            {\n                int checkId = Convert.ToInt32(Request.QueryString[\"check\"]);\n                throw new NotImplementedException();\n            }\n            else throw new WebException(400);\n\n            if (pkmn == null)\n                throw new WebException(403);\n\n            Bind(record);\n        }\n\n        private void Bind(GtsRecordBase record)\n        {\n            PokemonPartyBase pkmn = record.Pokemon;\n\n            litNickname.Text = pkmn.Nickname;\n            bool shiny = pkmn.IsShiny;\n            imgPokemon.ImageUrl = WebFormat.PokemonImageLarge(pkmn);\n            imgPokemon.AlternateText = pkmn.Species.Name.ToString();\n            phShiny.Visible = shiny;\n            litMarks.Text = WebFormat.Markings(pkmn.Markings);\n            imgPokeball.ImageUrl = WebFormat.ItemImage(pkmn.Pokeball);\n            imgPokeball.AlternateText = pkmn.Pokeball.Name.ToString();\n            imgPokeball.ToolTip = pkmn.Pokeball.Name.ToString();\n            litLevel.Text = pkmn.Level.ToString();\n            litGender.Text = WebFormat.Gender(pkmn.Gender);\n            litTrainerMemo.Text = pkmn.TrainerMemo.ToString();\n            litCharacteristic.Text = pkmn.Characteristic.ToString();\n            litSpecies.Text = pkmn.Species.Name.ToString();\n            litPokedex.Text = pkmn.SpeciesID.ToString(\"000\");\n            FormStats fs = pkmn.Form.BaseStats(pkmn.Generation);\n            litType1.Text = fs.Type1 == null ? \"\" : WebFormat.RenderType(fs.Type1);\n            litType2.Text = fs.Type2 == null ? \"\" : WebFormat.RenderType(fs.Type2);\n            litOtName.Text = Common.HtmlEncode(pkmn.TrainerName);\n            litTrainerId.Text = (pkmn.TrainerID & 0xffff).ToString(\"00000\");\n            litExperience.Text = pkmn.Experience.ToString();\n            if (pkmn.Level < 100)\n            {\n                int expCurrLevel = PokemonBase.ExperienceAt(pkmn.Level, pkmn.Species.GrowthRate);\n                int expNextLevel = PokemonBase.ExperienceAt(pkmn.Level + 1, pkmn.Species.GrowthRate);\n                int progress = pkmn.Experience - expCurrLevel;\n                int nextIn = expNextLevel - pkmn.Experience;\n\n                litExperienceNext.Text = String.Format(\"next in {0}\", nextIn);\n                litExpProgress.Text = WebFormat.RenderProgress(progress, expNextLevel - expCurrLevel);\n            }\n            else\n            {\n                litExperienceNext.Text = \"\";\n                litExpProgress.Text = WebFormat.RenderProgress(0, 1);\n            }\n            if (pkmn.HeldItem != null)\n            {\n                imgHeldItem.Visible = true;\n                imgHeldItem.ImageUrl = WebFormat.ItemImage(pkmn.HeldItem);\n                litHeldItem.Text = pkmn.HeldItem.Name.ToString();\n            }\n            else\n            {\n                imgHeldItem.Visible = false;\n                litHeldItem.Text = \"\";\n            }\n            litNature.Text = pkmn.Nature.ToString(); // todo: i18n\n            litAbility.Text = pkmn.Ability == null ? \"\" : pkmn.Ability.Name.ToString();\n            litVersion.Text = pkmn.Version.ToString();\n            litHaxCheck.Text = pkmn.Validate().IsValid ? \"Pass\" : \"Fail\";\n            litOffererPid.Text = record.PID.ToString();\n\n            // xxx: loop\n            litHpCurr.Text = pkmn.HP.ToString();\n            litHp.Text = pkmn.Stats[Stats.Hp].ToString();\n            litHpProgress.Text = WebFormat.RenderProgress(pkmn.HP, pkmn.Stats[Stats.Hp]);\n            litAtk.Text = pkmn.Stats[Stats.Attack].ToString();\n            litDef.Text = pkmn.Stats[Stats.Defense].ToString();\n            litSAtk.Text = pkmn.Stats[Stats.SpecialAttack].ToString();\n            litSDef.Text = pkmn.Stats[Stats.SpecialDefense].ToString();\n            litSpeed.Text = pkmn.Stats[Stats.Speed].ToString();\n\n            litHpIv.Text = pkmn.IVs[Stats.Hp].ToString();\n            litAtkIv.Text = pkmn.IVs[Stats.Attack].ToString();\n            litDefIv.Text = pkmn.IVs[Stats.Defense].ToString();\n            litSAtkIv.Text = pkmn.IVs[Stats.SpecialAttack].ToString();\n            litSDefIv.Text = pkmn.IVs[Stats.SpecialDefense].ToString();\n            litSpeedIv.Text = pkmn.IVs[Stats.Speed].ToString();\n\n            litHpEv.Text = pkmn.EVs[Stats.Hp].ToString();\n            litAtkEv.Text = pkmn.EVs[Stats.Attack].ToString();\n            litDefEv.Text = pkmn.EVs[Stats.Defense].ToString();\n            litSAtkEv.Text = pkmn.EVs[Stats.SpecialAttack].ToString();\n            litSDefEv.Text = pkmn.EVs[Stats.SpecialDefense].ToString();\n            litSpeedEv.Text = pkmn.EVs[Stats.Speed].ToString();\n\n            phPkrs.Visible = pkmn.Pokerus == Pokerus.Infected;\n            phPkrsCured.Visible = pkmn.Pokerus == Pokerus.Cured;\n\n            rptMoves.DataSource = pkmn.Moves;\n            rptMoves.DataBind();\n\n            rptRibbons.DataSource = pkmn.Ribbons;\n            rptRibbons.DataBind();\n\n            rptUnknownRibbons.DataSource = pkmn.UnknownRibbons;\n            rptUnknownRibbons.DataBind();\n        }\n\n    }\n}"
  },
  {
    "path": "web/gts/Pokemon.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.Web.gts\n{\n\n\n    public partial class Pokemon\n    {\n\n        /// <summary>\n        /// phSummary control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phSummary;\n\n        /// <summary>\n        /// litNickname control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litNickname;\n\n        /// <summary>\n        /// imgPokemon control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Image imgPokemon;\n\n        /// <summary>\n        /// phShiny control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phShiny;\n\n        /// <summary>\n        /// phPkrs control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phPkrs;\n\n        /// <summary>\n        /// phPkrsCured control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phPkrsCured;\n\n        /// <summary>\n        /// litMarks control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMarks;\n\n        /// <summary>\n        /// imgPokeball control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Image imgPokeball;\n\n        /// <summary>\n        /// litLevel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litLevel;\n\n        /// <summary>\n        /// litGender control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litGender;\n\n        /// <summary>\n        /// litTrainerMemo control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litTrainerMemo;\n\n        /// <summary>\n        /// litCharacteristic control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litCharacteristic;\n\n        /// <summary>\n        /// litSpecies control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSpecies;\n\n        /// <summary>\n        /// litPokedex control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litPokedex;\n\n        /// <summary>\n        /// litType1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litType1;\n\n        /// <summary>\n        /// litType2 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litType2;\n\n        /// <summary>\n        /// litOtName control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litOtName;\n\n        /// <summary>\n        /// litTrainerId control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litTrainerId;\n\n        /// <summary>\n        /// litExperience control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litExperience;\n\n        /// <summary>\n        /// litExperienceNext control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litExperienceNext;\n\n        /// <summary>\n        /// litExpProgress control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litExpProgress;\n\n        /// <summary>\n        /// imgHeldItem control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Image imgHeldItem;\n\n        /// <summary>\n        /// litHeldItem control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHeldItem;\n\n        /// <summary>\n        /// litNature control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litNature;\n\n        /// <summary>\n        /// litAbility control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litAbility;\n\n        /// <summary>\n        /// litVersion control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litVersion;\n\n        /// <summary>\n        /// litHaxCheck control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHaxCheck;\n\n        /// <summary>\n        /// litOffererPid control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litOffererPid;\n\n        /// <summary>\n        /// litHpIv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHpIv;\n\n        /// <summary>\n        /// litHpEv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHpEv;\n\n        /// <summary>\n        /// litHpCurr control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHpCurr;\n\n        /// <summary>\n        /// litHp control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHp;\n\n        /// <summary>\n        /// litHpProgress control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHpProgress;\n\n        /// <summary>\n        /// litAtkIv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litAtkIv;\n\n        /// <summary>\n        /// litAtkEv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litAtkEv;\n\n        /// <summary>\n        /// litAtk control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litAtk;\n\n        /// <summary>\n        /// litDefIv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litDefIv;\n\n        /// <summary>\n        /// litDefEv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litDefEv;\n\n        /// <summary>\n        /// litDef control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litDef;\n\n        /// <summary>\n        /// litSAtkIv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSAtkIv;\n\n        /// <summary>\n        /// litSAtkEv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSAtkEv;\n\n        /// <summary>\n        /// litSAtk control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSAtk;\n\n        /// <summary>\n        /// litSDefIv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSDefIv;\n\n        /// <summary>\n        /// litSDefEv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSDefEv;\n\n        /// <summary>\n        /// litSDef control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSDef;\n\n        /// <summary>\n        /// litSpeedIv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSpeedIv;\n\n        /// <summary>\n        /// litSpeedEv control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSpeedEv;\n\n        /// <summary>\n        /// litSpeed control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litSpeed;\n\n        /// <summary>\n        /// rptMoves control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Repeater rptMoves;\n\n        /// <summary>\n        /// rptRibbons control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Repeater rptRibbons;\n\n        /// <summary>\n        /// rptUnknownRibbons control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Repeater rptUnknownRibbons;\n    }\n}\n"
  },
  {
    "path": "web/masters/LeftColumn.master",
    "content": "﻿<%@ Master Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"ThreeColumn.master.cs\" Inherits=\"PkmnFoundations.GTS.ThreeColumn\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n<asp:ContentPlaceHolder ID=\"cpHead\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n    <div class=\"gtsColumn gtsLeftColumn\">\n<asp:ContentPlaceHolder ID=\"cpLeft\" runat=\"server\" />\n    </div>\n    <div class=\"gtsColumn gtsMainColumn gtsMainColumnTwo\">\n<asp:ContentPlaceHolder ID=\"cpMain\" runat=\"server\" />\n    </div>\n    <div class=\"clear\"></div>\n</asp:Content>\n"
  },
  {
    "path": "web/masters/LeftColumn.master.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace PkmnFoundations.GTS.masters\n{\n    public partial class LeftColumn : System.Web.UI.MasterPage\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "web/masters/LeftColumn.master.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.masters\n{\n\n\n    public partial class LeftColumn\n    {\n    }\n}\n"
  },
  {
    "path": "web/masters/MasterPage.master",
    "content": "﻿<%@ Master Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"MasterPage.master.cs\" Inherits=\"PkmnFoundations.GTS.MasterPage\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n<%@ Register TagPrefix=\"pf\" TagName=\"DnsAddress\" Src=\"~/controls/DnsAddress.ascx\" %>\n\n<!DOCTYPE html>\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n    <title>Poké Classic Network</title>\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"home\" runat=\"server\" />\n    <asp:ContentPlaceHolder ID=\"cpHead\" runat=\"server\" />\n    <link rel=\"shortcut icon\" href=\"~/favicon.ico\" type=\"image/vnd.microsoft.icon\" />\n\n    <pf:RequireCss Key=\"main\" CssUrl=\"~/css/main.css\" runat=\"server\" />\n    <pf:RequireScript Key=\"jquery\" ScriptUrl=\"~/scripts/jquery-1.11.1.min.js\" runat=\"server\" />\n    <pf:RequireScript Key=\"retina\" After=\"jquery\" ScriptUrl=\"~/scripts/retina.js\" runat=\"server\" />\n</head>\n<body class=\"<%= HeaderCssClass %>\">\n    <asp:Literal ID=\"litHeaderCssClassKeep\" Visible=\"false\" runat=\"server\" />\n    <div id=\"gtsHeader\" class=\"gtsHeader\">\n        <div class=\"setWidth\">\n            <div id=\"gtsLogo\" class=\"gtsLogo\">\n                <asp:HyperLink ID=\"hlLogl\" NavigateUrl=\"~\" runat=\"server\">\n                <pf:RetinaImage ID=\"imgLogo\" CssClass=\"gtsLogoImage\" ImageUrl=\"~/images/heading-icon.png\"\n                    Width=\"96\" Height=\"96\"\n                    AlternateSizes=\"2,3\" runat=\"server\" />\n                <span class=\"gtsLogoWords\">\n                <span class=\"gtsLogoWord\">Poké</span>\n                <span class=\"gtsLogoWord\">Classic</span>\n                <span class=\"gtsLogoWord\">Network</span>\n                </span>\n                </asp:HyperLink>\n                <div class=\"clear\"></div>\n                Unofficial server for classic Pokémon\n            </div>\n\n            <div id=\"gtsHeadMain\">\n            <ul class=\"gtsHeadContent\">\n                <li>DNS: <strong><pf:DnsAddress ShowAttribution=\"true\" runat=\"server\" /></strong></li>\n                <li><asp:Literal ID=\"litPokemon\" runat=\"server\" />\n                Pokémon available for offer.</li>\n                <li><asp:Literal ID=\"litVideos\" runat=\"server\" />\n                battle videos.</li>\n            </ul>\n            </div>\n\n            <asp:PlaceHolder Visible=\"false\" runat=\"server\">\n            <div id=\"gtsLogin\" class=\"gtsLogin\">\n                login\n            </div>\n            </asp:PlaceHolder>\n\n            <div class=\"clear\"></div>\n\n            <ul id=\"gtsNav\" class=\"gtsNav\">\n                <li class=\"home\">\n                    <asp:HyperLink ID=\"hlMain\" NavigateUrl=\"~/\" runat=\"server\">\n                        <span class=\"inner\">\n                        Main\n                        </span>\n                    </asp:HyperLink>\n                </li>\n                <li class=\"gts\">\n                    <asp:HyperLink ID=\"hlGts\" NavigateUrl=\"~/gts/\" runat=\"server\">\n                        <span class=\"inner\">\n                        GTS\n                        </span>\n                    </asp:HyperLink>\n                </li>\n\n                <asp:PlaceHolder Visible=\"false\" runat=\"server\">\n                <li class=\"bv\">\n                    <asp:HyperLink ID=\"hlBattleVideos\" NavigateUrl=\"~/battlevideo/\" runat=\"server\">\n                        <span class=\"inner\">\n                        Battle Videos\n                        </span>\n                    </asp:HyperLink>\n                </li>\n\n                <li class=\"dw\">\n                    <asp:HyperLink ID=\"hlDreamWorld\" NavigateUrl=\"~/dreamworld/\" runat=\"server\">\n                        <span class=\"inner\">\n                        Dream World\n                        </span>\n                    </asp:HyperLink>\n                </li>\n                <li class=\"dex\">\n                    <asp:HyperLink ID=\"hlPokedex\" NavigateUrl=\"~/pokedex/\" runat=\"server\">\n                        <span class=\"inner\">\n                        Pokédex\n                        </span>\n                    </asp:HyperLink>\n                </li>\n                <li class=\"stat\">\n                    <asp:HyperLink ID=\"hlStat\" NavigateUrl=\"~/profile/\" runat=\"server\">\n                        <span class=\"inner\">\n                        My Profile\n                        </span>\n                    </asp:HyperLink>\n                </li>\n                </asp:PlaceHolder>\n            </ul>\n\n        </div>\n\n    </div>\n\n    <div id=\"gtsSubNav\">\n        <div class=\"setWidth\">\n            <% switch (HeaderCssClass)\n               {\n                   case \"home\": %>\n                <ul class=\"gtsNav\">\n                    <li>\n                        <asp:HyperLink ID=\"hlMain_Home\" NavigateUrl=\"~\" runat=\"server\">\n                            <span class=\"inner\">\n                                Home\n                            </span>\n                        </asp:HyperLink>\n                    </li>\n                </ul>\n\n            <% break;\n                   case \"gts\": %>\n\n                <ul class=\"gtsNav\">\n                    <li>\n                        <asp:HyperLink ID=\"hlGts_Offers\" NavigateUrl=\"~/gts/Default.aspx\" runat=\"server\">\n                            <span class=\"inner\">\n                                Available Pokémon\n                            </span>\n                        </asp:HyperLink>\n                    </li>\n                </ul>\n\n            <% break;\n               } %>\n        <div class=\"clear\"></div>\n        </div>\n    </div>\n\n    <div id=\"gtsMain\">\n        <div class=\"setWidth\">\n    <asp:ContentPlaceHolder ID=\"cpMain\" runat=\"server\" />\n        </div>\n        <div class=\"clear\"></div>\n    </div>\n\n    <div id=\"gtsFooter\">\n        <div id=\"gtsFooterBkg\">\n            <div class=\"setWidth\">\n                <ul class=\"gtsFooterNav\">\n                    <li><asp:HyperLink ID=\"hlFooterGithub\" Text=\"GitHub\" NavigateUrl=\"https://github.com/mm201/pkmn-classic-framework\" runat=\"server\" /></li>\n                    <li><asp:HyperLink ID=\"hlFooterTwitter\" Text=\"Twitter\" NavigateUrl=\"https://twitter.com/pcnstatus\" runat=\"server\" /></li>\n                    <li><asp:HyperLink ID=\"hlFooterDiscord\" Text=\"Discord\" NavigateUrl=\"https://discord.com/invite/sDQVKFxvMM\" runat=\"server\" /></li>\n                    <li><asp:HyperLink ID=\"hlWiimmfi\" Text=\"Wiimmfi\" NavigateUrl=\"https://wiimmfi.de/\" runat=\"server\" /></li>\n                    <li><asp:HyperLink ID=\"hlKaeru\" Text=\"Kaeru WFC\" NavigateUrl=\"http://wfc.kaeru.world/\" runat=\"server\" /></li>\n                </ul>\n\n                <p>Maintenance periods are <strong>Thursdays</strong> at <strong>UTC 0300</strong>.</p>\n                <p>Pokémon is © 1995-2022 Nintendo / Creatures / GAME FREAK.\n                This service is not affiliated with Nintendo or GAME FREAK in any way.</p>\n            </div>\n        </div>\n    </div>\n\n</body>\n</html>\n"
  },
  {
    "path": "web/masters/MasterPage.master.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Data;\n\nnamespace PkmnFoundations.GTS\n{\n    public partial class MasterPage : System.Web.UI.MasterPage\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            int avail4, avail5;\n            ulong bvCount4, bvCount5;\n\n            // todo: move this to a CacheManager sort of class\n            if (Cache[\"pkmncfPokemonCount4\"] == null)\n            {\n                avail4 = Database.Instance.GtsAvailablePokemon4();\n                Cache.Insert(\"pkmncfPokemonCount4\", avail4, null,\n                    DateTime.Now.AddMinutes(1),\n                    System.Web.Caching.Cache.NoSlidingExpiration);\n            }\n            else\n                avail4 = Convert.ToInt32(Cache[\"pkmncfPokemonCount4\"]);\n\n            if (Cache[\"pkmncfPokemonCount5\"] == null)\n            {\n                avail5 = Database.Instance.GtsAvailablePokemon5();\n                Cache.Insert(\"pkmncfPokemonCount5\", avail5, null,\n                    DateTime.Now.AddMinutes(1),\n                    System.Web.Caching.Cache.NoSlidingExpiration);\n            }\n            else\n                avail5 = Convert.ToInt32(Cache[\"pkmncfPokemonCount5\"]);\n\n            if (Cache[\"pkmncfBattleVideoCount4\"] == null)\n            {\n                bvCount4 = Database.Instance.BattleVideoCount4();\n                Cache.Insert(\"pkmncfBattleVideoCount4\", bvCount4, null,\n                    DateTime.Now.AddMinutes(1),\n                    System.Web.Caching.Cache.NoSlidingExpiration);\n            }\n            else\n                bvCount4 = Convert.ToUInt64(Cache[\"pkmncfBattleVideoCount4\"]);\n\n            if (Cache[\"pkmncfBattleVideoCount5\"] == null)\n            {\n                bvCount5 = Database.Instance.BattleVideoCount5();\n                Cache.Insert(\"pkmncfBattleVideoCount5\", bvCount5, null,\n                    DateTime.Now.AddMinutes(1),\n                    System.Web.Caching.Cache.NoSlidingExpiration);\n            }\n            else\n                bvCount5 = Convert.ToUInt64(Cache[\"pkmncfBattleVideoCount5\"]);\n\n            litPokemon.Text = (avail4 + avail5).ToString();\n            litVideos.Text = (bvCount4 + bvCount5).ToString();\n        }\n\n        public String HeaderCssClass\n        {\n            get\n            {\n                return litHeaderCssClassKeep.Text;\n            }\n            set\n            {\n                litHeaderCssClassKeep.Text = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "web/masters/MasterPage.master.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS\n{\n\n\n    public partial class MasterPage\n    {\n\n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n\n        /// <summary>\n        /// cpHead control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpHead;\n\n        /// <summary>\n        /// litHeaderCssClassKeep control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litHeaderCssClassKeep;\n\n        /// <summary>\n        /// hlLogl control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlLogl;\n\n        /// <summary>\n        /// imgLogo control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.RetinaImage imgLogo;\n\n        /// <summary>\n        /// litPokemon control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litPokemon;\n\n        /// <summary>\n        /// litVideos control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litVideos;\n\n        /// <summary>\n        /// hlMain control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlMain;\n\n        /// <summary>\n        /// hlGts control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlGts;\n\n        /// <summary>\n        /// hlBattleVideos control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlBattleVideos;\n\n        /// <summary>\n        /// hlDreamWorld control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlDreamWorld;\n\n        /// <summary>\n        /// hlPokedex control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlPokedex;\n\n        /// <summary>\n        /// hlStat control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlStat;\n\n        /// <summary>\n        /// hlMain_Home control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlMain_Home;\n\n        /// <summary>\n        /// hlGts_Offers control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlGts_Offers;\n\n        /// <summary>\n        /// cpMain control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpMain;\n\n        /// <summary>\n        /// hlFooterGithub control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlFooterGithub;\n\n        /// <summary>\n        /// hlFooterTwitter control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlFooterTwitter;\n\n        /// <summary>\n        /// hlFooterDiscord control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlFooterDiscord;\n\n        /// <summary>\n        /// hlWiimmfi control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlWiimmfi;\n\n        /// <summary>\n        /// hlKaeru control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink hlKaeru;\n    }\n}\n"
  },
  {
    "path": "web/masters/ThreeColumn.master",
    "content": "﻿<%@ Master Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"ThreeColumn.master.cs\" Inherits=\"PkmnFoundations.GTS.ThreeColumn\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n<asp:ContentPlaceHolder ID=\"cpHead\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n    <div class=\"gtsHeadingArea\">\n<asp:ContentPlaceHolder ID=\"cpHeadingArea\" runat=\"server\" />\n    </div>\n    <div class=\"gtsColumn gtsLeftColumn\">\n<asp:ContentPlaceHolder ID=\"cpLeft\" runat=\"server\" />\n    </div>\n    <div class=\"gtsColumn gtsMainColumn gtsMainColumnThree\">\n<asp:ContentPlaceHolder ID=\"cpMain\" runat=\"server\" />\n    </div>\n    <div class=\"gtsColumn gtsRightColumn\">\n<asp:ContentPlaceHolder ID=\"cpRight\" runat=\"server\" />\n    </div>\n    <div class=\"clear\"></div>\n</asp:Content>\n"
  },
  {
    "path": "web/masters/ThreeColumn.master.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace PkmnFoundations.GTS\n{\n    public partial class ThreeColumn : System.Web.UI.MasterPage\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "web/masters/ThreeColumn.master.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS {\n    \n    \n    public partial class ThreeColumn {\n        \n        /// <summary>\n        /// cpHead control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpHead;\n        \n        /// <summary>\n        /// cpHeadingArea control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpHeadingArea;\n        \n        /// <summary>\n        /// cpLeft control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpLeft;\n        \n        /// <summary>\n        /// cpMain control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpMain;\n        \n        /// <summary>\n        /// cpRight control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder cpRight;\n    }\n}\n"
  },
  {
    "path": "web/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"MySql.Data\" version=\"6.9.8\" targetFramework=\"net40\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "web/scripts/form.js",
    "content": "﻿function labelTextBox_Change()\n{\n    if (this.value.length > 0)\n        $(this).addClass(\"hasContent\");\n    else\n        $(this).removeClass(\"hasContent\");\n}\n\n$(document).ready(function ()\n{\n    $(\"input\").change(labelTextBox_Change);\n    $(\"input\").each(labelTextBox_Change);\n})\n\n// foreign lookup\nfunction pfHandleLookupKeypress(id_outer, id_value, id_results, count, url)\n{\n    if (pfShowLookupResults(id_value, id_results))\n    {\n        pfHandleLookup(id_outer, id_value, id_results, count, url);\n    }\n}\n\n// keyup\nfunction pfHandleLookupKeypress3(id_outer, id_value, id_results, count, url)\n{\n    var ctrl_text = document.getElementById(id_value);\n\n    if (ctrl_text.prevValue && ctrl_text.prevValue == ctrl_text.value)\n    {\n        ctrl_text.prevValue = ctrl_text.value;\n        return;\n    }\n    ctrl_text.prevValue = ctrl_text.value;\n    var ctrl_value = document.getElementById(id_outer + \"_hdSelectedValue\");\n\n    ctrl_value.value = \"\";\n    if (ctrl_value.onchange) ctrl_value.onchange();\n    pfHandleLookupKeypress(id_outer, id_value, id_results, count, url);\n}\n\n// keypress\nfunction pfHandleLookupKeypress2(id_outer, id_value, id_results, count, url, event)\n{\n    var ctrl_value = document.getElementById(id_outer + \"_hdSelectedValue\");\n    var ctrl_text = document.getElementById(id_value);\n    if (event && pfLookupResultsVisible(id_results) && (event.keyCode == 13 || event.keyCode == 9))\n    {\n        var ctrl_result1 = document.getElementById(id_outer + \"_result1\");\n        if (ctrl_result1)\n        {\n            ctrl_value.value = ctrl_result1.getAttribute(\"data-value\");\n            if (ctrl_value.onchange) ctrl_value.onchange();\n            ctrl_text.value = ctrl_result1.getAttribute(\"data-text\");\n        }\n        pfHideLookupResults(id_results);\n        ctrl_text.prevValue = ctrl_text.value;\n        return false;\n    }\n    else if (event && (event.keyCode == 27))\n    {\n        pfHideLookupResults(id_results);\n        ctrl_text.prevValue = ctrl_text.value;\n        return true;\n    }\n    else if (event)\n    {\n        pfHandleLookupKeypress(id_outer, id_value, id_results, count, url);\n        return true;\n    }\n    else\n    {\n        return true;\n    }\n}\n\nfunction pfHandleLookup(id_outer, id_value, id_results, count, url)\n{\n    var ctrl_value = document.getElementById(id_value);\n\n    if (ctrl_value.value.length > 1)\n    {\n        var ctrl_results = document.getElementById(id_results);\n        if (ctrl_results.pfLookupBlocked == undefined) ctrl_results.pfLookupBlocked = false;\n        if (ctrl_results.pfLastLookup == undefined) ctrl_results.pfLastLookup = \"\";\n        var search = encodeURIComponent(ctrl_value.value);\n\n        if (ctrl_results.pfLastLookup == search) return;\n        if (ctrl_results.pfLookupBlocked) return; // todo: timeout this to deal with slow server performance\n        ctrl_results.pfLastLookup = search;\n\n        var request = $.ajax(url, \n            {\n                complete: function (response, status, xhr)\n                {\n                    pfReceiveLookupResults(response.responseText, response.status, id_outer, id_value, id_results, count, url);\n                },\n                data: { n: count, q: search, c: id_outer },\n                method: \"POST\"\n            })\n        ctrl_results.pfLookupBlocked = true;\n    }\n}\n\nfunction pfShowLookupResults(id_value, id_results)\n{\n    if (document.getElementById(id_value).value.length > 1)\n    {\n        document.getElementById(id_results).style.visibility = \"visible\";\n        return true;\n    }\n    else\n    {\n        document.getElementById(id_results).style.visibility = \"hidden\";\n        return false;\n    }\n}\n\nfunction pfReceiveLookupResults(response, status, id_outer, id_value, id_results, count, url)\n{\n    var ctrl_results = document.getElementById(id_results);\n    if (ctrl_results.pfLastLookup == undefined) ctrl_results.pfLastLookup = \"\";\n    ctrl_results.pfLookupBlocked = false;\n\n    if (status == \"200\")\n    {\n        ctrl_results.innerHTML = \"<div class=\\\"results_inner\\\">\" + response + \"</div>\";\n    }\n    else\n    {\n        ctrl_results.innerHTML = \"server error\";\n    }\n\n    var search = encodeURIComponent(document.getElementById(id_value).value);\n    if (ctrl_results.pfLastLookup != search) pfHandleLookup(id_outer, id_value, id_results, count, url);\n}\n\nfunction pfHideLookupResults(id)\n{\n    document.getElementById(id).style.visibility = \"hidden\";\n}\n\nfunction pfSelectLookupResult(id_main, id_value, value, id_text, text)\n{\n    document.getElementById(id_value).value = value;\n    document.getElementById(id_text).value = text;\n    document.getElementById(id_main).blur();\n    var ctrl_value = document.getElementById(id_value);\n    if (ctrl_value.onchange) ctrl_value.onchange();\n}\n\nfunction pfLookupResultsVisible(id)\n{\n    return document.getElementById(id).style.visibility == \"visible\";\n}\n"
  },
  {
    "path": "web/scripts/retina.js",
    "content": "﻿function setPixelRatioCookie(scale)\n{\n    var expires = new Date();\n    expires.setDate(expires.getDate() + 21);\n    document.cookie = \"pixelRatio=\" + scale + \";path=/;expires=\" + expires;\n}\nsetPixelRatioCookie(getPixelRatio());\n\nfunction getPixelRatio()\n{\n    if (window.devicePixelRatio != undefined)\n        return window.devicePixelRatio;\n    else if (window.screen.deviceXDPI != undefined)\n        return window.screen.deviceXDPI / 96.0;\n    else if (window.matchMedia != undefined)\n        return bisectScale(1.0, 2.0, 0.005);\n    else\n        return 1.0;\n}\n\nfunction matchScale(scale)\n{\n    var dpi = scale * 96.0;\n    var dpi_int = Math.ceil(dpi); // ceil to get mathmatically correct results for non-int dpi\n\n    return window.matchMedia(\"(min--moz-device-pixel-ratio: \" + scale.toString() + \")\").matches || // firefox 8-15\n           window.matchMedia(\"(-o-min-device-pixel-ratio: \" + dpi_int.toString() + \"/96)\").matches ||\n           window.matchMedia(\"(-webkit-min-device-pixel-ratio: \" + scale.toString() + \")\").matches ||\n           window.matchMedia(\"(min-resolution: \" + dpi.toString() + \"dpi)\").matches ||\n           window.matchMedia(\"(min-resolution: \" + dpi_int.toString() + \"dpi)\").matches // firefox 7- doesn't understand non-int dpi units\n}\n\nfunction bisectScale(min, max, tolerance)\n{\n    if (min + tolerance > max) return min;\n    if (matchScale(max)) return max;\n    if (!matchScale(min)) return min;\n    if (matchScale((min + max) * 0.5)) return bisectScale((min + max) * 0.5, max, tolerance);\n    return bisectScale(min, (min + max) * 0.5, tolerance);\n}\n\nfunction checkRetina(element, scale)\n{\n    try\n    {\n        var data_design_width = element.getAttribute(\"data-design-width\");\n        var data_design_height = element.getAttribute(\"data-design-height\");\n\n        if (data_design_width !== null &&\n            data_design_height !== null)\n        {\n            var scaleX = $(element).width() / parseFloat(data_design_width);\n            var scaleY = $(element).height() / parseFloat(data_design_height);\n            scale *= Math.max(scaleX, scaleY);\n        }\n        else if (data_design_width !== null)\n        {\n            scale *= $(element).width() / parseFloat(data_design_width);\n        }\n        else if (data_design_height !== null)\n        {\n            scale *= $(element).height() / parseFloat(data_design_height);\n        }\n\n        var sizes = new Array();\n        var x = 0;\n        for (x in element.attributes)\n        {\n            var attrName = element.attributes[x].name;\n            if (attrName != undefined && attrName.length > 11 &&\n                attrName.substring(0, 11).toLowerCase() == \"data-hires-\")\n            {\n                sizes.push(parseFloat(attrName.substring(11)));\n            }\n        }\n        sizes.sort();\n\n        var best = 0.0;\n        for (x in sizes)\n        {\n            var f = sizes[x];\n            if (f === undefined) continue;\n            if (best > 0.0 && f > scale && best >= scale) break;\n            best = f;\n        }\n\n        if ($(element).hasClass(\"keephr\") && element.retinaActiveScale && element.retinaActiveScale >= best) return;\n\n        element.src = element.getAttribute(\"data-hires-\" + best.toString());\n        element.retinaActiveScale = best;\n    }\n    catch (err)\n    {\n    }\n}\n\nfunction checkAllRetina()\n{\n    var scale = getPixelRatio();\n    $(\".retina\").each(function ()\n    {\n        checkRetina(this, scale);\n    });\n    setPixelRatioCookie(scale);\n}\n\nfunction checkRetinaIn(element)\n{\n    var scale = getPixelRatio();\n    $(\".retina\", element).each(function ()\n    {\n        checkRetina(this, scale);\n    });\n}\n\nfunction handleBeforePrint()\n{\n    window.rjsPrinting = true;\n    checkAllRetina();\n}\n\nfunction handleAfterPrint()\n{\n    window.rjsPrinting = false;\n    checkAllRetina();\n}\n\nfunction handlePrintListener(mql)\n{\n    window.rjsPrinting = mql.matches;\n    checkAllRetina();\n}\n\nwindow.rjsPrinting = false;\n\nif (document.addEventListener) document.addEventListener(\"DOMContentLoaded\", checkAllRetina, false);\nelse if (document.attachEvent) document.attachEvent(\"DOMContentLoaded\", checkAllRetina, false);\nif (window.addEventListener) window.addEventListener(\"resize\", checkAllRetina, false);\nelse if (window.attachEvent) window.attachEvent(\"resize\", checkAllRetina, false);\nif (window.addEventListener) window.addEventListener(\"beforeprint\", handleBeforePrint, false);\nelse if (window.attachEvent) window.attachEvent(\"beforeprint\", handleBeforePrint, false);\nif (window.addEventListener) window.addEventListener(\"afterprint\", handleAfterPrint, false);\nelse if (window.attachEvent) window.attachEvent(\"afterprint\", handleAfterPrint, false);\nif (window.matchMedia) window.matchMedia(\"print\").addListener(handlePrintListener);\n"
  },
  {
    "path": "web/src/AppStateHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing PkmnFoundations.Data;\n\nnamespace PkmnFoundations.Web\n{\n    public static class AppStateHelper\n    {\n        public static Pokedex.Pokedex Pokedex(HttpApplicationState application)\n        {\n            return GetTypedApplicationObject(application, \"pkmncfPokedex\", () => new Pokedex.Pokedex(Database.Instance, false));\n        }\n\n        public static T GetTypedApplicationObject<T>(HttpApplicationState application, String key, Func<T> initializer) where T : class\n        {\n            object o = application[key];\n            T t = o as T;\n\n            if (t == null)\n            {\n                t = initializer();\n                application.Add(key, t);\n            }\n\n            return t;\n        }\n    }\n}"
  },
  {
    "path": "web/src/Common.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.IO;\nusing MySql.Data.MySqlClient;\nusing System.Configuration;\nusing System.Text;\n\nnamespace PkmnFoundations.Web\n{\n    public static class Common\n    {\n        public static string HtmlEncode(string s)\n        {\n            return HttpUtility.HtmlEncode(s);\n        }\n\n        public static String JsEncode(String s)\n        {\n            StringBuilder result = new StringBuilder();\n\n            foreach (char c in s.ToCharArray())\n            {\n                if (c == '\\r')\n                {\n                    result.Append(\"\\\\r\");\n                }\n                else if (c == '\\n')\n                {\n                    result.Append(\"\\\\n\");\n                }\n                else if (c == '\\t')\n                {\n                    result.Append(\"\\\\t\");\n                }\n                else if (Convert.ToUInt16(c) < 32)\n                {\n\n                }\n                else if (NeedsJsEscape(c))\n                {\n                    result.Append('\\\\');\n                    result.Append(c);\n                }\n                else result.Append(c);\n            }\n            return result.ToString();\n        }\n\n        private static bool NeedsJsEscape(char c)\n        {\n            if (Convert.ToUInt16(c) < 32) return true;\n            switch (c)\n            {\n                case '\\\"':\n                case '\\'':\n                case '\\\\':\n                    return true;\n                default:\n                    return false; // utf8 de OK\n            }\n        }\n\n        public static string FormatReturns(string text, string ending)\n        {\n            return text.Replace(\"\\r\\n\", \"\\n\").Replace(\"\\r\", \"\\n\").Replace(\"\\n\", ending);\n        }\n\n        private static byte[] m_pad = null;\n\n        /// <summary>\n        /// Encode and decode Gen4 pkgdsprod requests/responses\n        /// </summary>\n        /// <param name=\"message\"></param>\n        public static void CryptMessage(byte[] message)\n        {\n            if (m_pad == null)\n            {\n                m_pad = new byte[256];\n                FileStream s = File.Open(HttpContext.Current.Server.MapPath(\"~/pad.bin\"), FileMode.Open);\n                s.Read(m_pad, 0, m_pad.Length);\n                s.Close();\n            }\n\n            if (message.Length < 5) return;\n            byte padOffset = (byte)(message[0] + message[4]);\n\n            // encrypt and decrypt are the same operation...\n            for (int x = 5; x < message.Length; x++)\n                message[x] ^= m_pad[(x + padOffset) & 0xff];\n        }\n\n        public static String ResolveUrl(String url)\n        {\n            url = url.Trim();\n            if (!(url[0] == '~')) return url;\n            try\n            {\n                if (VirtualPathUtility.IsAppRelative(url)) return VirtualPathUtility.ToAbsolute(url);\n                return url;\n            }\n            catch (HttpException)\n            {\n                return url;\n            }\n        }\n\n        #region File extensions\n        public static String GetExtension(String filename)\n        {\n            int Dot = filename.LastIndexOf('.') + 1;\n            if (Dot < 1) return null;\n            return filename.Substring(Dot, filename.Length - Dot).ToLowerInvariant();\n        }\n\n        public static String GetExtension(String filename, out String namepart)\n        {\n            int Dot = filename.LastIndexOf('.') + 1;\n            if (Dot < 1)\n            {\n                namepart = filename;\n                return null;\n            }\n            namepart = filename.Substring(0, Dot - 1);\n            return filename.Substring(Dot, filename.Length - Dot).ToLowerInvariant();\n        }\n\n        public static MySqlConnection CreateConnection()\n        {\n            return new MySqlConnection(ConfigurationManager.ConnectionStrings[\"pkmnFoundationsConnectionString\"].ConnectionString);\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "web/src/DependencyNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\n\nnamespace PkmnFoundations.Web\n{\n    internal class DependencyNode<TKey, TValue>\n    {\n        public DependencyNode()\n        {\n            Dependencies = new HashSet<TKey>();\n        }\n\n        public DependencyNode(TKey key, TValue value)\n            : this()\n        {\n            Key = key;\n            Value = value;\n        }\n\n        public DependencyNode(TKey key, TValue value, HashSet<TKey> dependencies)\n            : this(key, value)\n        {\n            Dependencies = dependencies;\n        }\n\n        public TKey Key { get; set; }\n        public TValue Value { get; set; }\n        public HashSet<TKey> Dependencies { get; private set; }\n\n        public DependencyNode<TKey, TValue> Clone()\n        {\n            return new DependencyNode<TKey, TValue>(Key, Value, new HashSet<TKey>(Dependencies));\n        }\n    }\n\n    internal class DependencyGraph<TKey, TValue>\n    {\n        public DependencyGraph()\n        {\n            Graph = new List<DependencyNode<TKey, TValue>>();\n        }\n\n        public DependencyGraph(List<DependencyNode<TKey, TValue>> graph)\n        {\n            Graph = graph;\n        }\n\n        public List<DependencyNode<TKey, TValue>> Graph;\n        public Page Page = null;\n\n        public List<TValue> Resolve()\n        {\n            LinkedList<DependencyNode<TKey, TValue>> nodesList = new LinkedList<DependencyNode<TKey, TValue>>(Graph.Select(n => n.Clone()));\n            List<TValue> result = new List<TValue>(nodesList.Count);\n\n            // Remove inexistent keys from dependency lists.\n            // First, obtain a complete set of existent keys.\n            HashSet<TKey> validKeys = new HashSet<TKey>();\n            foreach (DependencyNode<TKey, TValue> node in nodesList)\n                validKeys.Add(node.Key);\n\n            // Then, intersect each dependency list with this validKeys list\n            foreach (DependencyNode<TKey, TValue> node in nodesList)\n                node.Dependencies.IntersectWith(validKeys);\n\n            while (nodesList.Count > 0)\n            {\n                LinkedListNode<DependencyNode<TKey, TValue>> nodeLinked = nodesList.First;\n\n                while (nodeLinked != null)\n                {\n                    if (nodeLinked.Value.Dependencies.Count == 0) break;\n                    nodeLinked = nodeLinked.Next;\n                }\n\n                if (nodeLinked == null)\n                {\n                    // we hit the end of the list without finding a dependency-less node.\n                    // this means there has to be a circular dependency.\n                    // ie. every remaining node in the list depends on some other remaining\n                    // node in the list.\n\n                    // todo: display the actual cycle (or an example if there's more than one)\n                    // in this exception.\n                    // algo:\n                    // Keep a collection of found nodes.\n                    // Start at the first node, adding it to the collection.\n                    // Move to the node of the first dependency of this node and add it to the collection.\n                    // Repeat until you reach a node which is already in the collection.\n                    // Output the collection of nodes, starting at the node which was already found.\n                    throw new CircularDependencyException(\"Circular dependency found in your links.\\n\" +\n                        \"Keys:\\n\" +\n                        String.Join(\"\\n\", nodesList.Select(n => n.Key.ToString()).ToArray()));\n                }\n\n                // add this node to output, remove it as a dependency from the remaining nodes\n                DependencyNode<TKey, TValue> nodeOutput = nodeLinked.Value;\n                nodesList.Remove(nodeLinked);\n\n                foreach (DependencyNode<TKey, TValue> nodeValue in nodesList)\n                    nodeValue.Dependencies.Remove(nodeOutput.Key);\n\n                // fixme: possible issue: the dependencies on the output are all blank.\n                result.Add(nodeOutput.Value);\n            }\n            return result;\n        }\n    }\n\n    public class CircularDependencyException : Exception\n    {\n        // todo: We can keep a jagged list of all cycles found on this exception.\n        public CircularDependencyException(String message) : base(message)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "web/src/ForeignLookupSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Data;\nusing System.Text;\nusing Newtonsoft.Json;\nusing PkmnFoundations.Data;\nusing PkmnFoundations.Structures;\n\nnamespace PkmnFoundations.Web\n{\n    /// <summary>\n    /// Summary description for ForeignLookupSource\n    /// </summary>\n    public class ForeignLookupSource : IHttpHandler, System.Web.SessionState.IRequiresSessionState\n    {\n        public ForeignLookupSource()\n        {\n            //\n            // TODO: Add constructor logic here\n            //\n        }\n\n        public void ProcessRequest(HttpContext context)\n        {\n            if (String.IsNullOrEmpty(context.Request.Form[\"n\"])\n                || String.IsNullOrEmpty(context.Request.Form[\"q\"])\n                || String.IsNullOrEmpty(context.Request.Form[\"c\"]))\n            {\n                ServerError(context);\n                return;\n            }\n\n            int rows = 0;\n            if (!Int32.TryParse(context.Request.Form[\"n\"], out rows))\n            {\n                ServerError(context);\n                return;\n            }\n            if (rows < 0)\n            {\n                ServerError(context);\n                return;\n            }\n\n            string control_id = context.Request.Form[\"c\"];\n            if (control_id.Contains('<') || control_id.Contains('>') || control_id.Contains('\\\"')\n                || control_id.Contains('\\'') || control_id.Contains('\\\\'))\n            {\n                ServerError(context);\n                return;\n            }\n\n            Languages lang = Format.FromIso639_1(context.Request.QueryString[\"lang\"] ?? \"EN\");\n            string format = context.Request.Form[\"f\"] ?? \"h\";\n\n            if (!new[]{\"h\", \"j\"}.Contains(format))\n            {\n                ServerError(context);\n                return;\n            }\n\n            DataTable data;\n            try\n            {\n                data = GetData(context, context.Request.Form[\"q\"], rows, lang);\n            }\n            catch (Exception)\n            {\n                // todo: log error\n                ServerError(context);\n                return;\n            }\n\n            if (data == null || data.Rows.Count == 0)\n            {\n                EmptyResult(context, format);\n                return;\n            }\n\n            if (!data.Columns.Contains(\"Text\") || !data.Columns.Contains(\"Value\"))\n            {\n                ServerError(context);\n                return;\n            }\n\n            switch (format)\n            {\n                case \"h\":\n                    WriteHtml(context, data, control_id);\n                    break;\n                case \"j\":\n                    WriteJson(context, data);\n                    break;\n                default:\n                    // unreachable\n                    break;\n            }\n        }\n\n        public bool IsReusable\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        private void ServerError(HttpContext context)\n        {\n            context.Response.ContentType = \"text/plain\";\n            context.Response.Write(\"Bad request\");\n            context.Response.StatusCode = 400;\n        }\n\n        private void EmptyResult(HttpContext context, string format)\n        {\n            switch (format)\n            {\n                case \"h\":\n                    context.Response.ContentType = \"text/plain\";\n                    context.Response.Write(\"No results\");\n                    break;\n                case \"j\":\n                    context.Response.ContentType = \"text/javascript\";\n                    context.Response.Write(\"[]\");\n                    break;\n                default:\n                    // unreachable\n                    break;\n            }\n        }\n\n        private void WriteHtml(HttpContext context, DataTable data, string control_id)\n        {\n            context.Response.ContentType = \"text/plain\";\n\n            StringBuilder builder = new StringBuilder();\n            int index = 0;\n            bool hasHtml = data.Columns.Contains(\"html\");\n\n            foreach (DataRow row in data.Rows)\n            {\n                string text = row[\"Text\"].ToString();\n                // this breaks if value contains html control chars but is fine since all values will be int\n                string value = row[\"Value\"].ToString();\n                string html = hasHtml ? row[\"html\"].ToString() : Common.HtmlEncode(text);\n\n                builder.Remove(0, builder.Length);\n                builder.Append(\"<div class=\\\"result\");\n\n                // When I enabled this, I started trying to use arrow keys to change my selection.\n                // todo: add arrow key support and bring this back.\n                //if (index == 0)\n                //{\n                //    builder.Append(\" default\\\"\");\n                //}\n                builder.Append(\"\\\" \");\n                if (index == 0)\n                {\n                    builder.Append(\"id=\\\"\");\n                    builder.Append(control_id);\n                    builder.Append(\"_result1\\\" class=\\\"default\\\" \");\n                }\n\n                builder.Append(\"data-value=\\\"\");\n                builder.Append(Common.HtmlEncode(value));\n                builder.Append(\"\\\" data-text=\\\"\");\n                builder.Append(Common.HtmlEncode(text));\n                builder.Append(\"\\\" onclick=\\\"pfSelectLookupResult('\");\n                builder.Append(control_id);\n                builder.Append(\"_main', '\"); // slight hack to avoid passing all client ids in here\n                builder.Append(control_id);\n                builder.Append(\"_hdSelectedValue', '\");\n                builder.Append(Common.HtmlEncode(Common.JsEncode(value)));\n                builder.Append(\"', '\");\n                builder.Append(control_id);\n                builder.Append(\"_txtInput', '\");\n                builder.Append(Common.HtmlEncode(Common.JsEncode(text)));\n                builder.Append(\"')\\\">\");\n                builder.Append(html);\n                builder.Append(\"</div>\\n\");\n\n                context.Response.Write(builder.ToString());\n                index++;\n            }\n        }\n\n        private void WriteJson(HttpContext context, DataTable data)\n        {\n            context.Response.ContentType = \"text/javascript\";\n\n            ForeignLookupResult[] results = new ForeignLookupResult[data.Rows.Count];\n            for (int x = 0; x < results.Length; x++)\n            {\n                DataRow row = data.Rows[x];\n                results[x] = new ForeignLookupResult \n                { \n                    t = DatabaseExtender.Cast<string>(row[\"Text\"]) ?? \"\", \n                    v = DatabaseExtender.Cast<int ?>(row[\"Value\"]) ?? 0 };\n            }\n            context.Response.Write(JsonConvert.SerializeObject(results));\n        }\n\n        protected virtual DataTable GetData(HttpContext context, string query, int rows, Languages lang)\n        {\n            return null;\n        }\n    }\n\n    internal class ForeignLookupResult\n    {\n        public string t;\n        public int v;\n    }\n}\n"
  },
  {
    "path": "web/src/HeaderColour.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.Web\n{\n    public class HeaderColour : System.Web.UI.Control\n    {\n        public HeaderColour()\n        {\n            CssClass = null;\n            this.PreRender += HeaderColour_PreRender;\n        }\n\n        private void HeaderColour_PreRender(object sender, EventArgs e)\n        {\n            SetHeaderCssClass(Page.Master);\n        }\n\n        private void SetHeaderCssClass(System.Web.UI.MasterPage master)\n        {\n            // recursively find the TOP master and set its HeaderCssClass if available.\n            if (master == null) return;\n            PkmnFoundations.GTS.MasterPage gtsMaster = master as PkmnFoundations.GTS.MasterPage;\n            if (gtsMaster == null)\n            {\n                SetHeaderCssClass(master.Master);\n                return;\n            }\n\n            gtsMaster.HeaderCssClass = CssClass;\n        }\n\n        protected override void LoadViewState(object savedState)\n        {\n            HeaderColourViewState state = (HeaderColourViewState)savedState;\n\n            this.CssClass = state.CssClass;\n\n            base.LoadViewState(state.ControlViewState);\n        }\n\n        protected override object SaveViewState()\n        {\n            HeaderColourViewState state = new HeaderColourViewState();\n\n            state.CssClass = this.CssClass;\n            state.ControlViewState = base.SaveViewState();\n\n            return state;\n        }\n\n        public String CssClass { get; set; }\n\n        [Serializable()]\n        private struct HeaderColourViewState\n        {\n            public object ControlViewState;\n            public String CssClass;\n        }\n    }\n}"
  },
  {
    "path": "web/src/OnceTemplate.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.Web\n{\n    /// <summary>\n    /// Control which only renders once per unique key on a given page.\n    /// </summary>\n    public class OnceTemplate : System.Web.UI.WebControls.PlaceHolder\n    {\n        public OnceTemplate() : base()\n        {\n        }\n\n        public String Key { get; set; }\n\n        private HashSet<String> m_keys = null;\n        private HashSet<String> Keys\n        {\n            get\n            {\n                if (m_keys != null) return m_keys;\n                if (!Page.Items.Contains(\"pkmncfOnceTemplate\"))\n                {\n                    m_keys = new HashSet<String>();\n                    Page.Items.Add(\"pkmncfOnceTemplate\", m_keys);\n                }\n                else m_keys = (HashSet<String>)Page.Items[\"pkmncfOnceTemplate\"];\n                return m_keys;\n            }\n        }\n\n        protected override void Render(System.Web.UI.HtmlTextWriter writer)\n        {\n            if (Keys.Contains(Key)) return;\n            Keys.Add(Key);\n            base.Render(writer);\n        }\n    }\n}\n"
  },
  {
    "path": "web/src/RequireCss.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.Web\n{\n    public class RequireCss : RequireLinkBase\n    {\n        public RequireCss() : base()\n        {\n\n        }\n\n        public override void RenderHeader(System.Web.UI.HtmlTextWriter writer)\n        {\n            writer.AddAttribute(\"rel\", \"stylesheet\");\n            writer.AddAttribute(\"href\", ResolveUrl(CssUrl ?? \"\"));\n            writer.AddAttribute(\"type\", \"text/css\");\n            writer.RenderBeginTag(\"link\");\n            writer.RenderEndTag();\n        }\n\n        public String CssUrl { get; set; }\n\n        public override string Key\n        {\n            get\n            {\n                if (base.Key != null)\n                    return base.Key;\n                return CssUrl;\n            }\n            set\n            {\n                base.Key = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/src/RequireLinkBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.HtmlControls;\n\nnamespace PkmnFoundations.Web\n{\n    public abstract class RequireLinkBase : System.Web.UI.Control\n    {\n        protected RequireLinkBase()\n            : base()\n        {\n            this.Init += RequireLinkBase_Init;\n            this.Load += RequireLinkBase_Load;\n            this.PreRender += RequireLinkBase_PreRender;\n        }\n\n        void RequireLinkBase_Init(object sender, EventArgs e)\n        {\n            // todo: only bind once\n            Page.PreRender += Page_PreRender;\n        }\n\n        void RequireLinkBase_Load(object sender, EventArgs e)\n        {\n        }\n\n        void RequireLinkBase_PreRender(object sender, EventArgs e)\n        {\n            DependencyGraph<String, RequireLinkBase> graph = GetDependencyGraph();\n\n            DependencyNode<String, RequireLinkBase> node = new DependencyNode<String, RequireLinkBase>(Key, this, ParseDependencies(After ?? \"\"));\n            if (!graph.Graph.Any(n => n.Key == Key))\n                graph.Graph.Add(node);\n            // todo: merge dependencies if it's a dupe\n        }\n\n        void Page_PreRender(object sender, EventArgs e)\n        {\n            DependencyGraph<String, RequireLinkBase> graph = GetDependencyGraph();\n            if (graph.Page == null)\n            {\n                Page.Header.Controls.Add(new RequireLinkRenderer(GetDependencyGraph()));\n                graph.Page = Page;\n            }\n        }\n\n        public virtual String Key { get; set; }\n        public String After { get; set; }\n\n        public abstract void RenderHeader(System.Web.UI.HtmlTextWriter writer);\n\n        /// <summary>\n        /// Obtain a dependency graph which is specific to the Page instance\n        /// and the control class\n        /// </summary>\n        private DependencyGraph<String, RequireLinkBase> GetDependencyGraph()\n        {\n            Type myType = this.GetType();\n\n            Dictionary<Type, DependencyGraph<String, RequireLinkBase>> all_graphs;\n\n            if (!Page.Items.Contains(\"pkmncfDependencyGraphs\"))\n            {\n                all_graphs = new Dictionary<Type, DependencyGraph<String, RequireLinkBase>>();\n                Page.Items.Add(\"pkmncfDependencyGraphs\", all_graphs);\n            }\n            else all_graphs =\n                (Dictionary<Type, DependencyGraph<String, RequireLinkBase>>)Page.Items[\"pkmncfDependencyGraphs\"];\n\n            if (all_graphs.ContainsKey(myType)) return all_graphs[myType];\n\n            DependencyGraph<String, RequireLinkBase> myGraph = new DependencyGraph<String, RequireLinkBase>();\n            all_graphs.Add(myType, myGraph);\n            return myGraph;\n        }\n\n        private HashSet<String> ParseDependencies(String dependencies)\n        {\n            return new HashSet<String>(dependencies.Split(',').Select(s => s.Trim()).Where(s => s.Length > 0));\n        }\n\n    }\n\n    internal class RequireLinkRenderer : System.Web.UI.Control\n    {\n        public RequireLinkRenderer(DependencyGraph<String, RequireLinkBase> graph)\n            : base()\n        {\n            m_graph = graph;\n        }\n\n        private DependencyGraph<String, RequireLinkBase> m_graph;\n\n        protected override void Render(System.Web.UI.HtmlTextWriter writer)\n        {\n            List<RequireLinkBase> links = m_graph.Resolve();\n\n            foreach (RequireLinkBase link in links)\n                link.RenderHeader(writer);\n        }\n    }\n}\n"
  },
  {
    "path": "web/src/RequireScript.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.Web\n{\n    public class RequireScript : RequireLinkBase\n    {\n        public RequireScript() : base()\n        {\n\n        }\n\n        public override void RenderHeader(System.Web.UI.HtmlTextWriter writer)\n        {\n            writer.AddAttribute(\"src\", ResolveUrl(ScriptUrl ?? \"\"));\n            writer.AddAttribute(\"type\", Type ?? \"text/javascript\");\n            writer.RenderBeginTag(\"script\");\n            writer.RenderEndTag();\n        }\n\n        public String ScriptUrl { get; set; }\n        public String Type { get; set; }\n\n        public override string Key\n        {\n            get\n            {\n                if (base.Key != null)\n                    return base.Key;\n                return ScriptUrl;\n            }\n            set\n            {\n                base.Key = value;\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/src/RetinaImage.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Globalization;\n\nnamespace PkmnFoundations.Web\n{\n    public class RetinaImage : RetinaImageBase\n    {\n        /// <summary>\n        /// Image with DPI substitution. Alternate filenames are generated based on a naming pattern.\n        /// </summary>\n        public RetinaImage()\n            : base()\n        {\n            this.FormatString = \"{3}{0}@{2:#.##}x.{1}\";\n            this.AlternateSizes = \"\";\n            this.FormatScaleFactor = 1;\n            this.Format1x = false;\n        }\n\n        public static String ScaledImageName(String filename, String format, float scale)\n        {\n            // todo: handle ? querystring\n            String namepart;\n            String extension = Common.GetExtension(filename, out namepart);\n            int slash = namepart.LastIndexOf('/');\n            String fileNamepart, directory;\n            if (slash >= 0)\n            {\n                fileNamepart = namepart.Substring(slash + 1);\n                directory = namepart.Substring(0, slash + 1);\n            }\n            else\n            {\n                fileNamepart = namepart;\n                directory = \"\";\n            }\n            return String.Format(format, fileNamepart, extension, scale, directory);\n        }\n\n        protected override List<ImageRendition> GetScales()\n        {\n            List<ImageRendition> result = new List<ImageRendition>();\n\n            String[] split = AlternateSizes.Split(',');\n            List<float> scales = new List<float>(split.Length + 1);\n\n            if (Format1x) result.Add(new ImageRendition(ScaledImageName(ImageUrl, FormatString, FormatScaleFactor), 1.0f));\n            else result.Add(new ImageRendition(ImageUrl, 1.0f));\n\n            foreach (String s in split)\n            {\n                float result2;\n                if (!Single.TryParse(s, NumberStyles.Number, nfi, out result2)) continue;\n                result.Add(new ImageRendition(ScaledImageName(ImageUrl, FormatString, result2 * FormatScaleFactor), result2));\n            }\n\n            return result;\n        }\n\n        private static NumberFormatInfo nfi = System.Globalization.CultureInfo.InvariantCulture.NumberFormat;\n\n        protected override void LoadViewState(object savedState)\n        {\n            RetinaImageViewState viewstate = (RetinaImageViewState)savedState;\n            base.LoadViewState(viewstate.RetinaImageBaseViewState);\n            FormatString = viewstate.FormatString;\n            AlternateSizes = viewstate.AlternateSizes;\n        }\n\n        protected override object SaveViewState()\n        {\n            RetinaImageViewState viewstate = new RetinaImageViewState();\n            viewstate.RetinaImageBaseViewState = base.SaveViewState();\n            viewstate.FormatString = FormatString;\n            viewstate.AlternateSizes = AlternateSizes;\n            return viewstate;\n        }\n\n        /// <summary>\n        /// Format string for String.Format.\n        /// 0: filename, 1: extension, 2: scale, 3: path\n        /// </summary>\n        public String FormatString\n        {\n            get;\n            set;\n        }\n\n        public String AlternateSizes\n        {\n            get;\n            set;\n        }\n\n        /// <summary>\n        /// Multipy DPI scale by this constant in filenames. Useful for paths like /thumb_100/ and /thumb_200/\n        /// </summary>\n        public float FormatScaleFactor\n        {\n            get;\n            set;\n        }\n\n        /// <summary>\n        /// If true, 1x images go through the format string. Otherwise they use the raw ImageUrl.\n        /// </summary>\n        public bool Format1x\n        {\n            get;\n            set;\n        }\n\n        [Serializable()]\n        protected struct RetinaImageViewState\n        {\n            public object RetinaImageBaseViewState;\n            public String FormatString;\n            public String AlternateSizes;\n        }\n    }\n}\n"
  },
  {
    "path": "web/src/RetinaImageBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Globalization;\nusing System.Web.UI;\n\n\nnamespace PkmnFoundations.Web\n{\n    /// <summary>\n    /// asp:Image with retina substitution capabilities\n    /// </summary>\n    public abstract class RetinaImageBase : System.Web.UI.WebControls.Image\n    {\n        public RetinaImageBase() : base()\n        {\n            this.PreRender += RetinaImageBase_PreRender;\n            this.m_css_class = base.CssClass;\n            base.CssClass = \"retina\";\n        }\n\n        protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)\n        {\n            WriteDataAttributes(writer);\n            base.AddAttributesToRender(writer);\n        }\n\n        private void WriteDataAttributes(HtmlTextWriter writer)\n        {\n            foreach (ImageRendition r in m_scales)\n            {\n                writer.AddAttribute(AttributeName(r.Scale), ResolveUrl(r.ImageUrl));\n            }\n        }\n\n        private static NumberFormatInfo nfi = CultureInfo.InvariantCulture.NumberFormat;\n\n        public static String AttributeName(float scale)\n        {\n            return \"data-hires-\" + scale.ToString(nfi);\n        }\n\n        public static float getDevicePixelRatio(Page page)\n        {\n            float dpr = 1.0f;\n            if (page.Request.Cookies[\"pixelRatio\"] == null) return 1.0f;\n            if (!Single.TryParse(page.Request.Cookies[\"pixelRatio\"].Value, out dpr)) return 1.0f;\n            return dpr;\n        }\n\n        public void RetinaImageBase_PreRender(object sender, EventArgs e)\n        {\n            float scale = getDevicePixelRatio(Page);\n            m_scales = GetScales();\n            m_scales.Sort();\n\n            ImageRendition r = new ImageRendition(\"\", 0.0f);\n            foreach (ImageRendition f in m_scales)\n            {\n                if (r.Scale > 0.0f && f.Scale > scale && r.Scale >= scale) break;\n                r = f;\n            }\n\n            base.ImageUrl = r.ImageUrl;\n        }\n\n        private List<ImageRendition> m_scales;\n\n        protected abstract List<ImageRendition> GetScales();\n\n        public new string ImageUrl\n        {\n            get;\n            set;\n        }\n\n        private String m_css_class;\n        /// <summary>\n        /// Custom CSS class(es). A \"retina\" class will be appended to the start to drive jQuery selectors.\n        /// </summary>\n        public override string CssClass\n        {\n            get\n            {\n                return m_css_class;\n            }\n            set\n            {\n                m_css_class = value;\n                UpdateCssClass();\n            }\n        }\n\n        private bool m_keep_high_res;\n        /// <summary>\n        /// If this is true, a high resolution image will be kept in place even\n        /// after the image has shrunken down to the next stop. This can\n        /// prevent unnecessary image downloads.\n        /// </summary>\n        public bool KeepHighRes\n        {\n            get\n            {\n                return m_keep_high_res;\n            }\n            set\n            {\n                m_keep_high_res = value;\n                UpdateCssClass();\n            }\n        }\n\n        private void UpdateCssClass()\n        {\n            String prefix = m_keep_high_res ? \"retina keephr\" : \"retina\";\n            base.CssClass = m_css_class.Length > 0 ? (prefix + \" \" + m_css_class) : prefix;\n        }\n\n        protected override void LoadViewState(object savedState)\n        {\n            RetinaImageBaseViewState viewstate = (RetinaImageBaseViewState)savedState;\n            base.LoadViewState(viewstate.ImageViewState);\n            this.ImageUrl = viewstate.ImageUrl;\n            m_css_class = viewstate.CssClass;\n            m_keep_high_res = viewstate.KeepHighRes;\n            UpdateCssClass();\n        }\n\n        protected override object SaveViewState()\n        {\n            RetinaImageBaseViewState viewstate = new RetinaImageBaseViewState();\n            viewstate.ImageViewState = base.SaveViewState();\n            viewstate.ImageUrl = this.ImageUrl;\n            viewstate.CssClass = this.CssClass;\n            viewstate.KeepHighRes = this.KeepHighRes;\n            return viewstate;\n        }\n\n        protected struct ImageRendition : IComparable<ImageRendition>\n        {\n            public String ImageUrl;\n            public float Scale;\n\n            public ImageRendition(String image_url, float scale)\n            {\n                ImageUrl = image_url;\n                Scale = scale;\n            }\n\n            public int CompareTo(ImageRendition other)\n            {\n                return Scale.CompareTo(other.Scale);\n            }\n        }\n\n        [Serializable()]\n        private struct RetinaImageBaseViewState\n        {\n            public object ImageViewState;\n            public String ImageUrl;\n            public String CssClass;\n            public bool KeepHighRes;\n        }\n    }\n}\n"
  },
  {
    "path": "web/src/WebException.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\n\nnamespace PkmnFoundations.Web\n{\n    public class WebException : Exception\n    {\n        public WebException(String message, int responseCode) : base(message)\n        {\n            ResponseCode = responseCode;\n        }\n\n        public WebException(String message) : this(message, 500)\n        {\n\n        }\n\n        public WebException(int responseCode) : this(DefaultMessage(responseCode), responseCode)\n        {\n\n        }\n\n        public WebException() : this(500)\n        {\n\n        }\n\n        public int ResponseCode { get; private set; }\n\n        public static String DefaultMessage(int responseCode)\n        {\n            switch (responseCode)\n            {\n                case 400:\n                    return \"Bad request\";\n                case 403:\n                    return \"Forbidden\";\n                case 404:\n                    return \"Not found\";\n                case 500:\n                default:\n                    return \"Server error\";\n            }\n        }\n    }\n}"
  },
  {
    "path": "web/src/WebFormat.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Web;\nusing PkmnFoundations.Pokedex;\nusing PkmnFoundations.Structures;\n\nnamespace PkmnFoundations.Web\n{\n    public static class WebFormat\n    {\n        public static String Markings(Markings markings)\n        {\n            return Format.Markings(markings, \"<span class=\\\"m\\\">{0}</span>\", \"<span>{0}</span>\", \"\");\n        }\n\n        public static String Gender(Genders gender)\n        {\n            switch (gender)\n            {\n                case Genders.Male:\n                    return \"♂\";\n                case Genders.Female:\n                    return \"♀\";\n                default:\n                    return \"\";\n            }\n        }\n\n        public static String RenderProgress(int curr, int max)\n        {\n            float percent = (float)curr * 100.0f / (float)max;\n            return \"<div class=\\\"progress\\\" style=\\\"width: \" + percent.ToString() + \"%;\\\"></div>\";\n        }\n\n        public static String RenderType(Pokedex.Type type)\n        {\n            return \"<span class=\\\"type \" + type.Identifier + \"\\\">\" + type.Name.ToString() + \"</span>\";\n        }\n\n        public static String PokemonImageLarge(PokemonPartyBase pokemon)\n        {\n            return (pokemon.IsShiny ? \"~/images/pkmn-lg-s/\" : \"~/images/pkmn-lg/\") +\n                PokemonImage2(pokemon) + \".png\";\n        }\n\n        public static String PokemonImageSmall(PokemonPartyBase pokemon)\n        {\n            // todo: shiny minis\n            return (pokemon.IsShiny ? \"~/images/pkmn-sm/\" : \"~/images/pkmn-sm/\") +\n                PokemonImage2(pokemon) + \".png\";\n        }\n\n        public static String SpeciesImageLarge(Form f)\n        {\n            return \"~/images/pkmn-lg/\" + PokemonImage2(f, Genders.Male) + \".png\";\n        }\n\n        public static String SpeciesImageLarge(Species s)\n        {\n            return \"~/images/pkmn-lg/\" + PokemonImage2(s.Forms(0), Genders.Male) + \".png\";\n        }\n\n        public static String SpeciesImageSmall(Form f)\n        {\n            // fixme: this is appending forms to some pokemon eg. arceus, keldeo, deerling\n            // todo: need to take gender here optionally\n            return \"~/images/pkmn-sm/\" + PokemonImage2(f, Genders.Male) + \".png\";\n        }\n\n        public static String SpeciesImageSmall(Species s)\n        {\n            return \"~/images/pkmn-sm/\" + PokemonImage2(s.Forms(0), Genders.Male) + \".png\";\n        }\n\n        private static String PokemonImage2(PokemonPartyBase pokemon)\n        {\n            return PokemonImage2(pokemon.Form, pokemon.Gender);\n        }\n\n        private static String PokemonImage2(Form f, Genders g)\n        {\n            // todo: spinda\n            StringBuilder builder = new StringBuilder();\n            builder.Append(f.SpeciesID);\n            if (f.Suffix.Length > 0)\n            {\n                builder.Append('-');\n                builder.Append(f.Suffix);\n            }\n            if (f.Species.GenderVariations && g == Genders.Female)\n                builder.Append(\"-f\");\n\n            return builder.ToString();\n        }\n\n        public static String ItemImage(Item item)\n        {\n            return \"~/images/item-sm/\" + item.ID.ToString() + \".png\";\n        }\n    }\n}"
  },
  {
    "path": "web/test/BoxUp.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"BoxUp.aspx.cs\" Inherits=\"PkmnFoundations.GTS.debug.BoxUp\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"test\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n    <div>\n    <p>Uplaod your Generation IV box upload, battle video, or dressup capture:</p>\n        <div>\n            <asp:Label Text=\"Format:\" AssociatedControlID=\"rblFormat\" runat=\"server\" />\n            <asp:RadioButtonList ID=\"rblFormat\" RepeatDirection=\"Horizontal\" runat=\"server\">\n                <asp:ListItem Text=\"Hex dump\" Value=\"hd\" Selected=\"True\" />\n                <asp:ListItem Text=\"C array\" Value=\"ca\" />\n            </asp:RadioButtonList>\n        </div>\n        <div>\n            <asp:FileUpload ID=\"fuBox\" runat=\"server\" />\n            <asp:Button ID=\"btnSend\" Text=\"Send\" OnClick=\"btnSend_Click\" runat=\"server\" />\n        </div>\n    </div>\n\n    <asp:Literal ID=\"litMessage\" runat=\"server\" />\n    <asp:PlaceHolder ID=\"phDecoded\" Visible=\"false\" runat=\"server\">\n    <div>\n    <div class=\"code\">\n    <asp:Literal ID=\"litDecoded\" runat=\"server\" />\n    </div>\n    </div>\n    </asp:PlaceHolder>\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/test/BoxUp.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing System.Text;\nusing System.IO;\nusing GamestatsBase;\n\nnamespace PkmnFoundations.GTS.debug\n{\n    public partial class BoxUp : System.Web.UI.Page\n    {\n        protected void Page_Init(object sender, EventArgs e)\n        {\n            litMessage.Text = \"\";\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        private static byte[] m_pad = new byte[256];\n\n        protected void btnSend_Click(object sender, EventArgs e)\n        {\n            phDecoded.Visible = false;\n            byte[] data = fuBox.FileBytes;\n            FileStream s = File.Open(Server.MapPath(\"~/pad.bin\"), FileMode.Open);\n            s.Read(m_pad, 0, m_pad.Length);\n            s.Close();\n\n            CryptMessage(data);\n\n            switch (rblFormat.SelectedValue)\n            {\n                case \"hd\":\n                default:\n                    litDecoded.Text = RenderHex(data.ToHexStringLower());\n                    break;\n                case \"ca\":\n                    litDecoded.Text = RenderCArray(data.ToHexStringLower());\n                    break;\n            }\n            phDecoded.Visible = true;\n        }\n\n        private string RenderHex(string hex)\n        {\n            StringBuilder builder = new StringBuilder();\n            for (int x = 0; x < hex.Length; x += 16)\n            {\n                if (x % 32 == 0)\n                {\n                    builder.Append((x >> 1).ToString(\"x4\"));\n                    builder.Append(\": \");\n                }\n\n                builder.Append(hex.Substring(x, Math.Min(16, hex.Length - x)));\n                builder.Append((x % 32 == 0) ? \" \" : \"<br />\");\n            }\n            return builder.ToString();\n        }\n\n        private string RenderCArray(string hex)\n        {\n            StringBuilder builder = new StringBuilder();\n            for (int x = 0; x < hex.Length; x += 2)\n            {\n                if (x > 0)\n                {\n                    builder.Append(\", \");\n                    if (x % 16 == 0) builder.Append(\"<br />\\r\\n\");\n                }\n                builder.Append(\"0x\");\n                builder.Append(hex.Substring(x, Math.Min(2, hex.Length - x)));\n            }\n            return builder.ToString();\n        }\n\n        private void CryptMessage(byte[] message)\n        {\n            if (message.Length < 5) return;\n            byte padOffset = (byte)(message[0] + message[4]);\n\n            // encrypt and decrypt are the same operation...\n            for (int x = 5; x < message.Length; x++)\n                message[x] ^= m_pad[(x + padOffset) & 0xff];\n        }\n    }\n}"
  },
  {
    "path": "web/test/BoxUp.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.debug\n{\n\n\n    public partial class BoxUp\n    {\n\n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n\n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n\n        /// <summary>\n        /// rblFormat control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.RadioButtonList rblFormat;\n\n        /// <summary>\n        /// fuBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.FileUpload fuBox;\n\n        /// <summary>\n        /// btnSend control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSend;\n\n        /// <summary>\n        /// litMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage;\n\n        /// <summary>\n        /// phDecoded control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phDecoded;\n\n        /// <summary>\n        /// litDecoded control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litDecoded;\n    }\n}\n"
  },
  {
    "path": "web/test/Decode.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Decode.aspx.cs\" Inherits=\"PkmnFoundations.GTS.debug.Decode\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"test\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n    <div>\n    <p>Enter data querystring to decode:</p>\n    <asp:TextBox ID=\"txtData\" Width=\"600\" runat=\"server\" />\n    <asp:Button ID=\"btnDecode\" Text=\"Decode\" OnClick=\"btnDecode_Click\" runat=\"server\" />\n    </div>\n    <asp:Literal ID=\"litMessage\" runat=\"server\" />\n    <asp:PlaceHolder ID=\"phDecoded\" Visible=\"false\" runat=\"server\">\n    <div>\n    <p>Generation: <asp:Literal ID=\"litGeneration\" runat=\"server\" /></p>\n    <div class=\"code\">\n    <asp:Literal ID=\"litDecoded\" runat=\"server\" />\n    </div>\n    <asp:PlaceHolder ID=\"phChecksum\" Visible=\"false\" runat=\"server\">\n    <p>\n    Checksum: <asp:Literal ID=\"litChecksum\" runat=\"server\" />\n    </p>\n    </asp:PlaceHolder>\n    </div>\n    </asp:PlaceHolder>\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/test/Decode.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing System.Text;\nusing System.Net;\nusing GamestatsBase;\n\nnamespace PkmnFoundations.GTS.debug\n{\n    public partial class Decode : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            litMessage.Text = \"\";\n            litChecksum.Text = \"\";\n        }\n\n        protected void btnDecode_Click(object sender, EventArgs e)\n        {\n            byte[] data = null;\n            phDecoded.Visible = false;\n            phChecksum.Visible = false;\n\n            try\n            {\n                GamestatsHandler gs4 = new GamestatsHandler(\"sAdeqWo3voLeC5r16DYv\",\n                    0x45, 0x1111, 0x80000000, 0x4a3b2c1d, \"pokemondpds\",\n                    GamestatsRequestVersions.Version2, GamestatsResponseVersions.Version1, true);\n\n                data = gs4.DecryptData(txtData.Text);\n                litGeneration.Text = \"4\";\n            }\n            catch (FormatException)\n            {\n            }\n\n            if (data == null) try\n            {\n                GamestatsHandler gs5 = new GamestatsHandler(\"HZEdGCzcGGLvguqUEKQN0001d93500002dd5000000082db842b2syachi2ds\",\n                    GamestatsRequestVersions.Version3, GamestatsResponseVersions.Version2, false);\n                data = gs5.DecryptData(txtData.Text);\n                litGeneration.Text = \"5\";\n            }\n            catch (FormatException)\n            {\n            }\n\n            if (data == null) try\n            {\n                GamestatsHandler gsPlat = new GamestatsHandler(\"uLMOGEiiJogofchScpXb000244fd00006015100000005b440e7epokemondpds\",\n                    GamestatsRequestVersions.Version3, GamestatsResponseVersions.Version2, true);\n                data = gsPlat.DecryptData(txtData.Text);\n                litGeneration.Text = \"Platinum\";\n            }\n            catch (FormatException)\n            {\n            }\n\n            if (data == null) try\n            {\n                GamestatsHandler gsDungeonWii = new GamestatsHandler(\"zjzrhOVXZKLHNspYpGoR0001c7850000620b0000000820556356pokedngnwii\",\n                    GamestatsRequestVersions.Version3, GamestatsResponseVersions.Version2);\n                data = gsDungeonWii.DecryptData(txtData.Text);\n                litGeneration.Text = \"Mystery Dungeon Wii\";\n            }\n            catch (FormatException)\n            {\n            }\n\n            if (data == null) try\n            {\n                data = DecryptData(txtData.Text);\n\n                int checkedsum = 0;\n                foreach (byte b in data)\n                    checkedsum += b;\n\n                litGeneration.Text = \"Unknown (raw)\";\n                litChecksum.Text = checkedsum.ToString();\n                phChecksum.Visible = true;\n            }\n            catch (FormatException)\n            {\n            }\n\n            if (data == null) try\n            {\n                data = GamestatsHandler.FromUrlSafeBase64String(txtData.Text);\n\n                litGeneration.Text = \"Unknown (are you sure this is gamestats data?)\";\n                litChecksum.Text = \"\";\n                phChecksum.Visible = false;\n            }\n            catch (FormatException)\n            {\n            }\n\n            if (data == null)\n            {\n                litMessage.Text = \"<p class=\\\"errorMessage\\\">Data is not formatted correctly.</p>\";\n            }\n            else\n            {\n                litDecoded.Text = RenderHex(data.ToHexStringLower());\n            }\n\n            phDecoded.Visible = true;\n        }\n\n        public static byte[] DecryptData(String data)\n        {\n            byte[] data2 = GamestatsHandler.FromUrlSafeBase64String(data);\n            if (data2.Length < 12) throw new FormatException(\"Data must contain at least 12 bytes.\");\n\n            int checksum = BitConverter.ToInt32(data2, 0);\n            checksum = IPAddress.NetworkToHostOrder(checksum); // endian flip\n            //checksum ^= 0x2db842b2;\n\n            return data2;\n        }\n\n        private String RenderHex(String hex)\n        {\n            // todo: this should be moved to a user control\n            StringBuilder builder = new StringBuilder();\n            for (int x = 0; x < hex.Length; x += 16)\n            {\n                if (x % 32 == 0)\n                {\n                    builder.Append((x >> 1).ToString(\"x4\"));\n                    builder.Append(\": \");\n                }\n\n                builder.Append(hex.Substring(x, Math.Min(16, hex.Length - x)));\n                builder.Append((x % 32 == 0) ? \" \" : \"<br />\");\n            }\n            return builder.ToString();\n        }\n    }\n}"
  },
  {
    "path": "web/test/Decode.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.debug {\n    \n    \n    public partial class Decode {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// txtData control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtData;\n        \n        /// <summary>\n        /// btnDecode control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnDecode;\n        \n        /// <summary>\n        /// litMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litMessage;\n        \n        /// <summary>\n        /// phDecoded control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phDecoded;\n        \n        /// <summary>\n        /// litGeneration control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litGeneration;\n        \n        /// <summary>\n        /// litDecoded control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litDecoded;\n        \n        /// <summary>\n        /// phChecksum control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder phChecksum;\n        \n        /// <summary>\n        /// litChecksum control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litChecksum;\n    }\n}\n"
  },
  {
    "path": "web/test/Gsid.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"Gsid.aspx.cs\" Inherits=\"PkmnFoundations.Web.test.Gsid\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"test\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n\n    <asp:Literal ID=\"litOutput\" runat=\"server\" />\n\n</asp:Content>\n"
  },
  {
    "path": "web/test/Gsid.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Support;\n\nnamespace PkmnFoundations.Web.test\n{\n    public partial class Gsid : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            StringBuilder output = new StringBuilder();\n            var gsids = new int[] { 476518182, 330241374 };\n            foreach (var gsid in gsids)\n            {\n                string enc = GameSyncUtils.PidToGsid(gsid);\n                int dec = (int)GameSyncUtils.GsidToPid(enc);\n                output.AppendLine(enc);\n                output.AppendLine(dec.ToString());\n                output.AppendLine(String.Format(\"{0} ({0:X8}) == {1} ({1:X8})? {2}\", gsid, dec, gsid == dec));\n                output.AppendLine();\n            }\n\n            litOutput.Text = Common.FormatReturns(Common.HtmlEncode(output.ToString()), \"<br />\\n\");\n        }\n    }\n}\n"
  },
  {
    "path": "web/test/Gsid.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.Web.test\n{\n\n\n    public partial class Gsid\n    {\n\n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n\n        /// <summary>\n        /// litOutput control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litOutput;\n    }\n}\n"
  },
  {
    "path": "web/test/NameDecode.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"NameDecode.aspx.cs\" Inherits=\"PkmnFoundations.GTS.test.NameDecode\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"test\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n<div>Enter name in hex to decode:\n<asp:TextBox ID=\"txtName\" Width=\"600px\" runat=\"server\" />\n<asp:Button ID=\"btnSubmit\" Text=\"Decode\" OnClick=\"btnSubmit_Click\" Width=\"60px\" runat=\"server\" />\n</div>\n<div>\n<asp:Literal ID=\"litName\" runat=\"server\" />\n</div>\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/test/NameDecode.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Support;\nusing GamestatsBase;\nusing PkmnFoundations.Web;\n\nnamespace PkmnFoundations.GTS.test\n{\n    public partial class NameDecode : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnSubmit_Click(object sender, EventArgs e)\n        {\n            byte[] data = GamestatsBase.Common.FromHexString(txtName.Text.Replace(\" \", \"\"));\n            EncodedString4 es = new EncodedString4(data);\n            litName.Text = Web.Common.HtmlEncode(es.ToString());\n        }\n    }\n}"
  },
  {
    "path": "web/test/NameDecode.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.test {\n    \n    \n    public partial class NameDecode {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// txtName control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtName;\n        \n        /// <summary>\n        /// btnSubmit control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSubmit;\n        \n        /// <summary>\n        /// litName control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litName;\n    }\n}\n"
  },
  {
    "path": "web/test/NameEncode.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"NameEncode.aspx.cs\" Inherits=\"PkmnFoundations.Web.test.NameEncode\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"test\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<form id=\"theForm\" runat=\"server\">\n<div>Enter text to encode:\n<asp:TextBox ID=\"txtName\" Width=\"600px\" runat=\"server\" />\n<asp:Button ID=\"btnSubmit\" Text=\"Encode\" OnClick=\"btnSubmit_Click\" Width=\"60px\" runat=\"server\" />\n</div>\n<div>\n<asp:Literal ID=\"litName\" runat=\"server\" />\n</div>\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/test/NameEncode.aspx.cs",
    "content": "﻿using PkmnFoundations.Support;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace PkmnFoundations.Web.test\n{\n    public partial class NameEncode : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnSubmit_Click(object sender, EventArgs e)\n        {\n            string text = txtName.Text;\n            EncodedString4 es = new EncodedString4(text, text.Length * 2 + 8);\n            litName.Text = Common.HtmlEncode(GamestatsBase.Common.ToHexStringUpper(es.RawData));\n        }\n    }\n}"
  },
  {
    "path": "web/test/NameEncode.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.Web.test {\n    \n    \n    public partial class NameEncode {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// txtName control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtName;\n        \n        /// <summary>\n        /// btnSubmit control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnSubmit;\n        \n        /// <summary>\n        /// litName control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal litName;\n    }\n}\n"
  },
  {
    "path": "web/test/VideoId.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/masters/MasterPage.master\" AutoEventWireup=\"true\" CodeBehind=\"VideoId.aspx.cs\" Inherits=\"PkmnFoundations.GTS.test.VideoId\" %>\n<%@ Register TagPrefix=\"pf\" Namespace=\"PkmnFoundations.Web\" Assembly=\"PkmnFoundations.Web\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"cpHead\" runat=\"server\">\n    <pf:HeaderColour ID=\"HeaderColour1\" CssClass=\"test\" runat=\"server\" />\n</asp:Content>\n\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"cpMain\" runat=\"server\">\n<br />\n<form id=\"theForm\" runat=\"server\">\nBattle video ID:\n<asp:TextBox ID=\"txtBattleVideo\" runat=\"server\" />\n<br />\n<asp:Button ID=\"btnToSerial\" Text=\"↓\" OnClick=\"btnToSerial_Click\" runat=\"server\" />\n<asp:Button ID=\"btnToVideo\" Text=\"↑\" OnClick=\"btnToVideo_Click\" runat=\"server\" />\n<br />\nSerial number:\n<asp:TextBox ID=\"txtSerial\" runat=\"server\" />\n</form>\n</asp:Content>\n"
  },
  {
    "path": "web/test/VideoId.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing PkmnFoundations.Structures;\nusing PkmnFoundations.Wfc;\n\nnamespace PkmnFoundations.GTS.test\n{\n    public partial class VideoId : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void btnToSerial_Click(object sender, EventArgs e)\n        {\n            ulong valueNumeric = Convert.ToUInt64(txtBattleVideo.Text.Replace(\"-\", \"\"));\n            txtSerial.Text = BattleVideoHeader4.SerialToKey(valueNumeric).ToString();\n        }\n\n        protected void btnToVideo_Click(object sender, EventArgs e)\n        {\n            ulong valueNumeric = Convert.ToUInt64(txtSerial.Text.Replace(\"-\", \"\"));\n            txtBattleVideo.Text = BattleVideoHeader4.KeyToSerial(valueNumeric).ToString();\n        }\n    }\n}"
  },
  {
    "path": "web/test/VideoId.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace PkmnFoundations.GTS.test {\n    \n    \n    public partial class VideoId {\n        \n        /// <summary>\n        /// HeaderColour1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::PkmnFoundations.Web.HeaderColour HeaderColour1;\n        \n        /// <summary>\n        /// theForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm theForm;\n        \n        /// <summary>\n        /// txtBattleVideo control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtBattleVideo;\n        \n        /// <summary>\n        /// btnToSerial control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnToSerial;\n        \n        /// <summary>\n        /// btnToVideo control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button btnToVideo;\n        \n        /// <summary>\n        /// txtSerial control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox txtSerial;\n    }\n}\n"
  },
  {
    "path": "web/test/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n<configuration>\n    <system.web>\n      <authorization>\n      </authorization>\n    </system.web>\n</configuration>\n"
  },
  {
    "path": "web/web.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{3DE4D97F-57A8-4324-B5B8-164B45E2DF9A}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>PkmnFoundations.Web</RootNamespace>\n    <AssemblyName>PkmnFoundations.Web</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <Use64BitIISExpress />\n    <UseGlobalApplicationHostFile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\MySql.Data.6.9.8\\lib\\net40\\MySql.Data.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Newtonsoft.Json.6.0.8\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"admin\\AddBoxes.aspx\" />\n    <Content Include=\"admin\\AddDressup.aspx\" />\n    <Content Include=\"admin\\AddMusical.aspx\" />\n    <Content Include=\"battlevideo\\Default.aspx\" />\n    <Content Include=\"controls\\DnsAddress.ascx\" />\n    <Content Include=\"controls\\ForeignLookup.ascx\" />\n    <Content Include=\"controls\\LabelTextBox.ascx\" />\n    <Content Include=\"controls\\PokemonPicker.ascx\" />\n    <Content Include=\"css\\form.css\" />\n    <Content Include=\"css\\login.css\" />\n    <Content Include=\"css\\main.css\" />\n    <Content Include=\"css\\pkmnstats.css\" />\n    <Content Include=\"css\\types.css\" />\n    <Content Include=\"Default.aspx\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"gts\\Default.aspx\" />\n    <Content Include=\"gts\\Pokemon.aspx\" />\n    <Content Include=\"images\\heading-backdrop%402x.png\" />\n    <Content Include=\"images\\heading-backdrop%403x.png\" />\n    <Content Include=\"images\\heading-backdrop.png\" />\n    <Content Include=\"images\\heading-icon%402x.png\" />\n    <Content Include=\"images\\heading-icon%403x.png\" />\n    <Content Include=\"images\\heading-icon.png\" />\n    <Content Include=\"images\\help\\shot-wifi-settings.png\" />\n    <Content Include=\"images\\item-sm\\0000.png\" />\n    <Content Include=\"images\\item-sm\\3001.png\" />\n    <Content Include=\"images\\item-sm\\3002.png\" />\n    <Content Include=\"images\\item-sm\\3003.png\" />\n    <Content Include=\"images\\item-sm\\3004.png\" />\n    <Content Include=\"images\\item-sm\\3005.png\" />\n    <Content Include=\"images\\item-sm\\3006.png\" />\n    <Content Include=\"images\\item-sm\\3007.png\" />\n    <Content Include=\"images\\item-sm\\3008.png\" />\n    <Content Include=\"images\\item-sm\\3009.png\" />\n    <Content Include=\"images\\item-sm\\3010.png\" />\n    <Content Include=\"images\\item-sm\\3011.png\" />\n    <Content Include=\"images\\item-sm\\3012.png\" />\n    <Content Include=\"images\\item-sm\\3013.png\" />\n    <Content Include=\"images\\item-sm\\3014.png\" />\n    <Content Include=\"images\\item-sm\\3015.png\" />\n    <Content Include=\"images\\item-sm\\3016.png\" />\n    <Content Include=\"images\\item-sm\\3017.png\" />\n    <Content Include=\"images\\item-sm\\3018.png\" />\n    <Content Include=\"images\\item-sm\\3019.png\" />\n    <Content Include=\"images\\item-sm\\3020.png\" />\n    <Content Include=\"images\\item-sm\\3021.png\" />\n    <Content Include=\"images\\item-sm\\3022.png\" />\n    <Content Include=\"images\\item-sm\\3023.png\" />\n    <Content Include=\"images\\item-sm\\3024.png\" />\n    <Content Include=\"images\\item-sm\\3025.png\" />\n    <Content Include=\"images\\item-sm\\3026.png\" />\n    <Content Include=\"images\\item-sm\\3027.png\" />\n    <Content Include=\"images\\item-sm\\3028.png\" />\n    <Content Include=\"images\\item-sm\\3029.png\" />\n    <Content Include=\"images\\item-sm\\3030.png\" />\n    <Content Include=\"images\\item-sm\\3031.png\" />\n    <Content Include=\"images\\item-sm\\3032.png\" />\n    <Content Include=\"images\\item-sm\\3033.png\" />\n    <Content Include=\"images\\item-sm\\3034.png\" />\n    <Content Include=\"images\\item-sm\\3035.png\" />\n    <Content Include=\"images\\item-sm\\3036.png\" />\n    <Content Include=\"images\\item-sm\\3037.png\" />\n    <Content Include=\"images\\item-sm\\3038.png\" />\n    <Content Include=\"images\\item-sm\\3039.png\" />\n    <Content Include=\"images\\item-sm\\3040.png\" />\n    <Content Include=\"images\\item-sm\\3041.png\" />\n    <Content Include=\"images\\item-sm\\3042.png\" />\n    <Content Include=\"images\\item-sm\\3043.png\" />\n    <Content Include=\"images\\item-sm\\3044.png\" />\n    <Content Include=\"images\\item-sm\\3045.png\" />\n    <Content Include=\"images\\item-sm\\3046.png\" />\n    <Content Include=\"images\\item-sm\\3047.png\" />\n    <Content Include=\"images\\item-sm\\3048.png\" />\n    <Content Include=\"images\\item-sm\\3049.png\" />\n    <Content Include=\"images\\item-sm\\3050.png\" />\n    <Content Include=\"images\\item-sm\\3051.png\" />\n    <Content Include=\"images\\item-sm\\3063.png\" />\n    <Content Include=\"images\\item-sm\\3064.png\" />\n    <Content Include=\"images\\item-sm\\3065.png\" />\n    <Content Include=\"images\\item-sm\\3066.png\" />\n    <Content Include=\"images\\item-sm\\3067.png\" />\n    <Content Include=\"images\\item-sm\\3068.png\" />\n    <Content Include=\"images\\item-sm\\3069.png\" />\n    <Content Include=\"images\\item-sm\\3070.png\" />\n    <Content Include=\"images\\item-sm\\3071.png\" />\n    <Content Include=\"images\\item-sm\\3073.png\" />\n    <Content Include=\"images\\item-sm\\3074.png\" />\n    <Content Include=\"images\\item-sm\\3075.png\" />\n    <Content Include=\"images\\item-sm\\3076.png\" />\n    <Content Include=\"images\\item-sm\\3077.png\" />\n    <Content Include=\"images\\item-sm\\3078.png\" />\n    <Content Include=\"images\\item-sm\\3079.png\" />\n    <Content Include=\"images\\item-sm\\3080.png\" />\n    <Content Include=\"images\\item-sm\\3081.png\" />\n    <Content Include=\"images\\item-sm\\3083.png\" />\n    <Content Include=\"images\\item-sm\\3084.png\" />\n    <Content Include=\"images\\item-sm\\3085.png\" />\n    <Content Include=\"images\\item-sm\\3086.png\" />\n    <Content Include=\"images\\item-sm\\3093.png\" />\n    <Content Include=\"images\\item-sm\\3094.png\" />\n    <Content Include=\"images\\item-sm\\3095.png\" />\n    <Content Include=\"images\\item-sm\\3096.png\" />\n    <Content Include=\"images\\item-sm\\3097.png\" />\n    <Content Include=\"images\\item-sm\\3098.png\" />\n    <Content Include=\"images\\item-sm\\3103.png\" />\n    <Content Include=\"images\\item-sm\\3104.png\" />\n    <Content Include=\"images\\item-sm\\3106.png\" />\n    <Content Include=\"images\\item-sm\\3107.png\" />\n    <Content Include=\"images\\item-sm\\3108.png\" />\n    <Content Include=\"images\\item-sm\\3109.png\" />\n    <Content Include=\"images\\item-sm\\3110.png\" />\n    <Content Include=\"images\\item-sm\\3111.png\" />\n    <Content Include=\"images\\item-sm\\3121.png\" />\n    <Content Include=\"images\\item-sm\\3122.png\" />\n    <Content Include=\"images\\item-sm\\3123.png\" />\n    <Content Include=\"images\\item-sm\\3124.png\" />\n    <Content Include=\"images\\item-sm\\3125.png\" />\n    <Content Include=\"images\\item-sm\\3126.png\" />\n    <Content Include=\"images\\item-sm\\3127.png\" />\n    <Content Include=\"images\\item-sm\\3128.png\" />\n    <Content Include=\"images\\item-sm\\3129.png\" />\n    <Content Include=\"images\\item-sm\\3130.png\" />\n    <Content Include=\"images\\item-sm\\3131.png\" />\n    <Content Include=\"images\\item-sm\\3132.png\" />\n    <Content Include=\"images\\item-sm\\3133.png\" />\n    <Content Include=\"images\\item-sm\\3134.png\" />\n    <Content Include=\"images\\item-sm\\3135.png\" />\n    <Content Include=\"images\\item-sm\\3136.png\" />\n    <Content Include=\"images\\item-sm\\3137.png\" />\n    <Content Include=\"images\\item-sm\\3138.png\" />\n    <Content Include=\"images\\item-sm\\3139.png\" />\n    <Content Include=\"images\\item-sm\\3140.png\" />\n    <Content Include=\"images\\item-sm\\3141.png\" />\n    <Content Include=\"images\\item-sm\\3142.png\" />\n    <Content Include=\"images\\item-sm\\3143.png\" />\n    <Content Include=\"images\\item-sm\\3144.png\" />\n    <Content Include=\"images\\item-sm\\3145.png\" />\n    <Content Include=\"images\\item-sm\\3146.png\" />\n    <Content Include=\"images\\item-sm\\3147.png\" />\n    <Content Include=\"images\\item-sm\\3148.png\" />\n    <Content Include=\"images\\item-sm\\3149.png\" />\n    <Content Include=\"images\\item-sm\\3150.png\" />\n    <Content Include=\"images\\item-sm\\3151.png\" />\n    <Content Include=\"images\\item-sm\\3152.png\" />\n    <Content Include=\"images\\item-sm\\3153.png\" />\n    <Content Include=\"images\\item-sm\\3154.png\" />\n    <Content Include=\"images\\item-sm\\3155.png\" />\n    <Content Include=\"images\\item-sm\\3156.png\" />\n    <Content Include=\"images\\item-sm\\3157.png\" />\n    <Content Include=\"images\\item-sm\\3158.png\" />\n    <Content Include=\"images\\item-sm\\3159.png\" />\n    <Content Include=\"images\\item-sm\\3160.png\" />\n    <Content Include=\"images\\item-sm\\3161.png\" />\n    <Content Include=\"images\\item-sm\\3162.png\" />\n    <Content Include=\"images\\item-sm\\3163.png\" />\n    <Content Include=\"images\\item-sm\\3164.png\" />\n    <Content Include=\"images\\item-sm\\3165.png\" />\n    <Content Include=\"images\\item-sm\\3166.png\" />\n    <Content Include=\"images\\item-sm\\3167.png\" />\n    <Content Include=\"images\\item-sm\\3168.png\" />\n    <Content Include=\"images\\item-sm\\3169.png\" />\n    <Content Include=\"images\\item-sm\\3170.png\" />\n    <Content Include=\"images\\item-sm\\3171.png\" />\n    <Content Include=\"images\\item-sm\\3172.png\" />\n    <Content Include=\"images\\item-sm\\3173.png\" />\n    <Content Include=\"images\\item-sm\\3174.png\" />\n    <Content Include=\"images\\item-sm\\3175.png\" />\n    <Content Include=\"images\\item-sm\\3179.png\" />\n    <Content Include=\"images\\item-sm\\3180.png\" />\n    <Content Include=\"images\\item-sm\\3181.png\" />\n    <Content Include=\"images\\item-sm\\3182.png\" />\n    <Content Include=\"images\\item-sm\\3183.png\" />\n    <Content Include=\"images\\item-sm\\3184.png\" />\n    <Content Include=\"images\\item-sm\\3185.png\" />\n    <Content Include=\"images\\item-sm\\3186.png\" />\n    <Content Include=\"images\\item-sm\\3187.png\" />\n    <Content Include=\"images\\item-sm\\3188.png\" />\n    <Content Include=\"images\\item-sm\\3189.png\" />\n    <Content Include=\"images\\item-sm\\3190.png\" />\n    <Content Include=\"images\\item-sm\\3191.png\" />\n    <Content Include=\"images\\item-sm\\3192.png\" />\n    <Content Include=\"images\\item-sm\\3193.png\" />\n    <Content Include=\"images\\item-sm\\3194.png\" />\n    <Content Include=\"images\\item-sm\\3195.png\" />\n    <Content Include=\"images\\item-sm\\3196.png\" />\n    <Content Include=\"images\\item-sm\\3197.png\" />\n    <Content Include=\"images\\item-sm\\3198.png\" />\n    <Content Include=\"images\\item-sm\\3199.png\" />\n    <Content Include=\"images\\item-sm\\3200.png\" />\n    <Content Include=\"images\\item-sm\\3201.png\" />\n    <Content Include=\"images\\item-sm\\3202.png\" />\n    <Content Include=\"images\\item-sm\\3203.png\" />\n    <Content Include=\"images\\item-sm\\3204.png\" />\n    <Content Include=\"images\\item-sm\\3205.png\" />\n    <Content Include=\"images\\item-sm\\3206.png\" />\n    <Content Include=\"images\\item-sm\\3207.png\" />\n    <Content Include=\"images\\item-sm\\3208.png\" />\n    <Content Include=\"images\\item-sm\\3209.png\" />\n    <Content Include=\"images\\item-sm\\3210.png\" />\n    <Content Include=\"images\\item-sm\\3211.png\" />\n    <Content Include=\"images\\item-sm\\3212.png\" />\n    <Content Include=\"images\\item-sm\\3213.png\" />\n    <Content Include=\"images\\item-sm\\3214.png\" />\n    <Content Include=\"images\\item-sm\\3215.png\" />\n    <Content Include=\"images\\item-sm\\3216.png\" />\n    <Content Include=\"images\\item-sm\\3217.png\" />\n    <Content Include=\"images\\item-sm\\3218.png\" />\n    <Content Include=\"images\\item-sm\\3219.png\" />\n    <Content Include=\"images\\item-sm\\3220.png\" />\n    <Content Include=\"images\\item-sm\\3221.png\" />\n    <Content Include=\"images\\item-sm\\3222.png\" />\n    <Content Include=\"images\\item-sm\\3223.png\" />\n    <Content Include=\"images\\item-sm\\3224.png\" />\n    <Content Include=\"images\\item-sm\\3225.png\" />\n    <Content Include=\"images\\item-sm\\3254.png\" />\n    <Content Include=\"images\\item-sm\\3255.png\" />\n    <Content Include=\"images\\item-sm\\3256.png\" />\n    <Content Include=\"images\\item-sm\\3257.png\" />\n    <Content Include=\"images\\item-sm\\3258.png\" />\n    <Content Include=\"images\\item-sm\\3259.png\" />\n    <Content Include=\"images\\item-sm\\3260.png\" />\n    <Content Include=\"images\\item-sm\\3261.png\" />\n    <Content Include=\"images\\item-sm\\3262.png\" />\n    <Content Include=\"images\\item-sm\\3263.png\" />\n    <Content Include=\"images\\item-sm\\3264.png\" />\n    <Content Include=\"images\\item-sm\\3265.png\" />\n    <Content Include=\"images\\item-sm\\3266.png\" />\n    <Content Include=\"images\\item-sm\\3268.png\" />\n    <Content Include=\"images\\item-sm\\3269.png\" />\n    <Content Include=\"images\\item-sm\\3270.png\" />\n    <Content Include=\"images\\item-sm\\3271.png\" />\n    <Content Include=\"images\\item-sm\\3272.png\" />\n    <Content Include=\"images\\item-sm\\3273.png\" />\n    <Content Include=\"images\\item-sm\\3274.png\" />\n    <Content Include=\"images\\item-sm\\3275.png\" />\n    <Content Include=\"images\\item-sm\\3276.png\" />\n    <Content Include=\"images\\item-sm\\3277.png\" />\n    <Content Include=\"images\\item-sm\\3278.png\" />\n    <Content Include=\"images\\item-sm\\3279.png\" />\n    <Content Include=\"images\\item-sm\\3280.png\" />\n    <Content Include=\"images\\item-sm\\3281.png\" />\n    <Content Include=\"images\\item-sm\\3282.png\" />\n    <Content Include=\"images\\item-sm\\3283.png\" />\n    <Content Include=\"images\\item-sm\\3284.png\" />\n    <Content Include=\"images\\item-sm\\3285.png\" />\n    <Content Include=\"images\\item-sm\\3286.png\" />\n    <Content Include=\"images\\item-sm\\3287.png\" />\n    <Content Include=\"images\\item-sm\\3288.png\" />\n    <Content Include=\"images\\item-sm\\3289.png\" />\n    <Content Include=\"images\\item-sm\\3290.png\" />\n    <Content Include=\"images\\item-sm\\3291.png\" />\n    <Content Include=\"images\\item-sm\\3292.png\" />\n    <Content Include=\"images\\item-sm\\3293.png\" />\n    <Content Include=\"images\\item-sm\\3294.png\" />\n    <Content Include=\"images\\item-sm\\3295.png\" />\n    <Content Include=\"images\\item-sm\\3296.png\" />\n    <Content Include=\"images\\item-sm\\3297.png\" />\n    <Content Include=\"images\\item-sm\\3298.png\" />\n    <Content Include=\"images\\item-sm\\3299.png\" />\n    <Content Include=\"images\\item-sm\\3300.png\" />\n    <Content Include=\"images\\item-sm\\3301.png\" />\n    <Content Include=\"images\\item-sm\\3302.png\" />\n    <Content Include=\"images\\item-sm\\3303.png\" />\n    <Content Include=\"images\\item-sm\\3304.png\" />\n    <Content Include=\"images\\item-sm\\3305.png\" />\n    <Content Include=\"images\\item-sm\\3306.png\" />\n    <Content Include=\"images\\item-sm\\3307.png\" />\n    <Content Include=\"images\\item-sm\\3308.png\" />\n    <Content Include=\"images\\item-sm\\3309.png\" />\n    <Content Include=\"images\\item-sm\\3310.png\" />\n    <Content Include=\"images\\item-sm\\3311.png\" />\n    <Content Include=\"images\\item-sm\\3312.png\" />\n    <Content Include=\"images\\item-sm\\3313.png\" />\n    <Content Include=\"images\\item-sm\\3314.png\" />\n    <Content Include=\"images\\item-sm\\3315.png\" />\n    <Content Include=\"images\\item-sm\\3316.png\" />\n    <Content Include=\"images\\item-sm\\3317.png\" />\n    <Content Include=\"images\\item-sm\\3318.png\" />\n    <Content Include=\"images\\item-sm\\3319.png\" />\n    <Content Include=\"images\\item-sm\\3320.png\" />\n    <Content Include=\"images\\item-sm\\3321.png\" />\n    <Content Include=\"images\\item-sm\\3322.png\" />\n    <Content Include=\"images\\item-sm\\3323.png\" />\n    <Content Include=\"images\\item-sm\\3324.png\" />\n    <Content Include=\"images\\item-sm\\3325.png\" />\n    <Content Include=\"images\\item-sm\\3326.png\" />\n    <Content Include=\"images\\item-sm\\3327.png\" />\n    <Content Include=\"images\\item-sm\\3328.png\" />\n    <Content Include=\"images\\item-sm\\3329.png\" />\n    <Content Include=\"images\\item-sm\\3330.png\" />\n    <Content Include=\"images\\item-sm\\3331.png\" />\n    <Content Include=\"images\\item-sm\\3332.png\" />\n    <Content Include=\"images\\item-sm\\3333.png\" />\n    <Content Include=\"images\\item-sm\\3334.png\" />\n    <Content Include=\"images\\item-sm\\3335.png\" />\n    <Content Include=\"images\\item-sm\\3336.png\" />\n    <Content Include=\"images\\item-sm\\3337.png\" />\n    <Content Include=\"images\\item-sm\\3338.png\" />\n    <Content Include=\"images\\item-sm\\3339.png\" />\n    <Content Include=\"images\\item-sm\\3340.png\" />\n    <Content Include=\"images\\item-sm\\3341.png\" />\n    <Content Include=\"images\\item-sm\\3342.png\" />\n    <Content Include=\"images\\item-sm\\3343.png\" />\n    <Content Include=\"images\\item-sm\\3344.png\" />\n    <Content Include=\"images\\item-sm\\3345.png\" />\n    <Content Include=\"images\\item-sm\\3346.png\" />\n    <Content Include=\"images\\item-sm\\3349.png\" />\n    <Content Include=\"images\\item-sm\\3350.png\" />\n    <Content Include=\"images\\item-sm\\3351.png\" />\n    <Content Include=\"images\\item-sm\\3352.png\" />\n    <Content Include=\"images\\item-sm\\3353.png\" />\n    <Content Include=\"images\\item-sm\\3354.png\" />\n    <Content Include=\"images\\item-sm\\3355.png\" />\n    <Content Include=\"images\\item-sm\\3356.png\" />\n    <Content Include=\"images\\item-sm\\3357.png\" />\n    <Content Include=\"images\\item-sm\\3358.png\" />\n    <Content Include=\"images\\item-sm\\3359.png\" />\n    <Content Include=\"images\\item-sm\\3360.png\" />\n    <Content Include=\"images\\item-sm\\3361.png\" />\n    <Content Include=\"images\\item-sm\\3362.png\" />\n    <Content Include=\"images\\item-sm\\3363.png\" />\n    <Content Include=\"images\\item-sm\\3364.png\" />\n    <Content Include=\"images\\item-sm\\3365.png\" />\n    <Content Include=\"images\\item-sm\\3366.png\" />\n    <Content Include=\"images\\item-sm\\3367.png\" />\n    <Content Include=\"images\\item-sm\\3368.png\" />\n    <Content Include=\"images\\item-sm\\3369.png\" />\n    <Content Include=\"images\\item-sm\\3370.png\" />\n    <Content Include=\"images\\item-sm\\3371.png\" />\n    <Content Include=\"images\\item-sm\\3372.png\" />\n    <Content Include=\"images\\item-sm\\3373.png\" />\n    <Content Include=\"images\\item-sm\\3374.png\" />\n    <Content Include=\"images\\item-sm\\3375.png\" />\n    <Content Include=\"images\\item-sm\\3376.png\" />\n    <Content Include=\"images\\item-sm\\4013.png\" />\n    <Content Include=\"images\\item-sm\\4014.png\" />\n    <Content Include=\"images\\item-sm\\4015.png\" />\n    <Content Include=\"images\\item-sm\\4016.png\" />\n    <Content Include=\"images\\item-sm\\4054.png\" />\n    <Content Include=\"images\\item-sm\\4062.png\" />\n    <Content Include=\"images\\item-sm\\4094.png\" />\n    <Content Include=\"images\\item-sm\\4095.png\" />\n    <Content Include=\"images\\item-sm\\4096.png\" />\n    <Content Include=\"images\\item-sm\\4097.png\" />\n    <Content Include=\"images\\item-sm\\4098.png\" />\n    <Content Include=\"images\\item-sm\\4104.png\" />\n    <Content Include=\"images\\item-sm\\4105.png\" />\n    <Content Include=\"images\\item-sm\\4106.png\" />\n    <Content Include=\"images\\item-sm\\4107.png\" />\n    <Content Include=\"images\\item-sm\\4108.png\" />\n    <Content Include=\"images\\item-sm\\4109.png\" />\n    <Content Include=\"images\\item-sm\\4110.png\" />\n    <Content Include=\"images\\item-sm\\4111.png\" />\n    <Content Include=\"images\\item-sm\\4112.png\" />\n    <Content Include=\"images\\item-sm\\4135.png\" />\n    <Content Include=\"images\\item-sm\\4136.png\" />\n    <Content Include=\"images\\item-sm\\4137.png\" />\n    <Content Include=\"images\\item-sm\\4138.png\" />\n    <Content Include=\"images\\item-sm\\4139.png\" />\n    <Content Include=\"images\\item-sm\\4140.png\" />\n    <Content Include=\"images\\item-sm\\4141.png\" />\n    <Content Include=\"images\\item-sm\\4142.png\" />\n    <Content Include=\"images\\item-sm\\4143.png\" />\n    <Content Include=\"images\\item-sm\\4144.png\" />\n    <Content Include=\"images\\item-sm\\4145.png\" />\n    <Content Include=\"images\\item-sm\\4146.png\" />\n    <Content Include=\"images\\item-sm\\4147.png\" />\n    <Content Include=\"images\\item-sm\\4148.png\" />\n    <Content Include=\"images\\item-sm\\4184.png\" />\n    <Content Include=\"images\\item-sm\\4185.png\" />\n    <Content Include=\"images\\item-sm\\4186.png\" />\n    <Content Include=\"images\\item-sm\\4187.png\" />\n    <Content Include=\"images\\item-sm\\4188.png\" />\n    <Content Include=\"images\\item-sm\\4189.png\" />\n    <Content Include=\"images\\item-sm\\4190.png\" />\n    <Content Include=\"images\\item-sm\\4191.png\" />\n    <Content Include=\"images\\item-sm\\4192.png\" />\n    <Content Include=\"images\\item-sm\\4193.png\" />\n    <Content Include=\"images\\item-sm\\4194.png\" />\n    <Content Include=\"images\\item-sm\\4195.png\" />\n    <Content Include=\"images\\item-sm\\4196.png\" />\n    <Content Include=\"images\\item-sm\\4197.png\" />\n    <Content Include=\"images\\item-sm\\4198.png\" />\n    <Content Include=\"images\\item-sm\\4199.png\" />\n    <Content Include=\"images\\item-sm\\4200.png\" />\n    <Content Include=\"images\\item-sm\\4209.png\" />\n    <Content Include=\"images\\item-sm\\4210.png\" />\n    <Content Include=\"images\\item-sm\\4211.png\" />\n    <Content Include=\"images\\item-sm\\4212.png\" />\n    <Content Include=\"images\\item-sm\\4265.png\" />\n    <Content Include=\"images\\item-sm\\4266.png\" />\n    <Content Include=\"images\\item-sm\\4267.png\" />\n    <Content Include=\"images\\item-sm\\4268.png\" />\n    <Content Include=\"images\\item-sm\\4269.png\" />\n    <Content Include=\"images\\item-sm\\4270.png\" />\n    <Content Include=\"images\\item-sm\\4271.png\" />\n    <Content Include=\"images\\item-sm\\4272.png\" />\n    <Content Include=\"images\\item-sm\\4273.png\" />\n    <Content Include=\"images\\item-sm\\4274.png\" />\n    <Content Include=\"images\\item-sm\\4275.png\" />\n    <Content Include=\"images\\item-sm\\4276.png\" />\n    <Content Include=\"images\\item-sm\\4277.png\" />\n    <Content Include=\"images\\item-sm\\4278.png\" />\n    <Content Include=\"images\\item-sm\\4279.png\" />\n    <Content Include=\"images\\item-sm\\4280.png\" />\n    <Content Include=\"images\\item-sm\\4281.png\" />\n    <Content Include=\"images\\item-sm\\4282.png\" />\n    <Content Include=\"images\\item-sm\\4283.png\" />\n    <Content Include=\"images\\item-sm\\4284.png\" />\n    <Content Include=\"images\\item-sm\\4285.png\" />\n    <Content Include=\"images\\item-sm\\4286.png\" />\n    <Content Include=\"images\\item-sm\\4287.png\" />\n    <Content Include=\"images\\item-sm\\4288.png\" />\n    <Content Include=\"images\\item-sm\\4289.png\" />\n    <Content Include=\"images\\item-sm\\4290.png\" />\n    <Content Include=\"images\\item-sm\\4291.png\" />\n    <Content Include=\"images\\item-sm\\4292.png\" />\n    <Content Include=\"images\\item-sm\\4293.png\" />\n    <Content Include=\"images\\item-sm\\4294.png\" />\n    <Content Include=\"images\\item-sm\\4295.png\" />\n    <Content Include=\"images\\item-sm\\4296.png\" />\n    <Content Include=\"images\\item-sm\\4297.png\" />\n    <Content Include=\"images\\item-sm\\4298.png\" />\n    <Content Include=\"images\\item-sm\\4299.png\" />\n    <Content Include=\"images\\item-sm\\4300.png\" />\n    <Content Include=\"images\\item-sm\\4301.png\" />\n    <Content Include=\"images\\item-sm\\4302.png\" />\n    <Content Include=\"images\\item-sm\\4303.png\" />\n    <Content Include=\"images\\item-sm\\4304.png\" />\n    <Content Include=\"images\\item-sm\\4305.png\" />\n    <Content Include=\"images\\item-sm\\4306.png\" />\n    <Content Include=\"images\\item-sm\\4307.png\" />\n    <Content Include=\"images\\item-sm\\4308.png\" />\n    <Content Include=\"images\\item-sm\\4309.png\" />\n    <Content Include=\"images\\item-sm\\4310.png\" />\n    <Content Include=\"images\\item-sm\\4311.png\" />\n    <Content Include=\"images\\item-sm\\4312.png\" />\n    <Content Include=\"images\\item-sm\\4313.png\" />\n    <Content Include=\"images\\item-sm\\4314.png\" />\n    <Content Include=\"images\\item-sm\\4315.png\" />\n    <Content Include=\"images\\item-sm\\4316.png\" />\n    <Content Include=\"images\\item-sm\\4317.png\" />\n    <Content Include=\"images\\item-sm\\4318.png\" />\n    <Content Include=\"images\\item-sm\\4319.png\" />\n    <Content Include=\"images\\item-sm\\4320.png\" />\n    <Content Include=\"images\\item-sm\\4321.png\" />\n    <Content Include=\"images\\item-sm\\4322.png\" />\n    <Content Include=\"images\\item-sm\\4323.png\" />\n    <Content Include=\"images\\item-sm\\4324.png\" />\n    <Content Include=\"images\\item-sm\\4325.png\" />\n    <Content Include=\"images\\item-sm\\4326.png\" />\n    <Content Include=\"images\\item-sm\\4327.png\" />\n    <Content Include=\"images\\item-sm\\4378.png\" />\n    <Content Include=\"images\\item-sm\\4379.png\" />\n    <Content Include=\"images\\item-sm\\4380.png\" />\n    <Content Include=\"images\\item-sm\\4381.png\" />\n    <Content Include=\"images\\item-sm\\4382.png\" />\n    <Content Include=\"images\\item-sm\\4383.png\" />\n    <Content Include=\"images\\item-sm\\4384.png\" />\n    <Content Include=\"images\\item-sm\\4385.png\" />\n    <Content Include=\"images\\item-sm\\4386.png\" />\n    <Content Include=\"images\\item-sm\\4387.png\" />\n    <Content Include=\"images\\item-sm\\4388.png\" />\n    <Content Include=\"images\\item-sm\\4389.png\" />\n    <Content Include=\"images\\item-sm\\4390.png\" />\n    <Content Include=\"images\\item-sm\\4391.png\" />\n    <Content Include=\"images\\item-sm\\4392.png\" />\n    <Content Include=\"images\\item-sm\\4393.png\" />\n    <Content Include=\"images\\item-sm\\4394.png\" />\n    <Content Include=\"images\\item-sm\\4395.png\" />\n    <Content Include=\"images\\item-sm\\4396.png\" />\n    <Content Include=\"images\\item-sm\\4397.png\" />\n    <Content Include=\"images\\item-sm\\4398.png\" />\n    <Content Include=\"images\\item-sm\\4399.png\" />\n    <Content Include=\"images\\item-sm\\4400.png\" />\n    <Content Include=\"images\\item-sm\\4401.png\" />\n    <Content Include=\"images\\item-sm\\4402.png\" />\n    <Content Include=\"images\\item-sm\\4403.png\" />\n    <Content Include=\"images\\item-sm\\4404.png\" />\n    <Content Include=\"images\\item-sm\\4405.png\" />\n    <Content Include=\"images\\item-sm\\4406.png\" />\n    <Content Include=\"images\\item-sm\\4407.png\" />\n    <Content Include=\"images\\item-sm\\4408.png\" />\n    <Content Include=\"images\\item-sm\\4409.png\" />\n    <Content Include=\"images\\item-sm\\4410.png\" />\n    <Content Include=\"images\\item-sm\\4411.png\" />\n    <Content Include=\"images\\item-sm\\4412.png\" />\n    <Content Include=\"images\\item-sm\\4413.png\" />\n    <Content Include=\"images\\item-sm\\4414.png\" />\n    <Content Include=\"images\\item-sm\\4415.png\" />\n    <Content Include=\"images\\item-sm\\4416.png\" />\n    <Content Include=\"images\\item-sm\\4417.png\" />\n    <Content Include=\"images\\item-sm\\4418.png\" />\n    <Content Include=\"images\\item-sm\\4419.png\" />\n    <Content Include=\"images\\item-sm\\4428.png\" />\n    <Content Include=\"images\\item-sm\\4429.png\" />\n    <Content Include=\"images\\item-sm\\4430.png\" />\n    <Content Include=\"images\\item-sm\\4431.png\" />\n    <Content Include=\"images\\item-sm\\4432.png\" />\n    <Content Include=\"images\\item-sm\\4433.png\" />\n    <Content Include=\"images\\item-sm\\4434.png\" />\n    <Content Include=\"images\\item-sm\\4435.png\" />\n    <Content Include=\"images\\item-sm\\4436.png\" />\n    <Content Include=\"images\\item-sm\\4437.png\" />\n    <Content Include=\"images\\item-sm\\4438.png\" />\n    <Content Include=\"images\\item-sm\\4439.png\" />\n    <Content Include=\"images\\item-sm\\4440.png\" />\n    <Content Include=\"images\\item-sm\\4441.png\" />\n    <Content Include=\"images\\item-sm\\4442.png\" />\n    <Content Include=\"images\\item-sm\\4448.png\" />\n    <Content Include=\"images\\item-sm\\4449.png\" />\n    <Content Include=\"images\\item-sm\\4451.png\" />\n    <Content Include=\"images\\item-sm\\4452.png\" />\n    <Content Include=\"images\\item-sm\\4453.png\" />\n    <Content Include=\"images\\item-sm\\4454.png\" />\n    <Content Include=\"images\\item-sm\\4455.png\" />\n    <Content Include=\"images\\item-sm\\4458.png\" />\n    <Content Include=\"images\\item-sm\\4459.png\" />\n    <Content Include=\"images\\item-sm\\4460.png\" />\n    <Content Include=\"images\\item-sm\\4461.png\" />\n    <Content Include=\"images\\item-sm\\4462.png\" />\n    <Content Include=\"images\\item-sm\\4463.png\" />\n    <Content Include=\"images\\item-sm\\4464.png\" />\n    <Content Include=\"images\\item-sm\\4465.png\" />\n    <Content Include=\"images\\item-sm\\4466.png\" />\n    <Content Include=\"images\\item-sm\\4467.png\" />\n    <Content Include=\"images\\item-sm\\4468.png\" />\n    <Content Include=\"images\\item-sm\\4469.png\" />\n    <Content Include=\"images\\item-sm\\4470.png\" />\n    <Content Include=\"images\\item-sm\\4471.png\" />\n    <Content Include=\"images\\item-sm\\4472.png\" />\n    <Content Include=\"images\\item-sm\\4473.png\" />\n    <Content Include=\"images\\item-sm\\4474.png\" />\n    <Content Include=\"images\\item-sm\\4475.png\" />\n    <Content Include=\"images\\item-sm\\4476.png\" />\n    <Content Include=\"images\\item-sm\\4477.png\" />\n    <Content Include=\"images\\item-sm\\4478.png\" />\n    <Content Include=\"images\\item-sm\\4479.png\" />\n    <Content Include=\"images\\item-sm\\4480.png\" />\n    <Content Include=\"images\\item-sm\\4481.png\" />\n    <Content Include=\"images\\item-sm\\4482.png\" />\n    <Content Include=\"images\\item-sm\\4483.png\" />\n    <Content Include=\"images\\item-sm\\4484.png\" />\n    <Content Include=\"images\\item-sm\\4485.png\" />\n    <Content Include=\"images\\item-sm\\4486.png\" />\n    <Content Include=\"images\\item-sm\\4487.png\" />\n    <Content Include=\"images\\item-sm\\4488.png\" />\n    <Content Include=\"images\\item-sm\\4489.png\" />\n    <Content Include=\"images\\item-sm\\4490.png\" />\n    <Content Include=\"images\\item-sm\\4491.png\" />\n    <Content Include=\"images\\item-sm\\4492.png\" />\n    <Content Include=\"images\\item-sm\\4493.png\" />\n    <Content Include=\"images\\item-sm\\4494.png\" />\n    <Content Include=\"images\\item-sm\\4495.png\" />\n    <Content Include=\"images\\item-sm\\4496.png\" />\n    <Content Include=\"images\\item-sm\\4497.png\" />\n    <Content Include=\"images\\item-sm\\4498.png\" />\n    <Content Include=\"images\\item-sm\\4499.png\" />\n    <Content Include=\"images\\item-sm\\4500.png\" />\n    <Content Include=\"images\\item-sm\\4501.png\" />\n    <Content Include=\"images\\item-sm\\4502.png\" />\n    <Content Include=\"images\\item-sm\\4503.png\" />\n    <Content Include=\"images\\item-sm\\4504.png\" />\n    <Content Include=\"images\\item-sm\\4505.png\" />\n    <Content Include=\"images\\item-sm\\4506.png\" />\n    <Content Include=\"images\\item-sm\\4507.png\" />\n    <Content Include=\"images\\item-sm\\4508.png\" />\n    <Content Include=\"images\\item-sm\\4509.png\" />\n    <Content Include=\"images\\item-sm\\4510.png\" />\n    <Content Include=\"images\\item-sm\\4511.png\" />\n    <Content Include=\"images\\item-sm\\4512.png\" />\n    <Content Include=\"images\\item-sm\\4513.png\" />\n    <Content Include=\"images\\item-sm\\4514.png\" />\n    <Content Include=\"images\\item-sm\\4515.png\" />\n    <Content Include=\"images\\item-sm\\4516.png\" />\n    <Content Include=\"images\\item-sm\\4517.png\" />\n    <Content Include=\"images\\item-sm\\4518.png\" />\n    <Content Include=\"images\\item-sm\\4519.png\" />\n    <Content Include=\"images\\item-sm\\4520.png\" />\n    <Content Include=\"images\\item-sm\\4521.png\" />\n    <Content Include=\"images\\item-sm\\4522.png\" />\n    <Content Include=\"images\\item-sm\\4523.png\" />\n    <Content Include=\"images\\item-sm\\4524.png\" />\n    <Content Include=\"images\\item-sm\\4525.png\" />\n    <Content Include=\"images\\item-sm\\4526.png\" />\n    <Content Include=\"images\\item-sm\\4527.png\" />\n    <Content Include=\"images\\item-sm\\4528.png\" />\n    <Content Include=\"images\\item-sm\\4529.png\" />\n    <Content Include=\"images\\item-sm\\4530.png\" />\n    <Content Include=\"images\\item-sm\\4531.png\" />\n    <Content Include=\"images\\item-sm\\4532.png\" />\n    <Content Include=\"images\\item-sm\\4533.png\" />\n    <Content Include=\"images\\item-sm\\4534.png\" />\n    <Content Include=\"images\\item-sm\\4535.png\" />\n    <Content Include=\"images\\item-sm\\4536.png\" />\n    <Content Include=\"images\\item-sm\\5116.png\" />\n    <Content Include=\"images\\item-sm\\5117.png\" />\n    <Content Include=\"images\\item-sm\\5118.png\" />\n    <Content Include=\"images\\item-sm\\5119.png\" />\n    <Content Include=\"images\\item-sm\\5134.png\" />\n    <Content Include=\"images\\item-sm\\5137.png\" />\n    <Content Include=\"images\\item-sm\\5138.png\" />\n    <Content Include=\"images\\item-sm\\5139.png\" />\n    <Content Include=\"images\\item-sm\\5140.png\" />\n    <Content Include=\"images\\item-sm\\5141.png\" />\n    <Content Include=\"images\\item-sm\\5142.png\" />\n    <Content Include=\"images\\item-sm\\5143.png\" />\n    <Content Include=\"images\\item-sm\\5144.png\" />\n    <Content Include=\"images\\item-sm\\5145.png\" />\n    <Content Include=\"images\\item-sm\\5146.png\" />\n    <Content Include=\"images\\item-sm\\5147.png\" />\n    <Content Include=\"images\\item-sm\\5148.png\" />\n    <Content Include=\"images\\item-sm\\5328.png\" />\n    <Content Include=\"images\\item-sm\\5329.png\" />\n    <Content Include=\"images\\item-sm\\5330.png\" />\n    <Content Include=\"images\\item-sm\\5331.png\" />\n    <Content Include=\"images\\item-sm\\5332.png\" />\n    <Content Include=\"images\\item-sm\\5333.png\" />\n    <Content Include=\"images\\item-sm\\5334.png\" />\n    <Content Include=\"images\\item-sm\\5335.png\" />\n    <Content Include=\"images\\item-sm\\5336.png\" />\n    <Content Include=\"images\\item-sm\\5337.png\" />\n    <Content Include=\"images\\item-sm\\5338.png\" />\n    <Content Include=\"images\\item-sm\\5339.png\" />\n    <Content Include=\"images\\item-sm\\5340.png\" />\n    <Content Include=\"images\\item-sm\\5341.png\" />\n    <Content Include=\"images\\item-sm\\5342.png\" />\n    <Content Include=\"images\\item-sm\\5343.png\" />\n    <Content Include=\"images\\item-sm\\5344.png\" />\n    <Content Include=\"images\\item-sm\\5345.png\" />\n    <Content Include=\"images\\item-sm\\5346.png\" />\n    <Content Include=\"images\\item-sm\\5347.png\" />\n    <Content Include=\"images\\item-sm\\5348.png\" />\n    <Content Include=\"images\\item-sm\\5349.png\" />\n    <Content Include=\"images\\item-sm\\5350.png\" />\n    <Content Include=\"images\\item-sm\\5351.png\" />\n    <Content Include=\"images\\item-sm\\5352.png\" />\n    <Content Include=\"images\\item-sm\\5353.png\" />\n    <Content Include=\"images\\item-sm\\5354.png\" />\n    <Content Include=\"images\\item-sm\\5355.png\" />\n    <Content Include=\"images\\item-sm\\5356.png\" />\n    <Content Include=\"images\\item-sm\\5357.png\" />\n    <Content Include=\"images\\item-sm\\5358.png\" />\n    <Content Include=\"images\\item-sm\\5359.png\" />\n    <Content Include=\"images\\item-sm\\5360.png\" />\n    <Content Include=\"images\\item-sm\\5361.png\" />\n    <Content Include=\"images\\item-sm\\5362.png\" />\n    <Content Include=\"images\\item-sm\\5363.png\" />\n    <Content Include=\"images\\item-sm\\5364.png\" />\n    <Content Include=\"images\\item-sm\\5365.png\" />\n    <Content Include=\"images\\item-sm\\5366.png\" />\n    <Content Include=\"images\\item-sm\\5367.png\" />\n    <Content Include=\"images\\item-sm\\5368.png\" />\n    <Content Include=\"images\\item-sm\\5369.png\" />\n    <Content Include=\"images\\item-sm\\5370.png\" />\n    <Content Include=\"images\\item-sm\\5371.png\" />\n    <Content Include=\"images\\item-sm\\5372.png\" />\n    <Content Include=\"images\\item-sm\\5373.png\" />\n    <Content Include=\"images\\item-sm\\5374.png\" />\n    <Content Include=\"images\\item-sm\\5375.png\" />\n    <Content Include=\"images\\item-sm\\5376.png\" />\n    <Content Include=\"images\\item-sm\\5377.png\" />\n    <Content Include=\"images\\item-sm\\5378.png\" />\n    <Content Include=\"images\\item-sm\\5379.png\" />\n    <Content Include=\"images\\item-sm\\5380.png\" />\n    <Content Include=\"images\\item-sm\\5381.png\" />\n    <Content Include=\"images\\item-sm\\5382.png\" />\n    <Content Include=\"images\\item-sm\\5383.png\" />\n    <Content Include=\"images\\item-sm\\5384.png\" />\n    <Content Include=\"images\\item-sm\\5385.png\" />\n    <Content Include=\"images\\item-sm\\5386.png\" />\n    <Content Include=\"images\\item-sm\\5387.png\" />\n    <Content Include=\"images\\item-sm\\5388.png\" />\n    <Content Include=\"images\\item-sm\\5389.png\" />\n    <Content Include=\"images\\item-sm\\5390.png\" />\n    <Content Include=\"images\\item-sm\\5391.png\" />\n    <Content Include=\"images\\item-sm\\5392.png\" />\n    <Content Include=\"images\\item-sm\\5393.png\" />\n    <Content Include=\"images\\item-sm\\5394.png\" />\n    <Content Include=\"images\\item-sm\\5395.png\" />\n    <Content Include=\"images\\item-sm\\5396.png\" />\n    <Content Include=\"images\\item-sm\\5397.png\" />\n    <Content Include=\"images\\item-sm\\5398.png\" />\n    <Content Include=\"images\\item-sm\\5399.png\" />\n    <Content Include=\"images\\item-sm\\5400.png\" />\n    <Content Include=\"images\\item-sm\\5401.png\" />\n    <Content Include=\"images\\item-sm\\5402.png\" />\n    <Content Include=\"images\\item-sm\\5403.png\" />\n    <Content Include=\"images\\item-sm\\5404.png\" />\n    <Content Include=\"images\\item-sm\\5405.png\" />\n    <Content Include=\"images\\item-sm\\5406.png\" />\n    <Content Include=\"images\\item-sm\\5407.png\" />\n    <Content Include=\"images\\item-sm\\5408.png\" />\n    <Content Include=\"images\\item-sm\\5409.png\" />\n    <Content Include=\"images\\item-sm\\5410.png\" />\n    <Content Include=\"images\\item-sm\\5411.png\" />\n    <Content Include=\"images\\item-sm\\5412.png\" />\n    <Content Include=\"images\\item-sm\\5413.png\" />\n    <Content Include=\"images\\item-sm\\5414.png\" />\n    <Content Include=\"images\\item-sm\\5415.png\" />\n    <Content Include=\"images\\item-sm\\5416.png\" />\n    <Content Include=\"images\\item-sm\\5417.png\" />\n    <Content Include=\"images\\item-sm\\5418.png\" />\n    <Content Include=\"images\\item-sm\\5419.png\" />\n    <Content Include=\"images\\item-sm\\5420.png\" />\n    <Content Include=\"images\\item-sm\\5421.png\" />\n    <Content Include=\"images\\item-sm\\5422.png\" />\n    <Content Include=\"images\\item-sm\\5423.png\" />\n    <Content Include=\"images\\item-sm\\5424.png\" />\n    <Content Include=\"images\\item-sm\\5425.png\" />\n    <Content Include=\"images\\item-sm\\5537.png\" />\n    <Content Include=\"images\\item-sm\\5538.png\" />\n    <Content Include=\"images\\item-sm\\5539.png\" />\n    <Content Include=\"images\\item-sm\\5540.png\" />\n    <Content Include=\"images\\item-sm\\5541.png\" />\n    <Content Include=\"images\\item-sm\\5542.png\" />\n    <Content Include=\"images\\item-sm\\5543.png\" />\n    <Content Include=\"images\\item-sm\\5544.png\" />\n    <Content Include=\"images\\item-sm\\5545.png\" />\n    <Content Include=\"images\\item-sm\\5546.png\" />\n    <Content Include=\"images\\item-sm\\5547.png\" />\n    <Content Include=\"images\\item-sm\\5548.png\" />\n    <Content Include=\"images\\item-sm\\5549.png\" />\n    <Content Include=\"images\\item-sm\\5550.png\" />\n    <Content Include=\"images\\item-sm\\5551.png\" />\n    <Content Include=\"images\\item-sm\\5552.png\" />\n    <Content Include=\"images\\item-sm\\5553.png\" />\n    <Content Include=\"images\\item-sm\\5554.png\" />\n    <Content Include=\"images\\item-sm\\5555.png\" />\n    <Content Include=\"images\\item-sm\\5556.png\" />\n    <Content Include=\"images\\item-sm\\5557.png\" />\n    <Content Include=\"images\\item-sm\\5558.png\" />\n    <Content Include=\"images\\item-sm\\5559.png\" />\n    <Content Include=\"images\\item-sm\\5560.png\" />\n    <Content Include=\"images\\item-sm\\5561.png\" />\n    <Content Include=\"images\\item-sm\\5562.png\" />\n    <Content Include=\"images\\item-sm\\5563.png\" />\n    <Content Include=\"images\\item-sm\\5564.png\" />\n    <Content Include=\"images\\item-sm\\5565.png\" />\n    <Content Include=\"images\\item-sm\\5566.png\" />\n    <Content Include=\"images\\item-sm\\5567.png\" />\n    <Content Include=\"images\\item-sm\\5568.png\" />\n    <Content Include=\"images\\item-sm\\5569.png\" />\n    <Content Include=\"images\\item-sm\\5570.png\" />\n    <Content Include=\"images\\item-sm\\5571.png\" />\n    <Content Include=\"images\\item-sm\\5572.png\" />\n    <Content Include=\"images\\item-sm\\5573.png\" />\n    <Content Include=\"images\\item-sm\\5574.png\" />\n    <Content Include=\"images\\item-sm\\5575.png\" />\n    <Content Include=\"images\\item-sm\\5576.png\" />\n    <Content Include=\"images\\item-sm\\5577.png\" />\n    <Content Include=\"images\\item-sm\\5578.png\" />\n    <Content Include=\"images\\item-sm\\5579.png\" />\n    <Content Include=\"images\\item-sm\\5580.png\" />\n    <Content Include=\"images\\item-sm\\5581.png\" />\n    <Content Include=\"images\\item-sm\\5582.png\" />\n    <Content Include=\"images\\item-sm\\5583.png\" />\n    <Content Include=\"images\\item-sm\\5584.png\" />\n    <Content Include=\"images\\item-sm\\5585.png\" />\n    <Content Include=\"images\\item-sm\\5586.png\" />\n    <Content Include=\"images\\item-sm\\5587.png\" />\n    <Content Include=\"images\\item-sm\\5588.png\" />\n    <Content Include=\"images\\item-sm\\5589.png\" />\n    <Content Include=\"images\\item-sm\\5590.png\" />\n    <Content Include=\"images\\item-sm\\5591.png\" />\n    <Content Include=\"images\\item-sm\\5592.png\" />\n    <Content Include=\"images\\item-sm\\5593.png\" />\n    <Content Include=\"images\\item-sm\\5594.png\" />\n    <Content Include=\"images\\item-sm\\5595.png\" />\n    <Content Include=\"images\\item-sm\\5596.png\" />\n    <Content Include=\"images\\item-sm\\5597.png\" />\n    <Content Include=\"images\\item-sm\\5598.png\" />\n    <Content Include=\"images\\item-sm\\5599.png\" />\n    <Content Include=\"images\\item-sm\\5600.png\" />\n    <Content Include=\"images\\item-sm\\5601.png\" />\n    <Content Include=\"images\\item-sm\\5602.png\" />\n    <Content Include=\"images\\item-sm\\5603.png\" />\n    <Content Include=\"images\\item-sm\\5604.png\" />\n    <Content Include=\"images\\item-sm\\5605.png\" />\n    <Content Include=\"images\\item-sm\\5606.png\" />\n    <Content Include=\"images\\item-sm\\5607.png\" />\n    <Content Include=\"images\\item-sm\\5608.png\" />\n    <Content Include=\"images\\item-sm\\5609.png\" />\n    <Content Include=\"images\\item-sm\\5610.png\" />\n    <Content Include=\"images\\item-sm\\5611.png\" />\n    <Content Include=\"images\\item-sm\\5612.png\" />\n    <Content Include=\"images\\item-sm\\5613.png\" />\n    <Content Include=\"images\\item-sm\\5614.png\" />\n    <Content Include=\"images\\item-sm\\5615.png\" />\n    <Content Include=\"images\\item-sm\\5616.png\" />\n    <Content Include=\"images\\item-sm\\5617.png\" />\n    <Content Include=\"images\\item-sm\\5618.png\" />\n    <Content Include=\"images\\item-sm\\5619.png\" />\n    <Content Include=\"images\\item-sm\\5620.png\" />\n    <Content Include=\"images\\item-sm\\5621.png\" />\n    <Content Include=\"images\\item-sm\\5622.png\" />\n    <Content Include=\"images\\item-sm\\5623.png\" />\n    <Content Include=\"images\\item-sm\\5624.png\" />\n    <Content Include=\"images\\item-sm\\5625.png\" />\n    <Content Include=\"images\\item-sm\\5626.png\" />\n    <Content Include=\"images\\item-sm\\5627.png\" />\n    <Content Include=\"images\\item-sm\\5628.png\" />\n    <Content Include=\"images\\item-sm\\5629.png\" />\n    <Content Include=\"images\\item-sm\\5630.png\" />\n    <Content Include=\"images\\item-sm\\5631.png\" />\n    <Content Include=\"images\\item-sm\\5632.png\" />\n    <Content Include=\"images\\item-sm\\5633.png\" />\n    <Content Include=\"images\\item-sm\\5634.png\" />\n    <Content Include=\"images\\item-sm\\5635.png\" />\n    <Content Include=\"images\\item-sm\\5636.png\" />\n    <Content Include=\"images\\item-sm\\5637.png\" />\n    <Content Include=\"images\\item-sm\\5638.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\1.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\10.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\100.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\101.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\102.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\103.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\104.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\105.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\106.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\107.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\108.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\109.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\11.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\110.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\111-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\111.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\112-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\112.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\113.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\114.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\115.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\116.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\117.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\118-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\118.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\119-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\119.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\12-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\12.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\120.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\121.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\122.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\123-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\123.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\124.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\125.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\126.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\127.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\128.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\129-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\129.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\13.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\130-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\130.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\131.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\132.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\133.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\134.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\135.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\136.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\137.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\138.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\139.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\14.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\140.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\141.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\142.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\143.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\144.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\145.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\146.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\147.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\148.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\149.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\15.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\150.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\151.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\152.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\153.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\154-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\154.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\155.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\156.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\157.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\158.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\159.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\16.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\160.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\161.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\162.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\163.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\164.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\165-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\165.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\166-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\166.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\167.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\168.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\169.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\17.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\170.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\171.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\172.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\173.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\174.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\175.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\176.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\177.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\178-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\178.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\179.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\18.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\180.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\181.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\182.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\183.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\184.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\185-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\185.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\186-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\186.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\187.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\188.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\189.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\19-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\19.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\190-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\190.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\191.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\192.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\193.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\194-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\194.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\195-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\195.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\196.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\197.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\198-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\198.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\199.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\2.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\20-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\20.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\200.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-a.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-b.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-c.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-d.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-e.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-exclamation.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-g.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-h.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-i.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-j.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-k.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-l.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-m.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-n.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-o.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-p.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-q.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-question.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-r.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-s.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-t.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-u.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-v.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-w.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-x.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-y.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201-z.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\201.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\202-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\202.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\203-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\203.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\204.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\205.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\206.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\207-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\207.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\208-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\208.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\209.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\21.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\210.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\211.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\212-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\212.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\213.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\214-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\214.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\215-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\215.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\216.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\217-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\217.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\218.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\219.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\22.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\220.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\221-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\221.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\222.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\223.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\224-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\224.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\225.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\226.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\227.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\228.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\229-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\229.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\23.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\230.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\231.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\232-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\232.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\233.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\234.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\235.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\236.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\237.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\238.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\239.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\24.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\240.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\241.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\242.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\243.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\244.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\245.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\246.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\247.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\248.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\249.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\25-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\25.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\250.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\251.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\252.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\253.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\254.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\255.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\256-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\256.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\257-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\257.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\258.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\259.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\26-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\26.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\260.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\261.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\262.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\263.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\264.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\265.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\266.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\267-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\267.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\268.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\269-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\269.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\27.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\270.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\271.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\272-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\272.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\273.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\274-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\274.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\275-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\275.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\276.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\277.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\278.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\279.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\28.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\280.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\281.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\282.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\283.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\284.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\285.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\286.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\287.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\288.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\289.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\29.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\290.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\291.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\292.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\293.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\294.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\295.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\296.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\297.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\298.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\299.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\3-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\3.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\30.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\300.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\301.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\302.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\303.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\304.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\305.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\306.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\307-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\307.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\308-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\308.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\309.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\31.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\310.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\311.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\312.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\313.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\314.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\315-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\315.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\316-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\316.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\317-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\317.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\318.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\319.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\32.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\320.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\321.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\322-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\322.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\323-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\323.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\324.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\325.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\326.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\327.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\328.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\329.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\33.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\330.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\331.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\332-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\332.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\333.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\334.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\335.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\336.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\337.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\338.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\339.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\34.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\340.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\341.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\342.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\343.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\344.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\345.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\346.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\347.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\348.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\349.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\35.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\350-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\350.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\351-rainy.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\351-snowy.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\351-sunny.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\351.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\352.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\353.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\354.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\355.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\356.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\357.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\358.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\359.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\36.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\360.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\361.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\362.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\363.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\364.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\365.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\366.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\367.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\368.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\369-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\369.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\37.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\370.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\371.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\372.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\373.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\374.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\375.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\376.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\377.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\378.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\379.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\38.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\380.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\381.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\382.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\383.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\384.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\385.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\386-attack.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\386-defense.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\386-normal.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\386-speed.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\386.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\387.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\388.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\389.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\39.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\390.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\391.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\392.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\393.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\394.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\395.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\396-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\396.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\397-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\397.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\398-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\398.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\399-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\399.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\4.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\40.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\400-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\400.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\401-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\401.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\402-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\402.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\403-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\403.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\404-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\404.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\405-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\405.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\406.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\407-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\407.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\408.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\409.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\41-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\41.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\410.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\411.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\412-plant.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\412-sandy.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\412-trash.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\412.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\413-plant.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\413-sandy.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\413-trash.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\413.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\414.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\415-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\415.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\416.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\417-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\417.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\418-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\418.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\419-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\419.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\42-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\42.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\420.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\421-overcast.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\421-sunshine.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\421.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\422-east.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\422-west.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\422.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\423-east.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\423-west.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\423.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\424-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\424.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\425.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\426.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\427.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\428.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\429.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\43.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\430.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\431.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\432.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\433.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\434.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\435.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\436.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\437.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\438.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\439.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\44-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\44.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\440.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\441.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\442.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\443-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\443.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\444-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\444.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\445-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\445.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\446.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\447.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\448.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\449-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\449.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\45-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\45.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\450-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\450.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\451.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\452.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\453-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\453.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\454-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\454.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\455.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\456-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\456.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\457-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\457.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\458.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\459-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\459.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\46.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\460-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\460.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\461-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\461.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\462.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\463.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\464-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\464.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\465-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\465.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\466.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\467.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\468.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\469.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\47.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\470.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\471.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\472.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\473-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\473.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\474.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\475.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\476.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\477.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\478.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\479-fan.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\479-frost.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\479-heat.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\479-mow.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\479-wash.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\479.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\48.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\480.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\481.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\482.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\483.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\484.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\485.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\486.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\487-altered.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\487-origin.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\487.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\488.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\489.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\49.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\490.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\491.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\492-land.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\492-sky.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\492.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-bug.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-dark.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-dragon.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-electric.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-fighting.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-fire.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-flying.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-ghost.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-grass.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-ground.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-ice.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-normal.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-poison.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-psychic.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-rock.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-steel.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493-water.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\493.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\494.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\495.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\496.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\497.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\498.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\499.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\5.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\50.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\500.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\501.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\502.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\503.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\504.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\505.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\506.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\507.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\508.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\509.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\51.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\510.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\511.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\512.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\513.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\514.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\515.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\516.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\517.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\518.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\519.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\52.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\520.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\521-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\521.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\522.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\523.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\524.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\525.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\526.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\527.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\528.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\529.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\53.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\530.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\531.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\532.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\533.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\534.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\535.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\536.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\537.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\538.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\539.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\54.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\540.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\541.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\542.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\543.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\544.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\545.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\546.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\547.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\548.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\549.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\55.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\550-blue-striped.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\550-red-striped.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\550.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\551.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\552.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\553.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\554.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\555-standard.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\555-zen.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\555.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\556.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\557.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\558.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\559.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\56.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\560.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\561.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\562.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\563.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\564.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\565.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\566.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\567.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\568.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\569.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\57.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\570.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\571.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\572.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\573.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\574.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\575.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\576.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\577.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\578.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\579.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\58.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\580.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\581.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\582.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\583.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\584.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\585-autumn.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\585-spring.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\585-summer.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\585-winter.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\585.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\586-autumn.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\586-spring.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\586-summer.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\586-winter.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\586.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\587.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\588.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\589.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\59.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\590.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\591.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\592-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\592.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\593-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\593.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\594.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\595.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\596.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\597.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\598.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\599.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\6.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\60.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\600.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\601.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\602.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\603.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\604.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\605.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\606.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\607.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\608.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\609.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\61.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\610.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\611.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\612.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\613.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\614.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\615.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\616.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\617.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\618.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\619.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\62.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\620.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\621.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\622.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\623.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\624.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\625.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\626.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\627.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\628.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\629.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\63.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\630.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\631.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\632.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\633.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\634.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\635.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\636.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\637.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\638.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\639.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\64-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\64.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\640.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\641-incarnate.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\641-therian.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\641.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\642-incarnate.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\642-therian.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\642.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\643.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\644.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\645-incarnate.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\645-therian.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\645.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\646-black.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\646-white.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\646.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\647-ordinary.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\647-resolute.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\647.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\648-aria.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\648-pirouette.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\648.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\649-burn.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\649-chill.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\649-douse.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\649-shock.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\649.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\65-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\65.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\66.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\67.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\68.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\69.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\7.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\70.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\71.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\72.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\73.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\74.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\75.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\76.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\77.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\78.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\79.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\8.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\80.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\81.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\82.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\83.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\84-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\84.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\85-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\85.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\86.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\87.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\88.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\89.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\9.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\90.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\91.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\92.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\93.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\94.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\95.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\96.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\97-f.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\97.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\98.png\" />\n    <Content Include=\"images\\pkmn-lg-s\\99.png\" />\n    <Content Include=\"images\\pkmn-lg\\1.png\" />\n    <Content Include=\"images\\pkmn-lg\\10.png\" />\n    <Content Include=\"images\\pkmn-lg\\100.png\" />\n    <Content Include=\"images\\pkmn-lg\\101.png\" />\n    <Content Include=\"images\\pkmn-lg\\102.png\" />\n    <Content Include=\"images\\pkmn-lg\\103.png\" />\n    <Content Include=\"images\\pkmn-lg\\104.png\" />\n    <Content Include=\"images\\pkmn-lg\\105.png\" />\n    <Content Include=\"images\\pkmn-lg\\106.png\" />\n    <Content Include=\"images\\pkmn-lg\\107.png\" />\n    <Content Include=\"images\\pkmn-lg\\108.png\" />\n    <Content Include=\"images\\pkmn-lg\\109.png\" />\n    <Content Include=\"images\\pkmn-lg\\11.png\" />\n    <Content Include=\"images\\pkmn-lg\\110.png\" />\n    <Content Include=\"images\\pkmn-lg\\111-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\111.png\" />\n    <Content Include=\"images\\pkmn-lg\\112-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\112.png\" />\n    <Content Include=\"images\\pkmn-lg\\113.png\" />\n    <Content Include=\"images\\pkmn-lg\\114.png\" />\n    <Content Include=\"images\\pkmn-lg\\115.png\" />\n    <Content Include=\"images\\pkmn-lg\\116.png\" />\n    <Content Include=\"images\\pkmn-lg\\117.png\" />\n    <Content Include=\"images\\pkmn-lg\\118-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\118.png\" />\n    <Content Include=\"images\\pkmn-lg\\119-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\119.png\" />\n    <Content Include=\"images\\pkmn-lg\\12-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\12.png\" />\n    <Content Include=\"images\\pkmn-lg\\120.png\" />\n    <Content Include=\"images\\pkmn-lg\\121.png\" />\n    <Content Include=\"images\\pkmn-lg\\122.png\" />\n    <Content Include=\"images\\pkmn-lg\\123-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\123.png\" />\n    <Content Include=\"images\\pkmn-lg\\124.png\" />\n    <Content Include=\"images\\pkmn-lg\\125.png\" />\n    <Content Include=\"images\\pkmn-lg\\126.png\" />\n    <Content Include=\"images\\pkmn-lg\\127.png\" />\n    <Content Include=\"images\\pkmn-lg\\128.png\" />\n    <Content Include=\"images\\pkmn-lg\\129-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\129.png\" />\n    <Content Include=\"images\\pkmn-lg\\13.png\" />\n    <Content Include=\"images\\pkmn-lg\\130-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\130.png\" />\n    <Content Include=\"images\\pkmn-lg\\131.png\" />\n    <Content Include=\"images\\pkmn-lg\\132.png\" />\n    <Content Include=\"images\\pkmn-lg\\133.png\" />\n    <Content Include=\"images\\pkmn-lg\\134.png\" />\n    <Content Include=\"images\\pkmn-lg\\135.png\" />\n    <Content Include=\"images\\pkmn-lg\\136.png\" />\n    <Content Include=\"images\\pkmn-lg\\137.png\" />\n    <Content Include=\"images\\pkmn-lg\\138.png\" />\n    <Content Include=\"images\\pkmn-lg\\139.png\" />\n    <Content Include=\"images\\pkmn-lg\\14.png\" />\n    <Content Include=\"images\\pkmn-lg\\140.png\" />\n    <Content Include=\"images\\pkmn-lg\\141.png\" />\n    <Content Include=\"images\\pkmn-lg\\142.png\" />\n    <Content Include=\"images\\pkmn-lg\\143.png\" />\n    <Content Include=\"images\\pkmn-lg\\144.png\" />\n    <Content Include=\"images\\pkmn-lg\\145.png\" />\n    <Content Include=\"images\\pkmn-lg\\146.png\" />\n    <Content Include=\"images\\pkmn-lg\\147.png\" />\n    <Content Include=\"images\\pkmn-lg\\148.png\" />\n    <Content Include=\"images\\pkmn-lg\\149.png\" />\n    <Content Include=\"images\\pkmn-lg\\15.png\" />\n    <Content Include=\"images\\pkmn-lg\\150.png\" />\n    <Content Include=\"images\\pkmn-lg\\151.png\" />\n    <Content Include=\"images\\pkmn-lg\\152.png\" />\n    <Content Include=\"images\\pkmn-lg\\153.png\" />\n    <Content Include=\"images\\pkmn-lg\\154-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\154.png\" />\n    <Content Include=\"images\\pkmn-lg\\155.png\" />\n    <Content Include=\"images\\pkmn-lg\\156.png\" />\n    <Content Include=\"images\\pkmn-lg\\157.png\" />\n    <Content Include=\"images\\pkmn-lg\\158.png\" />\n    <Content Include=\"images\\pkmn-lg\\159.png\" />\n    <Content Include=\"images\\pkmn-lg\\16.png\" />\n    <Content Include=\"images\\pkmn-lg\\160.png\" />\n    <Content Include=\"images\\pkmn-lg\\161.png\" />\n    <Content Include=\"images\\pkmn-lg\\162.png\" />\n    <Content Include=\"images\\pkmn-lg\\163.png\" />\n    <Content Include=\"images\\pkmn-lg\\164.png\" />\n    <Content Include=\"images\\pkmn-lg\\165-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\165.png\" />\n    <Content Include=\"images\\pkmn-lg\\166-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\166.png\" />\n    <Content Include=\"images\\pkmn-lg\\167.png\" />\n    <Content Include=\"images\\pkmn-lg\\168.png\" />\n    <Content Include=\"images\\pkmn-lg\\169.png\" />\n    <Content Include=\"images\\pkmn-lg\\17.png\" />\n    <Content Include=\"images\\pkmn-lg\\170.png\" />\n    <Content Include=\"images\\pkmn-lg\\171.png\" />\n    <Content Include=\"images\\pkmn-lg\\172.png\" />\n    <Content Include=\"images\\pkmn-lg\\173.png\" />\n    <Content Include=\"images\\pkmn-lg\\174.png\" />\n    <Content Include=\"images\\pkmn-lg\\175.png\" />\n    <Content Include=\"images\\pkmn-lg\\176.png\" />\n    <Content Include=\"images\\pkmn-lg\\177.png\" />\n    <Content Include=\"images\\pkmn-lg\\178-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\178.png\" />\n    <Content Include=\"images\\pkmn-lg\\179.png\" />\n    <Content Include=\"images\\pkmn-lg\\18.png\" />\n    <Content Include=\"images\\pkmn-lg\\180.png\" />\n    <Content Include=\"images\\pkmn-lg\\181.png\" />\n    <Content Include=\"images\\pkmn-lg\\182.png\" />\n    <Content Include=\"images\\pkmn-lg\\183.png\" />\n    <Content Include=\"images\\pkmn-lg\\184.png\" />\n    <Content Include=\"images\\pkmn-lg\\185-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\185.png\" />\n    <Content Include=\"images\\pkmn-lg\\186-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\186.png\" />\n    <Content Include=\"images\\pkmn-lg\\187.png\" />\n    <Content Include=\"images\\pkmn-lg\\188.png\" />\n    <Content Include=\"images\\pkmn-lg\\189.png\" />\n    <Content Include=\"images\\pkmn-lg\\19-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\19.png\" />\n    <Content Include=\"images\\pkmn-lg\\190-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\190.png\" />\n    <Content Include=\"images\\pkmn-lg\\191.png\" />\n    <Content Include=\"images\\pkmn-lg\\192.png\" />\n    <Content Include=\"images\\pkmn-lg\\193.png\" />\n    <Content Include=\"images\\pkmn-lg\\194-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\194.png\" />\n    <Content Include=\"images\\pkmn-lg\\195-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\195.png\" />\n    <Content Include=\"images\\pkmn-lg\\196.png\" />\n    <Content Include=\"images\\pkmn-lg\\197.png\" />\n    <Content Include=\"images\\pkmn-lg\\198-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\198.png\" />\n    <Content Include=\"images\\pkmn-lg\\199.png\" />\n    <Content Include=\"images\\pkmn-lg\\2.png\" />\n    <Content Include=\"images\\pkmn-lg\\20-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\20.png\" />\n    <Content Include=\"images\\pkmn-lg\\200.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-a.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-b.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-c.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-d.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-e.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-exclamation.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-g.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-h.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-i.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-j.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-k.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-l.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-m.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-n.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-o.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-p.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-q.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-question.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-r.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-s.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-t.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-u.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-v.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-w.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-x.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-y.png\" />\n    <Content Include=\"images\\pkmn-lg\\201-z.png\" />\n    <Content Include=\"images\\pkmn-lg\\201.png\" />\n    <Content Include=\"images\\pkmn-lg\\202-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\202.png\" />\n    <Content Include=\"images\\pkmn-lg\\203-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\203.png\" />\n    <Content Include=\"images\\pkmn-lg\\204.png\" />\n    <Content Include=\"images\\pkmn-lg\\205.png\" />\n    <Content Include=\"images\\pkmn-lg\\206.png\" />\n    <Content Include=\"images\\pkmn-lg\\207-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\207.png\" />\n    <Content Include=\"images\\pkmn-lg\\208-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\208.png\" />\n    <Content Include=\"images\\pkmn-lg\\209.png\" />\n    <Content Include=\"images\\pkmn-lg\\21.png\" />\n    <Content Include=\"images\\pkmn-lg\\210.png\" />\n    <Content Include=\"images\\pkmn-lg\\211.png\" />\n    <Content Include=\"images\\pkmn-lg\\212-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\212.png\" />\n    <Content Include=\"images\\pkmn-lg\\213.png\" />\n    <Content Include=\"images\\pkmn-lg\\214-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\214.png\" />\n    <Content Include=\"images\\pkmn-lg\\215-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\215.png\" />\n    <Content Include=\"images\\pkmn-lg\\216.png\" />\n    <Content Include=\"images\\pkmn-lg\\217-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\217.png\" />\n    <Content Include=\"images\\pkmn-lg\\218.png\" />\n    <Content Include=\"images\\pkmn-lg\\219.png\" />\n    <Content Include=\"images\\pkmn-lg\\22.png\" />\n    <Content Include=\"images\\pkmn-lg\\220.png\" />\n    <Content Include=\"images\\pkmn-lg\\221-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\221.png\" />\n    <Content Include=\"images\\pkmn-lg\\222.png\" />\n    <Content Include=\"images\\pkmn-lg\\223.png\" />\n    <Content Include=\"images\\pkmn-lg\\224-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\224.png\" />\n    <Content Include=\"images\\pkmn-lg\\225.png\" />\n    <Content Include=\"images\\pkmn-lg\\226.png\" />\n    <Content Include=\"images\\pkmn-lg\\227.png\" />\n    <Content Include=\"images\\pkmn-lg\\228.png\" />\n    <Content Include=\"images\\pkmn-lg\\229-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\229.png\" />\n    <Content Include=\"images\\pkmn-lg\\23.png\" />\n    <Content Include=\"images\\pkmn-lg\\230.png\" />\n    <Content Include=\"images\\pkmn-lg\\231.png\" />\n    <Content Include=\"images\\pkmn-lg\\232-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\232.png\" />\n    <Content Include=\"images\\pkmn-lg\\233.png\" />\n    <Content Include=\"images\\pkmn-lg\\234.png\" />\n    <Content Include=\"images\\pkmn-lg\\235.png\" />\n    <Content Include=\"images\\pkmn-lg\\236.png\" />\n    <Content Include=\"images\\pkmn-lg\\237.png\" />\n    <Content Include=\"images\\pkmn-lg\\238.png\" />\n    <Content Include=\"images\\pkmn-lg\\239.png\" />\n    <Content Include=\"images\\pkmn-lg\\24.png\" />\n    <Content Include=\"images\\pkmn-lg\\240.png\" />\n    <Content Include=\"images\\pkmn-lg\\241.png\" />\n    <Content Include=\"images\\pkmn-lg\\242.png\" />\n    <Content Include=\"images\\pkmn-lg\\243.png\" />\n    <Content Include=\"images\\pkmn-lg\\244.png\" />\n    <Content Include=\"images\\pkmn-lg\\245.png\" />\n    <Content Include=\"images\\pkmn-lg\\246.png\" />\n    <Content Include=\"images\\pkmn-lg\\247.png\" />\n    <Content Include=\"images\\pkmn-lg\\248.png\" />\n    <Content Include=\"images\\pkmn-lg\\249.png\" />\n    <Content Include=\"images\\pkmn-lg\\25-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\25.png\" />\n    <Content Include=\"images\\pkmn-lg\\250.png\" />\n    <Content Include=\"images\\pkmn-lg\\251.png\" />\n    <Content Include=\"images\\pkmn-lg\\252.png\" />\n    <Content Include=\"images\\pkmn-lg\\253.png\" />\n    <Content Include=\"images\\pkmn-lg\\254.png\" />\n    <Content Include=\"images\\pkmn-lg\\255.png\" />\n    <Content Include=\"images\\pkmn-lg\\256-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\256.png\" />\n    <Content Include=\"images\\pkmn-lg\\257-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\257.png\" />\n    <Content Include=\"images\\pkmn-lg\\258.png\" />\n    <Content Include=\"images\\pkmn-lg\\259.png\" />\n    <Content Include=\"images\\pkmn-lg\\26-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\26.png\" />\n    <Content Include=\"images\\pkmn-lg\\260.png\" />\n    <Content Include=\"images\\pkmn-lg\\261.png\" />\n    <Content Include=\"images\\pkmn-lg\\262.png\" />\n    <Content Include=\"images\\pkmn-lg\\263.png\" />\n    <Content Include=\"images\\pkmn-lg\\264.png\" />\n    <Content Include=\"images\\pkmn-lg\\265.png\" />\n    <Content Include=\"images\\pkmn-lg\\266.png\" />\n    <Content Include=\"images\\pkmn-lg\\267-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\267.png\" />\n    <Content Include=\"images\\pkmn-lg\\268.png\" />\n    <Content Include=\"images\\pkmn-lg\\269-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\269.png\" />\n    <Content Include=\"images\\pkmn-lg\\27.png\" />\n    <Content Include=\"images\\pkmn-lg\\270.png\" />\n    <Content Include=\"images\\pkmn-lg\\271.png\" />\n    <Content Include=\"images\\pkmn-lg\\272-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\272.png\" />\n    <Content Include=\"images\\pkmn-lg\\273.png\" />\n    <Content Include=\"images\\pkmn-lg\\274-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\274.png\" />\n    <Content Include=\"images\\pkmn-lg\\275-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\275.png\" />\n    <Content Include=\"images\\pkmn-lg\\276.png\" />\n    <Content Include=\"images\\pkmn-lg\\277.png\" />\n    <Content Include=\"images\\pkmn-lg\\278.png\" />\n    <Content Include=\"images\\pkmn-lg\\279.png\" />\n    <Content Include=\"images\\pkmn-lg\\28.png\" />\n    <Content Include=\"images\\pkmn-lg\\280.png\" />\n    <Content Include=\"images\\pkmn-lg\\281.png\" />\n    <Content Include=\"images\\pkmn-lg\\282.png\" />\n    <Content Include=\"images\\pkmn-lg\\283.png\" />\n    <Content Include=\"images\\pkmn-lg\\284.png\" />\n    <Content Include=\"images\\pkmn-lg\\285.png\" />\n    <Content Include=\"images\\pkmn-lg\\286.png\" />\n    <Content Include=\"images\\pkmn-lg\\287.png\" />\n    <Content Include=\"images\\pkmn-lg\\288.png\" />\n    <Content Include=\"images\\pkmn-lg\\289.png\" />\n    <Content Include=\"images\\pkmn-lg\\29.png\" />\n    <Content Include=\"images\\pkmn-lg\\290.png\" />\n    <Content Include=\"images\\pkmn-lg\\291.png\" />\n    <Content Include=\"images\\pkmn-lg\\292.png\" />\n    <Content Include=\"images\\pkmn-lg\\293.png\" />\n    <Content Include=\"images\\pkmn-lg\\294.png\" />\n    <Content Include=\"images\\pkmn-lg\\295.png\" />\n    <Content Include=\"images\\pkmn-lg\\296.png\" />\n    <Content Include=\"images\\pkmn-lg\\297.png\" />\n    <Content Include=\"images\\pkmn-lg\\298.png\" />\n    <Content Include=\"images\\pkmn-lg\\299.png\" />\n    <Content Include=\"images\\pkmn-lg\\3-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\3.png\" />\n    <Content Include=\"images\\pkmn-lg\\30.png\" />\n    <Content Include=\"images\\pkmn-lg\\300.png\" />\n    <Content Include=\"images\\pkmn-lg\\301.png\" />\n    <Content Include=\"images\\pkmn-lg\\302.png\" />\n    <Content Include=\"images\\pkmn-lg\\303.png\" />\n    <Content Include=\"images\\pkmn-lg\\304.png\" />\n    <Content Include=\"images\\pkmn-lg\\305.png\" />\n    <Content Include=\"images\\pkmn-lg\\306.png\" />\n    <Content Include=\"images\\pkmn-lg\\307-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\307.png\" />\n    <Content Include=\"images\\pkmn-lg\\308-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\308.png\" />\n    <Content Include=\"images\\pkmn-lg\\309.png\" />\n    <Content Include=\"images\\pkmn-lg\\31.png\" />\n    <Content Include=\"images\\pkmn-lg\\310.png\" />\n    <Content Include=\"images\\pkmn-lg\\311.png\" />\n    <Content Include=\"images\\pkmn-lg\\312.png\" />\n    <Content Include=\"images\\pkmn-lg\\313.png\" />\n    <Content Include=\"images\\pkmn-lg\\314.png\" />\n    <Content Include=\"images\\pkmn-lg\\315-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\315.png\" />\n    <Content Include=\"images\\pkmn-lg\\316-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\316.png\" />\n    <Content Include=\"images\\pkmn-lg\\317-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\317.png\" />\n    <Content Include=\"images\\pkmn-lg\\318.png\" />\n    <Content Include=\"images\\pkmn-lg\\319.png\" />\n    <Content Include=\"images\\pkmn-lg\\32.png\" />\n    <Content Include=\"images\\pkmn-lg\\320.png\" />\n    <Content Include=\"images\\pkmn-lg\\321.png\" />\n    <Content Include=\"images\\pkmn-lg\\322-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\322.png\" />\n    <Content Include=\"images\\pkmn-lg\\323-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\323.png\" />\n    <Content Include=\"images\\pkmn-lg\\324.png\" />\n    <Content Include=\"images\\pkmn-lg\\325.png\" />\n    <Content Include=\"images\\pkmn-lg\\326.png\" />\n    <Content Include=\"images\\pkmn-lg\\327.png\" />\n    <Content Include=\"images\\pkmn-lg\\328.png\" />\n    <Content Include=\"images\\pkmn-lg\\329.png\" />\n    <Content Include=\"images\\pkmn-lg\\33.png\" />\n    <Content Include=\"images\\pkmn-lg\\330.png\" />\n    <Content Include=\"images\\pkmn-lg\\331.png\" />\n    <Content Include=\"images\\pkmn-lg\\332-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\332.png\" />\n    <Content Include=\"images\\pkmn-lg\\333.png\" />\n    <Content Include=\"images\\pkmn-lg\\334.png\" />\n    <Content Include=\"images\\pkmn-lg\\335.png\" />\n    <Content Include=\"images\\pkmn-lg\\336.png\" />\n    <Content Include=\"images\\pkmn-lg\\337.png\" />\n    <Content Include=\"images\\pkmn-lg\\338.png\" />\n    <Content Include=\"images\\pkmn-lg\\339.png\" />\n    <Content Include=\"images\\pkmn-lg\\34.png\" />\n    <Content Include=\"images\\pkmn-lg\\340.png\" />\n    <Content Include=\"images\\pkmn-lg\\341.png\" />\n    <Content Include=\"images\\pkmn-lg\\342.png\" />\n    <Content Include=\"images\\pkmn-lg\\343.png\" />\n    <Content Include=\"images\\pkmn-lg\\344.png\" />\n    <Content Include=\"images\\pkmn-lg\\345.png\" />\n    <Content Include=\"images\\pkmn-lg\\346.png\" />\n    <Content Include=\"images\\pkmn-lg\\347.png\" />\n    <Content Include=\"images\\pkmn-lg\\348.png\" />\n    <Content Include=\"images\\pkmn-lg\\349.png\" />\n    <Content Include=\"images\\pkmn-lg\\35.png\" />\n    <Content Include=\"images\\pkmn-lg\\350-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\350.png\" />\n    <Content Include=\"images\\pkmn-lg\\351-rainy.png\" />\n    <Content Include=\"images\\pkmn-lg\\351-snowy.png\" />\n    <Content Include=\"images\\pkmn-lg\\351-sunny.png\" />\n    <Content Include=\"images\\pkmn-lg\\351.png\" />\n    <Content Include=\"images\\pkmn-lg\\352.png\" />\n    <Content Include=\"images\\pkmn-lg\\353.png\" />\n    <Content Include=\"images\\pkmn-lg\\354.png\" />\n    <Content Include=\"images\\pkmn-lg\\355.png\" />\n    <Content Include=\"images\\pkmn-lg\\356.png\" />\n    <Content Include=\"images\\pkmn-lg\\357.png\" />\n    <Content Include=\"images\\pkmn-lg\\358.png\" />\n    <Content Include=\"images\\pkmn-lg\\359.png\" />\n    <Content Include=\"images\\pkmn-lg\\36.png\" />\n    <Content Include=\"images\\pkmn-lg\\360.png\" />\n    <Content Include=\"images\\pkmn-lg\\361.png\" />\n    <Content Include=\"images\\pkmn-lg\\362.png\" />\n    <Content Include=\"images\\pkmn-lg\\363.png\" />\n    <Content Include=\"images\\pkmn-lg\\364.png\" />\n    <Content Include=\"images\\pkmn-lg\\365.png\" />\n    <Content Include=\"images\\pkmn-lg\\366.png\" />\n    <Content Include=\"images\\pkmn-lg\\367.png\" />\n    <Content Include=\"images\\pkmn-lg\\368.png\" />\n    <Content Include=\"images\\pkmn-lg\\369-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\369.png\" />\n    <Content Include=\"images\\pkmn-lg\\37.png\" />\n    <Content Include=\"images\\pkmn-lg\\370.png\" />\n    <Content Include=\"images\\pkmn-lg\\371.png\" />\n    <Content Include=\"images\\pkmn-lg\\372.png\" />\n    <Content Include=\"images\\pkmn-lg\\373.png\" />\n    <Content Include=\"images\\pkmn-lg\\374.png\" />\n    <Content Include=\"images\\pkmn-lg\\375.png\" />\n    <Content Include=\"images\\pkmn-lg\\376.png\" />\n    <Content Include=\"images\\pkmn-lg\\377.png\" />\n    <Content Include=\"images\\pkmn-lg\\378.png\" />\n    <Content Include=\"images\\pkmn-lg\\379.png\" />\n    <Content Include=\"images\\pkmn-lg\\38.png\" />\n    <Content Include=\"images\\pkmn-lg\\380.png\" />\n    <Content Include=\"images\\pkmn-lg\\381.png\" />\n    <Content Include=\"images\\pkmn-lg\\382.png\" />\n    <Content Include=\"images\\pkmn-lg\\383.png\" />\n    <Content Include=\"images\\pkmn-lg\\384.png\" />\n    <Content Include=\"images\\pkmn-lg\\385.png\" />\n    <Content Include=\"images\\pkmn-lg\\386-attack.png\" />\n    <Content Include=\"images\\pkmn-lg\\386-defense.png\" />\n    <Content Include=\"images\\pkmn-lg\\386-normal.png\" />\n    <Content Include=\"images\\pkmn-lg\\386-speed.png\" />\n    <Content Include=\"images\\pkmn-lg\\386.png\" />\n    <Content Include=\"images\\pkmn-lg\\387.png\" />\n    <Content Include=\"images\\pkmn-lg\\388.png\" />\n    <Content Include=\"images\\pkmn-lg\\389.png\" />\n    <Content Include=\"images\\pkmn-lg\\39.png\" />\n    <Content Include=\"images\\pkmn-lg\\390.png\" />\n    <Content Include=\"images\\pkmn-lg\\391.png\" />\n    <Content Include=\"images\\pkmn-lg\\392.png\" />\n    <Content Include=\"images\\pkmn-lg\\393.png\" />\n    <Content Include=\"images\\pkmn-lg\\394.png\" />\n    <Content Include=\"images\\pkmn-lg\\395.png\" />\n    <Content Include=\"images\\pkmn-lg\\396-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\396.png\" />\n    <Content Include=\"images\\pkmn-lg\\397-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\397.png\" />\n    <Content Include=\"images\\pkmn-lg\\398-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\398.png\" />\n    <Content Include=\"images\\pkmn-lg\\399-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\399.png\" />\n    <Content Include=\"images\\pkmn-lg\\4.png\" />\n    <Content Include=\"images\\pkmn-lg\\40.png\" />\n    <Content Include=\"images\\pkmn-lg\\400-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\400.png\" />\n    <Content Include=\"images\\pkmn-lg\\401-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\401.png\" />\n    <Content Include=\"images\\pkmn-lg\\402-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\402.png\" />\n    <Content Include=\"images\\pkmn-lg\\403-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\403.png\" />\n    <Content Include=\"images\\pkmn-lg\\404-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\404.png\" />\n    <Content Include=\"images\\pkmn-lg\\405-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\405.png\" />\n    <Content Include=\"images\\pkmn-lg\\406.png\" />\n    <Content Include=\"images\\pkmn-lg\\407-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\407.png\" />\n    <Content Include=\"images\\pkmn-lg\\408.png\" />\n    <Content Include=\"images\\pkmn-lg\\409.png\" />\n    <Content Include=\"images\\pkmn-lg\\41-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\41.png\" />\n    <Content Include=\"images\\pkmn-lg\\410.png\" />\n    <Content Include=\"images\\pkmn-lg\\411.png\" />\n    <Content Include=\"images\\pkmn-lg\\412-plant.png\" />\n    <Content Include=\"images\\pkmn-lg\\412-sandy.png\" />\n    <Content Include=\"images\\pkmn-lg\\412-trash.png\" />\n    <Content Include=\"images\\pkmn-lg\\412.png\" />\n    <Content Include=\"images\\pkmn-lg\\413-plant.png\" />\n    <Content Include=\"images\\pkmn-lg\\413-sandy.png\" />\n    <Content Include=\"images\\pkmn-lg\\413-trash.png\" />\n    <Content Include=\"images\\pkmn-lg\\413.png\" />\n    <Content Include=\"images\\pkmn-lg\\414.png\" />\n    <Content Include=\"images\\pkmn-lg\\415-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\415.png\" />\n    <Content Include=\"images\\pkmn-lg\\416.png\" />\n    <Content Include=\"images\\pkmn-lg\\417-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\417.png\" />\n    <Content Include=\"images\\pkmn-lg\\418-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\418.png\" />\n    <Content Include=\"images\\pkmn-lg\\419-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\419.png\" />\n    <Content Include=\"images\\pkmn-lg\\42-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\42.png\" />\n    <Content Include=\"images\\pkmn-lg\\420.png\" />\n    <Content Include=\"images\\pkmn-lg\\421-overcast.png\" />\n    <Content Include=\"images\\pkmn-lg\\421-sunshine.png\" />\n    <Content Include=\"images\\pkmn-lg\\421.png\" />\n    <Content Include=\"images\\pkmn-lg\\422-east.png\" />\n    <Content Include=\"images\\pkmn-lg\\422-west.png\" />\n    <Content Include=\"images\\pkmn-lg\\422.png\" />\n    <Content Include=\"images\\pkmn-lg\\423-east.png\" />\n    <Content Include=\"images\\pkmn-lg\\423-west.png\" />\n    <Content Include=\"images\\pkmn-lg\\423.png\" />\n    <Content Include=\"images\\pkmn-lg\\424-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\424.png\" />\n    <Content Include=\"images\\pkmn-lg\\425.png\" />\n    <Content Include=\"images\\pkmn-lg\\426.png\" />\n    <Content Include=\"images\\pkmn-lg\\427.png\" />\n    <Content Include=\"images\\pkmn-lg\\428.png\" />\n    <Content Include=\"images\\pkmn-lg\\429.png\" />\n    <Content Include=\"images\\pkmn-lg\\43.png\" />\n    <Content Include=\"images\\pkmn-lg\\430.png\" />\n    <Content Include=\"images\\pkmn-lg\\431.png\" />\n    <Content Include=\"images\\pkmn-lg\\432.png\" />\n    <Content Include=\"images\\pkmn-lg\\433.png\" />\n    <Content Include=\"images\\pkmn-lg\\434.png\" />\n    <Content Include=\"images\\pkmn-lg\\435.png\" />\n    <Content Include=\"images\\pkmn-lg\\436.png\" />\n    <Content Include=\"images\\pkmn-lg\\437.png\" />\n    <Content Include=\"images\\pkmn-lg\\438.png\" />\n    <Content Include=\"images\\pkmn-lg\\439.png\" />\n    <Content Include=\"images\\pkmn-lg\\44-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\44.png\" />\n    <Content Include=\"images\\pkmn-lg\\440.png\" />\n    <Content Include=\"images\\pkmn-lg\\441.png\" />\n    <Content Include=\"images\\pkmn-lg\\442.png\" />\n    <Content Include=\"images\\pkmn-lg\\443-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\443.png\" />\n    <Content Include=\"images\\pkmn-lg\\444-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\444.png\" />\n    <Content Include=\"images\\pkmn-lg\\445-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\445.png\" />\n    <Content Include=\"images\\pkmn-lg\\446.png\" />\n    <Content Include=\"images\\pkmn-lg\\447.png\" />\n    <Content Include=\"images\\pkmn-lg\\448.png\" />\n    <Content Include=\"images\\pkmn-lg\\449-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\449.png\" />\n    <Content Include=\"images\\pkmn-lg\\45-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\45.png\" />\n    <Content Include=\"images\\pkmn-lg\\450-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\450.png\" />\n    <Content Include=\"images\\pkmn-lg\\451.png\" />\n    <Content Include=\"images\\pkmn-lg\\452.png\" />\n    <Content Include=\"images\\pkmn-lg\\453-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\453.png\" />\n    <Content Include=\"images\\pkmn-lg\\454-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\454.png\" />\n    <Content Include=\"images\\pkmn-lg\\455.png\" />\n    <Content Include=\"images\\pkmn-lg\\456-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\456.png\" />\n    <Content Include=\"images\\pkmn-lg\\457-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\457.png\" />\n    <Content Include=\"images\\pkmn-lg\\458.png\" />\n    <Content Include=\"images\\pkmn-lg\\459-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\459.png\" />\n    <Content Include=\"images\\pkmn-lg\\46.png\" />\n    <Content Include=\"images\\pkmn-lg\\460-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\460.png\" />\n    <Content Include=\"images\\pkmn-lg\\461-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\461.png\" />\n    <Content Include=\"images\\pkmn-lg\\462.png\" />\n    <Content Include=\"images\\pkmn-lg\\463.png\" />\n    <Content Include=\"images\\pkmn-lg\\464-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\464.png\" />\n    <Content Include=\"images\\pkmn-lg\\465-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\465.png\" />\n    <Content Include=\"images\\pkmn-lg\\466.png\" />\n    <Content Include=\"images\\pkmn-lg\\467.png\" />\n    <Content Include=\"images\\pkmn-lg\\468.png\" />\n    <Content Include=\"images\\pkmn-lg\\469.png\" />\n    <Content Include=\"images\\pkmn-lg\\47.png\" />\n    <Content Include=\"images\\pkmn-lg\\470.png\" />\n    <Content Include=\"images\\pkmn-lg\\471.png\" />\n    <Content Include=\"images\\pkmn-lg\\472.png\" />\n    <Content Include=\"images\\pkmn-lg\\473-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\473.png\" />\n    <Content Include=\"images\\pkmn-lg\\474.png\" />\n    <Content Include=\"images\\pkmn-lg\\475.png\" />\n    <Content Include=\"images\\pkmn-lg\\476.png\" />\n    <Content Include=\"images\\pkmn-lg\\477.png\" />\n    <Content Include=\"images\\pkmn-lg\\478.png\" />\n    <Content Include=\"images\\pkmn-lg\\479-fan.png\" />\n    <Content Include=\"images\\pkmn-lg\\479-frost.png\" />\n    <Content Include=\"images\\pkmn-lg\\479-heat.png\" />\n    <Content Include=\"images\\pkmn-lg\\479-mow.png\" />\n    <Content Include=\"images\\pkmn-lg\\479-wash.png\" />\n    <Content Include=\"images\\pkmn-lg\\479.png\" />\n    <Content Include=\"images\\pkmn-lg\\48.png\" />\n    <Content Include=\"images\\pkmn-lg\\480.png\" />\n    <Content Include=\"images\\pkmn-lg\\481.png\" />\n    <Content Include=\"images\\pkmn-lg\\482.png\" />\n    <Content Include=\"images\\pkmn-lg\\483.png\" />\n    <Content Include=\"images\\pkmn-lg\\484.png\" />\n    <Content Include=\"images\\pkmn-lg\\485.png\" />\n    <Content Include=\"images\\pkmn-lg\\486.png\" />\n    <Content Include=\"images\\pkmn-lg\\487-altered.png\" />\n    <Content Include=\"images\\pkmn-lg\\487-origin.png\" />\n    <Content Include=\"images\\pkmn-lg\\487.png\" />\n    <Content Include=\"images\\pkmn-lg\\488.png\" />\n    <Content Include=\"images\\pkmn-lg\\489.png\" />\n    <Content Include=\"images\\pkmn-lg\\49.png\" />\n    <Content Include=\"images\\pkmn-lg\\490.png\" />\n    <Content Include=\"images\\pkmn-lg\\491.png\" />\n    <Content Include=\"images\\pkmn-lg\\492-land.png\" />\n    <Content Include=\"images\\pkmn-lg\\492-sky.png\" />\n    <Content Include=\"images\\pkmn-lg\\492.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-bug.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-dark.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-dragon.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-electric.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-fighting.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-fire.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-flying.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-ghost.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-grass.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-ground.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-ice.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-normal.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-poison.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-psychic.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-rock.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-steel.png\" />\n    <Content Include=\"images\\pkmn-lg\\493-water.png\" />\n    <Content Include=\"images\\pkmn-lg\\493.png\" />\n    <Content Include=\"images\\pkmn-lg\\494.png\" />\n    <Content Include=\"images\\pkmn-lg\\495.png\" />\n    <Content Include=\"images\\pkmn-lg\\496.png\" />\n    <Content Include=\"images\\pkmn-lg\\497.png\" />\n    <Content Include=\"images\\pkmn-lg\\498.png\" />\n    <Content Include=\"images\\pkmn-lg\\499.png\" />\n    <Content Include=\"images\\pkmn-lg\\5.png\" />\n    <Content Include=\"images\\pkmn-lg\\50.png\" />\n    <Content Include=\"images\\pkmn-lg\\500.png\" />\n    <Content Include=\"images\\pkmn-lg\\501.png\" />\n    <Content Include=\"images\\pkmn-lg\\502.png\" />\n    <Content Include=\"images\\pkmn-lg\\503.png\" />\n    <Content Include=\"images\\pkmn-lg\\504.png\" />\n    <Content Include=\"images\\pkmn-lg\\505.png\" />\n    <Content Include=\"images\\pkmn-lg\\506.png\" />\n    <Content Include=\"images\\pkmn-lg\\507.png\" />\n    <Content Include=\"images\\pkmn-lg\\508.png\" />\n    <Content Include=\"images\\pkmn-lg\\509.png\" />\n    <Content Include=\"images\\pkmn-lg\\51.png\" />\n    <Content Include=\"images\\pkmn-lg\\510.png\" />\n    <Content Include=\"images\\pkmn-lg\\511.png\" />\n    <Content Include=\"images\\pkmn-lg\\512.png\" />\n    <Content Include=\"images\\pkmn-lg\\513.png\" />\n    <Content Include=\"images\\pkmn-lg\\514.png\" />\n    <Content Include=\"images\\pkmn-lg\\515.png\" />\n    <Content Include=\"images\\pkmn-lg\\516.png\" />\n    <Content Include=\"images\\pkmn-lg\\517.png\" />\n    <Content Include=\"images\\pkmn-lg\\518.png\" />\n    <Content Include=\"images\\pkmn-lg\\519.png\" />\n    <Content Include=\"images\\pkmn-lg\\52.png\" />\n    <Content Include=\"images\\pkmn-lg\\520.png\" />\n    <Content Include=\"images\\pkmn-lg\\521-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\521.png\" />\n    <Content Include=\"images\\pkmn-lg\\522.png\" />\n    <Content Include=\"images\\pkmn-lg\\523.png\" />\n    <Content Include=\"images\\pkmn-lg\\524.png\" />\n    <Content Include=\"images\\pkmn-lg\\525.png\" />\n    <Content Include=\"images\\pkmn-lg\\526.png\" />\n    <Content Include=\"images\\pkmn-lg\\527.png\" />\n    <Content Include=\"images\\pkmn-lg\\528.png\" />\n    <Content Include=\"images\\pkmn-lg\\529.png\" />\n    <Content Include=\"images\\pkmn-lg\\53.png\" />\n    <Content Include=\"images\\pkmn-lg\\530.png\" />\n    <Content Include=\"images\\pkmn-lg\\531.png\" />\n    <Content Include=\"images\\pkmn-lg\\532.png\" />\n    <Content Include=\"images\\pkmn-lg\\533.png\" />\n    <Content Include=\"images\\pkmn-lg\\534.png\" />\n    <Content Include=\"images\\pkmn-lg\\535.png\" />\n    <Content Include=\"images\\pkmn-lg\\536.png\" />\n    <Content Include=\"images\\pkmn-lg\\537.png\" />\n    <Content Include=\"images\\pkmn-lg\\538.png\" />\n    <Content Include=\"images\\pkmn-lg\\539.png\" />\n    <Content Include=\"images\\pkmn-lg\\54.png\" />\n    <Content Include=\"images\\pkmn-lg\\540.png\" />\n    <Content Include=\"images\\pkmn-lg\\541.png\" />\n    <Content Include=\"images\\pkmn-lg\\542.png\" />\n    <Content Include=\"images\\pkmn-lg\\543.png\" />\n    <Content Include=\"images\\pkmn-lg\\544.png\" />\n    <Content Include=\"images\\pkmn-lg\\545.png\" />\n    <Content Include=\"images\\pkmn-lg\\546.png\" />\n    <Content Include=\"images\\pkmn-lg\\547.png\" />\n    <Content Include=\"images\\pkmn-lg\\548.png\" />\n    <Content Include=\"images\\pkmn-lg\\549.png\" />\n    <Content Include=\"images\\pkmn-lg\\55.png\" />\n    <Content Include=\"images\\pkmn-lg\\550-blue-striped.png\" />\n    <Content Include=\"images\\pkmn-lg\\550-red-striped.png\" />\n    <Content Include=\"images\\pkmn-lg\\550.png\" />\n    <Content Include=\"images\\pkmn-lg\\551.png\" />\n    <Content Include=\"images\\pkmn-lg\\552.png\" />\n    <Content Include=\"images\\pkmn-lg\\553.png\" />\n    <Content Include=\"images\\pkmn-lg\\554.png\" />\n    <Content Include=\"images\\pkmn-lg\\555-standard.png\" />\n    <Content Include=\"images\\pkmn-lg\\555-zen.png\" />\n    <Content Include=\"images\\pkmn-lg\\555.png\" />\n    <Content Include=\"images\\pkmn-lg\\556.png\" />\n    <Content Include=\"images\\pkmn-lg\\557.png\" />\n    <Content Include=\"images\\pkmn-lg\\558.png\" />\n    <Content Include=\"images\\pkmn-lg\\559.png\" />\n    <Content Include=\"images\\pkmn-lg\\56.png\" />\n    <Content Include=\"images\\pkmn-lg\\560.png\" />\n    <Content Include=\"images\\pkmn-lg\\561.png\" />\n    <Content Include=\"images\\pkmn-lg\\562.png\" />\n    <Content Include=\"images\\pkmn-lg\\563.png\" />\n    <Content Include=\"images\\pkmn-lg\\564.png\" />\n    <Content Include=\"images\\pkmn-lg\\565.png\" />\n    <Content Include=\"images\\pkmn-lg\\566.png\" />\n    <Content Include=\"images\\pkmn-lg\\567.png\" />\n    <Content Include=\"images\\pkmn-lg\\568.png\" />\n    <Content Include=\"images\\pkmn-lg\\569.png\" />\n    <Content Include=\"images\\pkmn-lg\\57.png\" />\n    <Content Include=\"images\\pkmn-lg\\570.png\" />\n    <Content Include=\"images\\pkmn-lg\\571.png\" />\n    <Content Include=\"images\\pkmn-lg\\572.png\" />\n    <Content Include=\"images\\pkmn-lg\\573.png\" />\n    <Content Include=\"images\\pkmn-lg\\574.png\" />\n    <Content Include=\"images\\pkmn-lg\\575.png\" />\n    <Content Include=\"images\\pkmn-lg\\576.png\" />\n    <Content Include=\"images\\pkmn-lg\\577.png\" />\n    <Content Include=\"images\\pkmn-lg\\578.png\" />\n    <Content Include=\"images\\pkmn-lg\\579.png\" />\n    <Content Include=\"images\\pkmn-lg\\58.png\" />\n    <Content Include=\"images\\pkmn-lg\\580.png\" />\n    <Content Include=\"images\\pkmn-lg\\581.png\" />\n    <Content Include=\"images\\pkmn-lg\\582.png\" />\n    <Content Include=\"images\\pkmn-lg\\583.png\" />\n    <Content Include=\"images\\pkmn-lg\\584.png\" />\n    <Content Include=\"images\\pkmn-lg\\585-autumn.png\" />\n    <Content Include=\"images\\pkmn-lg\\585-spring.png\" />\n    <Content Include=\"images\\pkmn-lg\\585-summer.png\" />\n    <Content Include=\"images\\pkmn-lg\\585-winter.png\" />\n    <Content Include=\"images\\pkmn-lg\\585.png\" />\n    <Content Include=\"images\\pkmn-lg\\586-autumn.png\" />\n    <Content Include=\"images\\pkmn-lg\\586-spring.png\" />\n    <Content Include=\"images\\pkmn-lg\\586-summer.png\" />\n    <Content Include=\"images\\pkmn-lg\\586-winter.png\" />\n    <Content Include=\"images\\pkmn-lg\\586.png\" />\n    <Content Include=\"images\\pkmn-lg\\587.png\" />\n    <Content Include=\"images\\pkmn-lg\\588.png\" />\n    <Content Include=\"images\\pkmn-lg\\589.png\" />\n    <Content Include=\"images\\pkmn-lg\\59.png\" />\n    <Content Include=\"images\\pkmn-lg\\590.png\" />\n    <Content Include=\"images\\pkmn-lg\\591.png\" />\n    <Content Include=\"images\\pkmn-lg\\592-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\592.png\" />\n    <Content Include=\"images\\pkmn-lg\\593-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\593.png\" />\n    <Content Include=\"images\\pkmn-lg\\594.png\" />\n    <Content Include=\"images\\pkmn-lg\\595.png\" />\n    <Content Include=\"images\\pkmn-lg\\596.png\" />\n    <Content Include=\"images\\pkmn-lg\\597.png\" />\n    <Content Include=\"images\\pkmn-lg\\598.png\" />\n    <Content Include=\"images\\pkmn-lg\\599.png\" />\n    <Content Include=\"images\\pkmn-lg\\6.png\" />\n    <Content Include=\"images\\pkmn-lg\\60.png\" />\n    <Content Include=\"images\\pkmn-lg\\600.png\" />\n    <Content Include=\"images\\pkmn-lg\\601.png\" />\n    <Content Include=\"images\\pkmn-lg\\602.png\" />\n    <Content Include=\"images\\pkmn-lg\\603.png\" />\n    <Content Include=\"images\\pkmn-lg\\604.png\" />\n    <Content Include=\"images\\pkmn-lg\\605.png\" />\n    <Content Include=\"images\\pkmn-lg\\606.png\" />\n    <Content Include=\"images\\pkmn-lg\\607.png\" />\n    <Content Include=\"images\\pkmn-lg\\608.png\" />\n    <Content Include=\"images\\pkmn-lg\\609.png\" />\n    <Content Include=\"images\\pkmn-lg\\61.png\" />\n    <Content Include=\"images\\pkmn-lg\\610.png\" />\n    <Content Include=\"images\\pkmn-lg\\611.png\" />\n    <Content Include=\"images\\pkmn-lg\\612.png\" />\n    <Content Include=\"images\\pkmn-lg\\613.png\" />\n    <Content Include=\"images\\pkmn-lg\\614.png\" />\n    <Content Include=\"images\\pkmn-lg\\615.png\" />\n    <Content Include=\"images\\pkmn-lg\\616.png\" />\n    <Content Include=\"images\\pkmn-lg\\617.png\" />\n    <Content Include=\"images\\pkmn-lg\\618.png\" />\n    <Content Include=\"images\\pkmn-lg\\619.png\" />\n    <Content Include=\"images\\pkmn-lg\\62.png\" />\n    <Content Include=\"images\\pkmn-lg\\620.png\" />\n    <Content Include=\"images\\pkmn-lg\\621.png\" />\n    <Content Include=\"images\\pkmn-lg\\622.png\" />\n    <Content Include=\"images\\pkmn-lg\\623.png\" />\n    <Content Include=\"images\\pkmn-lg\\624.png\" />\n    <Content Include=\"images\\pkmn-lg\\625.png\" />\n    <Content Include=\"images\\pkmn-lg\\626.png\" />\n    <Content Include=\"images\\pkmn-lg\\627.png\" />\n    <Content Include=\"images\\pkmn-lg\\628.png\" />\n    <Content Include=\"images\\pkmn-lg\\629.png\" />\n    <Content Include=\"images\\pkmn-lg\\63.png\" />\n    <Content Include=\"images\\pkmn-lg\\630.png\" />\n    <Content Include=\"images\\pkmn-lg\\631.png\" />\n    <Content Include=\"images\\pkmn-lg\\632.png\" />\n    <Content Include=\"images\\pkmn-lg\\633.png\" />\n    <Content Include=\"images\\pkmn-lg\\634.png\" />\n    <Content Include=\"images\\pkmn-lg\\635.png\" />\n    <Content Include=\"images\\pkmn-lg\\636.png\" />\n    <Content Include=\"images\\pkmn-lg\\637.png\" />\n    <Content Include=\"images\\pkmn-lg\\638.png\" />\n    <Content Include=\"images\\pkmn-lg\\639.png\" />\n    <Content Include=\"images\\pkmn-lg\\64-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\64.png\" />\n    <Content Include=\"images\\pkmn-lg\\640.png\" />\n    <Content Include=\"images\\pkmn-lg\\641-incarnate.png\" />\n    <Content Include=\"images\\pkmn-lg\\641-therian.png\" />\n    <Content Include=\"images\\pkmn-lg\\641.png\" />\n    <Content Include=\"images\\pkmn-lg\\642-incarnate.png\" />\n    <Content Include=\"images\\pkmn-lg\\642-therian.png\" />\n    <Content Include=\"images\\pkmn-lg\\642.png\" />\n    <Content Include=\"images\\pkmn-lg\\643.png\" />\n    <Content Include=\"images\\pkmn-lg\\644.png\" />\n    <Content Include=\"images\\pkmn-lg\\645-incarnate.png\" />\n    <Content Include=\"images\\pkmn-lg\\645-therian.png\" />\n    <Content Include=\"images\\pkmn-lg\\645.png\" />\n    <Content Include=\"images\\pkmn-lg\\646-black.png\" />\n    <Content Include=\"images\\pkmn-lg\\646-white.png\" />\n    <Content Include=\"images\\pkmn-lg\\646.png\" />\n    <Content Include=\"images\\pkmn-lg\\647-ordinary.png\" />\n    <Content Include=\"images\\pkmn-lg\\647-resolute.png\" />\n    <Content Include=\"images\\pkmn-lg\\647.png\" />\n    <Content Include=\"images\\pkmn-lg\\648-aria.png\" />\n    <Content Include=\"images\\pkmn-lg\\648-pirouette.png\" />\n    <Content Include=\"images\\pkmn-lg\\648.png\" />\n    <Content Include=\"images\\pkmn-lg\\649-burn.png\" />\n    <Content Include=\"images\\pkmn-lg\\649-chill.png\" />\n    <Content Include=\"images\\pkmn-lg\\649-douse.png\" />\n    <Content Include=\"images\\pkmn-lg\\649-shock.png\" />\n    <Content Include=\"images\\pkmn-lg\\649.png\" />\n    <Content Include=\"images\\pkmn-lg\\65-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\65.png\" />\n    <Content Include=\"images\\pkmn-lg\\66.png\" />\n    <Content Include=\"images\\pkmn-lg\\67.png\" />\n    <Content Include=\"images\\pkmn-lg\\68.png\" />\n    <Content Include=\"images\\pkmn-lg\\69.png\" />\n    <Content Include=\"images\\pkmn-lg\\7.png\" />\n    <Content Include=\"images\\pkmn-lg\\70.png\" />\n    <Content Include=\"images\\pkmn-lg\\71.png\" />\n    <Content Include=\"images\\pkmn-lg\\72.png\" />\n    <Content Include=\"images\\pkmn-lg\\73.png\" />\n    <Content Include=\"images\\pkmn-lg\\74.png\" />\n    <Content Include=\"images\\pkmn-lg\\75.png\" />\n    <Content Include=\"images\\pkmn-lg\\76.png\" />\n    <Content Include=\"images\\pkmn-lg\\77.png\" />\n    <Content Include=\"images\\pkmn-lg\\78.png\" />\n    <Content Include=\"images\\pkmn-lg\\79.png\" />\n    <Content Include=\"images\\pkmn-lg\\8.png\" />\n    <Content Include=\"images\\pkmn-lg\\80.png\" />\n    <Content Include=\"images\\pkmn-lg\\81.png\" />\n    <Content Include=\"images\\pkmn-lg\\82.png\" />\n    <Content Include=\"images\\pkmn-lg\\83.png\" />\n    <Content Include=\"images\\pkmn-lg\\84-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\84.png\" />\n    <Content Include=\"images\\pkmn-lg\\85-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\85.png\" />\n    <Content Include=\"images\\pkmn-lg\\86.png\" />\n    <Content Include=\"images\\pkmn-lg\\87.png\" />\n    <Content Include=\"images\\pkmn-lg\\88.png\" />\n    <Content Include=\"images\\pkmn-lg\\89.png\" />\n    <Content Include=\"images\\pkmn-lg\\9.png\" />\n    <Content Include=\"images\\pkmn-lg\\90.png\" />\n    <Content Include=\"images\\pkmn-lg\\91.png\" />\n    <Content Include=\"images\\pkmn-lg\\92.png\" />\n    <Content Include=\"images\\pkmn-lg\\93.png\" />\n    <Content Include=\"images\\pkmn-lg\\94.png\" />\n    <Content Include=\"images\\pkmn-lg\\95.png\" />\n    <Content Include=\"images\\pkmn-lg\\96.png\" />\n    <Content Include=\"images\\pkmn-lg\\97-f.png\" />\n    <Content Include=\"images\\pkmn-lg\\97.png\" />\n    <Content Include=\"images\\pkmn-lg\\98.png\" />\n    <Content Include=\"images\\pkmn-lg\\99.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\1.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\10.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\100.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\101.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\102.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\103-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\103.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\104.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\105-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\105.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\106.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\107.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\108.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\109.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\11.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\110.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\111.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\112.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\113.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\114.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\115-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\115.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\116.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\117.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\118.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\119.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\12.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\120.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\121.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\122.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\123.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\124.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\125.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\126.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\127-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\127.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\128.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\129.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\13.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\130-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\130.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\131.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\132.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\133-starter.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\133.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\134.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\135.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\136.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\137.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\138.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\139.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\14.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\140.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\141.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\142-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\142.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\143.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\144.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\145.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\146.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\147.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\148.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\149.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\15-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\15.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\150-mega-x.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\150-mega-y.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\150.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\151.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\152.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\153.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\154.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\155.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\156.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\157.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\158.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\159.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\16.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\160.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\161.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\162.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\163.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\164.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\165.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\166.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\167.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\168.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\169.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\17.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\170.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\171.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\172-spiky-eared.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\172.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\173.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\174.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\175.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\176.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\177.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\178.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\179.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\18-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\18.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\180.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\181-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\181.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\182.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\183.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\184.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\185.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\186.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\187.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\188.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\189.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\19-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\19.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\190.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\191.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\192.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\193.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\194.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\195.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\196.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\197.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\198.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\199.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\2.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\20-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\20.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\200.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-a.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-b.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-c.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-d.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-e.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-exclamation.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-g.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-h.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-i.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-j.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-k.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-l.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-m.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-n.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-o.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-p.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-q.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-question.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-r.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-s.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-t.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-u.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-v.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-w.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-x.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-y.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201-z.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\201.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\202.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\203.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\204.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\205.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\206.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\207.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\208-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\208.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\209.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\21.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\210.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\211.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\212-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\212.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\213.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\214-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\214.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\215.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\216.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\217.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\218.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\219.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\22.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\220.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\221.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\222.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\223.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\224.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\225.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\226.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\227.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\228.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\229-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\229.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\23.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\230.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\231.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\232.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\233.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\234.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\235.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\236.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\237.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\238.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\239.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\24.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\240.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\241.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\242.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\243.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\244.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\245.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\246.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\247.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\248-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\248.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\249.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-alola-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-belle.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-cosplay.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-hoenn-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-kalos-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-libre.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-original-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-partner-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-phd.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-pop-star.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-rock-star.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-sinnoh-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-starter.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25-unova-cap.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\25.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\250.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\251.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\252.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\253.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\254-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\254.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\255.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\256.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\257-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\257.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\258.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\259.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\26-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\26.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\260-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\260.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\261.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\262.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\263.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\264.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\265.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\266.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\267.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\268.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\269.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\27-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\27.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\270.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\271.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\272.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\273.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\274.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\275.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\276.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\277.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\278.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\279.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\28-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\28.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\280.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\281.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\282-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\282.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\283.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\284.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\285.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\286.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\287.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\288.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\289.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\29.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\290.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\291.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\292.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\293.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\294.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\295.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\296.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\297.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\298.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\299.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\3-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\3.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\30.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\300.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\301.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\302-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\302.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\303-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\303.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\304.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\305.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\306-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\306.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\307.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\308-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\308.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\309.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\31.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\310-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\310.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\311.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\312.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\313.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\314.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\315.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\316.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\317.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\318.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\319-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\319.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\32.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\320.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\321.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\322.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\323-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\323.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\324.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\325.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\326.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\327.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\328.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\329.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\33.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\330.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\331.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\332.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\333.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\334-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\334.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\335.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\336.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\337.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\338.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\339.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\34.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\340.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\341.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\342.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\343.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\344.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\345.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\346.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\347.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\348.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\349.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\35.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\350.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\351-rainy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\351-snowy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\351-sunny.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\351.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\352.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\353.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\354-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\354.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\355.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\356.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\357.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\358.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\359-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\359.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\36.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\360.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\361.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\362-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\362.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\363.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\364.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\365.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\366.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\367.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\368.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\369.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\37-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\37.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\370.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\371.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\372.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\373-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\373.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\374.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\375.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\376-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\376.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\377.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\378.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\379.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\38-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\38.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\380-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\380.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\381-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\381.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\382-primal.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\382.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\383-primal.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\383.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\384-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\384.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\385.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\386-attack.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\386-defense.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\386-normal.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\386-speed.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\386.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\387.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\388.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\389.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\39.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\390.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\391.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\392.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\393.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\394.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\395.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\396.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\397.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\398.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\399.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\4.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\40.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\400.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\401.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\402.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\403.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\404.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\405.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\406.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\407.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\408.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\409.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\41.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\410.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\411.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\412-plant.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\412-sandy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\412-trash.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\412.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\413-plant.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\413-sandy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\413-trash.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\413.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\414.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\415.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\416.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\417.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\418.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\419.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\42.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\420.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\421-overcast.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\421-sunshine.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\421.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\422-east.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\422-west.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\422.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\423-east.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\423-west.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\423.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\424.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\425.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\426.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\427.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\428-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\428.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\429.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\43.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\430.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\431.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\432.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\433.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\434.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\435.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\436.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\437.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\438.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\439.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\44.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\440.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\441.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\442.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\443.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\444.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\445-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\445.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\446.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\447.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\448-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\448.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\449-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\449.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\45.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\450-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\450.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\451.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\452.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\453.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\454.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\455.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\456.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\457.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\458.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\459.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\46.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\460-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\460.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\461.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\462.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\463.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\464.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\465.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\466.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\467.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\468.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\469.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\47.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\470.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\471.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\472.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\473.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\474.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\475-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\475.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\476.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\477.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\478.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\479-fan.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\479-frost.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\479-heat.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\479-mow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\479-wash.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\479.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\48.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\480.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\481.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\482.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\483.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\484.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\485.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\486.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\487-altered.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\487-origin.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\487.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\488.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\489.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\49.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\490.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\491.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\492-land.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\492-sky.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\492.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-bug.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-dark.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-dragon.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-electric.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-fairy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-fighting.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-fire.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-flying.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-ghost.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-grass.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-ground.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-ice.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-normal.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-poison.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-psychic.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-rock.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-steel.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-unknown.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493-water.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\493.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\494.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\495.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\496.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\497.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\498.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\499.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\5.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\50-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\50.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\500.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\501.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\502.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\503.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\504.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\505.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\506.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\507.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\508.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\509.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\51-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\51.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\510.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\511.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\512.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\513.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\514.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\515.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\516.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\517.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\518.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\519.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\52-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\52.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\520.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\521-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\521.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\522.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\523.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\524.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\525.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\526.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\527.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\528.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\529.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\53-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\53.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\530.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\531-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\531.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\532.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\533.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\534.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\535.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\536.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\537.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\538.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\539.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\54.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\540.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\541.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\542.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\543.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\544.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\545.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\546.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\547.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\548.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\549.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\55.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\550-blue-striped.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\550-red-striped.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\550.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\551.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\552.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\553.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\554.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\555-standard.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\555-zen.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\555.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\556.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\557.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\558.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\559.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\56.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\560.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\561.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\562.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\563.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\564.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\565.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\566.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\567.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\568.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\569.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\57.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\570.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\571.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\572.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\573.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\574.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\575.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\576.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\577.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\578.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\579.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\58.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\580.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\581.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\582.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\583.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\584.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\585-autumn.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\585-spring.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\585-summer.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\585-winter.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\585.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\586-autumn.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\586-spring.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\586-summer.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\586-winter.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\586.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\587.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\588.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\589.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\59.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\590.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\591.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\592-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\592.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\593-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\593.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\594.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\595.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\596.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\597.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\598.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\599.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\6-mega-x.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\6-mega-y.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\6.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\60.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\600.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\601.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\602.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\603.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\604.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\605.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\606.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\607.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\608.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\609.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\61.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\610.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\611.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\612.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\613.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\614.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\615.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\616.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\617.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\618.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\619.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\62.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\620.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\621.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\622.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\623.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\624.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\625.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\626.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\627.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\628.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\629.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\63.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\630.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\631.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\632.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\633.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\634.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\635.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\636.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\637.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\638.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\639.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\64.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\640.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\641-incarnate.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\641-therian.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\641.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\642-incarnate.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\642-therian.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\642.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\643.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\644.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\645-incarnate.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\645-therian.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\645.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\646-black.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\646-white.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\646.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\647-ordinary.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\647-resolute.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\647.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\648-aria.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\648-pirouette.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\648.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\649-burn.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\649-chill.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\649-douse.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\649-shock.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\649.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\65-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\65.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\650.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\651.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\652.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\653.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\654.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\655.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\656.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\657.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\658-ash.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\658.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\659.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\66.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\660.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\661.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\662.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\663.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\664.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\665.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-archipelago.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-continental.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-elegant.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-fancy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-garden.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-high-plains.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-icy-snow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-jungle.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-marine.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-meadow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-modern.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-monsoon.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-ocean.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-poke-ball.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-polar.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-river.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-sandstorm.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-savanna.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-sun.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666-tundra.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\666.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\667.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\668-f.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\668.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\669-blue.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\669-orange.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\669-red.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\669-white.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\669-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\669.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\67.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670-blue.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670-eternal.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670-orange.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670-red.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670-white.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\670.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\671-blue.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\671-orange.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\671-red.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\671-white.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\671-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\671.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\672.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\673.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\674.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\675.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-dandy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-debutante.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-diamond.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-heart.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-kabuki.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-la-reine.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-matron.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-natural.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-pharaoh.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676-star.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\676.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\677.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\678-female.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\678-male.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\678.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\679.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\68.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\680.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\681-blade.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\681-shield.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\681.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\682.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\683.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\684.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\685.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\686.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\687.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\688.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\689.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\69.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\690.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\691.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\692.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\693.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\694.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\695.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\696.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\697.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\698.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\699.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\7.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\70.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\700.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\701.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\702.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\703.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\704.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\705.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\706.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\707.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\708.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\709.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\71.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\710-average.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\710-large.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\710-small.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\710-super.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\710.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\711-average.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\711-large.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\711-small.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\711-super.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\711.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\712.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\713.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\714.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\715.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\716-active.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\716-neutral.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\716.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\717.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\718-10.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\718-complete.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\718.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\719-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\719.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\72.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\720-unbound.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\720.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\721.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\722.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\723.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\724.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\725.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\726.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\727.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\728.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\729.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\73.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\730.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\731.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\732.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\733.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\734.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\735.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\736.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\737.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\738.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\739.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\74-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\74.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\740.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\741-baile.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\741-pau.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\741-pom-pom.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\741-sensu.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\741.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\742.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\743.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\744.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\745-dusk.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\745-midday.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\745-midnight.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\745.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\746-school.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\746.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\747.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\748.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\749.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\75-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\75.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\750.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\751.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\752.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\753.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\754.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\755.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\756.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\757.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\758.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\759.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\76-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\76.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\760.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\761.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\762.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\763.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\764.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\765.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\766.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\767.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\768.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\769.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\77.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\770.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\771.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\772.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-bug.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-dark.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-dragon.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-electric.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-fairy.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-fighting.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-fire.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-flying.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-ghost.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-grass.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-ground.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-ice.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-normal.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-poison.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-psychic.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-rock.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-steel.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773-water.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\773.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-blue.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-green.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-indigo.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-meteor.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-orange.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-red.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-violet.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\774.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\775.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\776.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\777.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\778.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\779.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\78.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\780.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\781.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\782.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\783.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\784.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\785.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\786.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\787.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\788.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\789.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\79-galar.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\79.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\790.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\791.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\792.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\793.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\794.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\795.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\796.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\797.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\798.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\799.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\8.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\80-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\80.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\800-dawn.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\800-dusk.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\800-ultra.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\800.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\801-original.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\801.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\802.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\803.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\804.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\805.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\806.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\807.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\808.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\809.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\81.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\82.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\83.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\84.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\85.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\86.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\87.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\88-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\88.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\89-alola.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\89.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\9-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\9.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\90.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\91.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\92.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\93.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\94-mega.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\94.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\95.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\96.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\97.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\98.png\" />\n    <Content Include=\"images\\pkmn-sm-s\\99.png\" />\n    <Content Include=\"images\\pkmn-sm\\1.png\" />\n    <Content Include=\"images\\pkmn-sm\\10.png\" />\n    <Content Include=\"images\\pkmn-sm\\100.png\" />\n    <Content Include=\"images\\pkmn-sm\\101.png\" />\n    <Content Include=\"images\\pkmn-sm\\102.png\" />\n    <Content Include=\"images\\pkmn-sm\\103-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\103.png\" />\n    <Content Include=\"images\\pkmn-sm\\104.png\" />\n    <Content Include=\"images\\pkmn-sm\\105-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\105.png\" />\n    <Content Include=\"images\\pkmn-sm\\106.png\" />\n    <Content Include=\"images\\pkmn-sm\\107.png\" />\n    <Content Include=\"images\\pkmn-sm\\108.png\" />\n    <Content Include=\"images\\pkmn-sm\\109.png\" />\n    <Content Include=\"images\\pkmn-sm\\11.png\" />\n    <Content Include=\"images\\pkmn-sm\\110.png\" />\n    <Content Include=\"images\\pkmn-sm\\111.png\" />\n    <Content Include=\"images\\pkmn-sm\\112.png\" />\n    <Content Include=\"images\\pkmn-sm\\113.png\" />\n    <Content Include=\"images\\pkmn-sm\\114.png\" />\n    <Content Include=\"images\\pkmn-sm\\115-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\115.png\" />\n    <Content Include=\"images\\pkmn-sm\\116.png\" />\n    <Content Include=\"images\\pkmn-sm\\117.png\" />\n    <Content Include=\"images\\pkmn-sm\\118.png\" />\n    <Content Include=\"images\\pkmn-sm\\119.png\" />\n    <Content Include=\"images\\pkmn-sm\\12.png\" />\n    <Content Include=\"images\\pkmn-sm\\120.png\" />\n    <Content Include=\"images\\pkmn-sm\\121.png\" />\n    <Content Include=\"images\\pkmn-sm\\122.png\" />\n    <Content Include=\"images\\pkmn-sm\\123.png\" />\n    <Content Include=\"images\\pkmn-sm\\124.png\" />\n    <Content Include=\"images\\pkmn-sm\\125.png\" />\n    <Content Include=\"images\\pkmn-sm\\126.png\" />\n    <Content Include=\"images\\pkmn-sm\\127-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\127.png\" />\n    <Content Include=\"images\\pkmn-sm\\128.png\" />\n    <Content Include=\"images\\pkmn-sm\\129.png\" />\n    <Content Include=\"images\\pkmn-sm\\13.png\" />\n    <Content Include=\"images\\pkmn-sm\\130-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\130.png\" />\n    <Content Include=\"images\\pkmn-sm\\131.png\" />\n    <Content Include=\"images\\pkmn-sm\\132.png\" />\n    <Content Include=\"images\\pkmn-sm\\133-starter.png\" />\n    <Content Include=\"images\\pkmn-sm\\133.png\" />\n    <Content Include=\"images\\pkmn-sm\\134.png\" />\n    <Content Include=\"images\\pkmn-sm\\135.png\" />\n    <Content Include=\"images\\pkmn-sm\\136.png\" />\n    <Content Include=\"images\\pkmn-sm\\137.png\" />\n    <Content Include=\"images\\pkmn-sm\\138.png\" />\n    <Content Include=\"images\\pkmn-sm\\139.png\" />\n    <Content Include=\"images\\pkmn-sm\\14.png\" />\n    <Content Include=\"images\\pkmn-sm\\140.png\" />\n    <Content Include=\"images\\pkmn-sm\\141.png\" />\n    <Content Include=\"images\\pkmn-sm\\142-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\142.png\" />\n    <Content Include=\"images\\pkmn-sm\\143.png\" />\n    <Content Include=\"images\\pkmn-sm\\144.png\" />\n    <Content Include=\"images\\pkmn-sm\\145.png\" />\n    <Content Include=\"images\\pkmn-sm\\146.png\" />\n    <Content Include=\"images\\pkmn-sm\\147.png\" />\n    <Content Include=\"images\\pkmn-sm\\148.png\" />\n    <Content Include=\"images\\pkmn-sm\\149.png\" />\n    <Content Include=\"images\\pkmn-sm\\15-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\15.png\" />\n    <Content Include=\"images\\pkmn-sm\\150-mega-x.png\" />\n    <Content Include=\"images\\pkmn-sm\\150-mega-y.png\" />\n    <Content Include=\"images\\pkmn-sm\\150.png\" />\n    <Content Include=\"images\\pkmn-sm\\151.png\" />\n    <Content Include=\"images\\pkmn-sm\\152.png\" />\n    <Content Include=\"images\\pkmn-sm\\153.png\" />\n    <Content Include=\"images\\pkmn-sm\\154.png\" />\n    <Content Include=\"images\\pkmn-sm\\155.png\" />\n    <Content Include=\"images\\pkmn-sm\\156.png\" />\n    <Content Include=\"images\\pkmn-sm\\157.png\" />\n    <Content Include=\"images\\pkmn-sm\\158.png\" />\n    <Content Include=\"images\\pkmn-sm\\159.png\" />\n    <Content Include=\"images\\pkmn-sm\\16.png\" />\n    <Content Include=\"images\\pkmn-sm\\160.png\" />\n    <Content Include=\"images\\pkmn-sm\\161.png\" />\n    <Content Include=\"images\\pkmn-sm\\162.png\" />\n    <Content Include=\"images\\pkmn-sm\\163.png\" />\n    <Content Include=\"images\\pkmn-sm\\164.png\" />\n    <Content Include=\"images\\pkmn-sm\\165.png\" />\n    <Content Include=\"images\\pkmn-sm\\166.png\" />\n    <Content Include=\"images\\pkmn-sm\\167.png\" />\n    <Content Include=\"images\\pkmn-sm\\168.png\" />\n    <Content Include=\"images\\pkmn-sm\\169.png\" />\n    <Content Include=\"images\\pkmn-sm\\17.png\" />\n    <Content Include=\"images\\pkmn-sm\\170.png\" />\n    <Content Include=\"images\\pkmn-sm\\171.png\" />\n    <Content Include=\"images\\pkmn-sm\\172-spiky-eared.png\" />\n    <Content Include=\"images\\pkmn-sm\\172.png\" />\n    <Content Include=\"images\\pkmn-sm\\173.png\" />\n    <Content Include=\"images\\pkmn-sm\\174.png\" />\n    <Content Include=\"images\\pkmn-sm\\175.png\" />\n    <Content Include=\"images\\pkmn-sm\\176.png\" />\n    <Content Include=\"images\\pkmn-sm\\177.png\" />\n    <Content Include=\"images\\pkmn-sm\\178.png\" />\n    <Content Include=\"images\\pkmn-sm\\179.png\" />\n    <Content Include=\"images\\pkmn-sm\\18-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\18.png\" />\n    <Content Include=\"images\\pkmn-sm\\180.png\" />\n    <Content Include=\"images\\pkmn-sm\\181-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\181.png\" />\n    <Content Include=\"images\\pkmn-sm\\182.png\" />\n    <Content Include=\"images\\pkmn-sm\\183.png\" />\n    <Content Include=\"images\\pkmn-sm\\184.png\" />\n    <Content Include=\"images\\pkmn-sm\\185.png\" />\n    <Content Include=\"images\\pkmn-sm\\186.png\" />\n    <Content Include=\"images\\pkmn-sm\\187.png\" />\n    <Content Include=\"images\\pkmn-sm\\188.png\" />\n    <Content Include=\"images\\pkmn-sm\\189.png\" />\n    <Content Include=\"images\\pkmn-sm\\19-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\19.png\" />\n    <Content Include=\"images\\pkmn-sm\\190.png\" />\n    <Content Include=\"images\\pkmn-sm\\191.png\" />\n    <Content Include=\"images\\pkmn-sm\\192.png\" />\n    <Content Include=\"images\\pkmn-sm\\193.png\" />\n    <Content Include=\"images\\pkmn-sm\\194.png\" />\n    <Content Include=\"images\\pkmn-sm\\195.png\" />\n    <Content Include=\"images\\pkmn-sm\\196.png\" />\n    <Content Include=\"images\\pkmn-sm\\197.png\" />\n    <Content Include=\"images\\pkmn-sm\\198.png\" />\n    <Content Include=\"images\\pkmn-sm\\199.png\" />\n    <Content Include=\"images\\pkmn-sm\\2.png\" />\n    <Content Include=\"images\\pkmn-sm\\20-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\20.png\" />\n    <Content Include=\"images\\pkmn-sm\\200.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-a.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-b.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-c.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-d.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-e.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-exclamation.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-g.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-h.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-i.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-j.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-k.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-l.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-m.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-n.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-o.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-p.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-q.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-question.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-r.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-s.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-t.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-u.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-v.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-w.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-x.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-y.png\" />\n    <Content Include=\"images\\pkmn-sm\\201-z.png\" />\n    <Content Include=\"images\\pkmn-sm\\201.png\" />\n    <Content Include=\"images\\pkmn-sm\\202.png\" />\n    <Content Include=\"images\\pkmn-sm\\203.png\" />\n    <Content Include=\"images\\pkmn-sm\\204.png\" />\n    <Content Include=\"images\\pkmn-sm\\205.png\" />\n    <Content Include=\"images\\pkmn-sm\\206.png\" />\n    <Content Include=\"images\\pkmn-sm\\207.png\" />\n    <Content Include=\"images\\pkmn-sm\\208-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\208.png\" />\n    <Content Include=\"images\\pkmn-sm\\209.png\" />\n    <Content Include=\"images\\pkmn-sm\\21.png\" />\n    <Content Include=\"images\\pkmn-sm\\210.png\" />\n    <Content Include=\"images\\pkmn-sm\\211.png\" />\n    <Content Include=\"images\\pkmn-sm\\212-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\212.png\" />\n    <Content Include=\"images\\pkmn-sm\\213.png\" />\n    <Content Include=\"images\\pkmn-sm\\214-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\214.png\" />\n    <Content Include=\"images\\pkmn-sm\\215.png\" />\n    <Content Include=\"images\\pkmn-sm\\216.png\" />\n    <Content Include=\"images\\pkmn-sm\\217.png\" />\n    <Content Include=\"images\\pkmn-sm\\218.png\" />\n    <Content Include=\"images\\pkmn-sm\\219.png\" />\n    <Content Include=\"images\\pkmn-sm\\22.png\" />\n    <Content Include=\"images\\pkmn-sm\\220.png\" />\n    <Content Include=\"images\\pkmn-sm\\221.png\" />\n    <Content Include=\"images\\pkmn-sm\\222.png\" />\n    <Content Include=\"images\\pkmn-sm\\223.png\" />\n    <Content Include=\"images\\pkmn-sm\\224.png\" />\n    <Content Include=\"images\\pkmn-sm\\225.png\" />\n    <Content Include=\"images\\pkmn-sm\\226.png\" />\n    <Content Include=\"images\\pkmn-sm\\227.png\" />\n    <Content Include=\"images\\pkmn-sm\\228.png\" />\n    <Content Include=\"images\\pkmn-sm\\229-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\229.png\" />\n    <Content Include=\"images\\pkmn-sm\\23.png\" />\n    <Content Include=\"images\\pkmn-sm\\230.png\" />\n    <Content Include=\"images\\pkmn-sm\\231.png\" />\n    <Content Include=\"images\\pkmn-sm\\232.png\" />\n    <Content Include=\"images\\pkmn-sm\\233.png\" />\n    <Content Include=\"images\\pkmn-sm\\234.png\" />\n    <Content Include=\"images\\pkmn-sm\\235.png\" />\n    <Content Include=\"images\\pkmn-sm\\236.png\" />\n    <Content Include=\"images\\pkmn-sm\\237.png\" />\n    <Content Include=\"images\\pkmn-sm\\238.png\" />\n    <Content Include=\"images\\pkmn-sm\\239.png\" />\n    <Content Include=\"images\\pkmn-sm\\24.png\" />\n    <Content Include=\"images\\pkmn-sm\\240.png\" />\n    <Content Include=\"images\\pkmn-sm\\241.png\" />\n    <Content Include=\"images\\pkmn-sm\\242.png\" />\n    <Content Include=\"images\\pkmn-sm\\243.png\" />\n    <Content Include=\"images\\pkmn-sm\\244.png\" />\n    <Content Include=\"images\\pkmn-sm\\245.png\" />\n    <Content Include=\"images\\pkmn-sm\\246.png\" />\n    <Content Include=\"images\\pkmn-sm\\247.png\" />\n    <Content Include=\"images\\pkmn-sm\\248-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\248.png\" />\n    <Content Include=\"images\\pkmn-sm\\249.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-alola-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-belle.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-cosplay.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-hoenn-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-kalos-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-libre.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-original-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-partner-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-phd.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-pop-star.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-rock-star.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-sinnoh-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-starter.png\" />\n    <Content Include=\"images\\pkmn-sm\\25-unova-cap.png\" />\n    <Content Include=\"images\\pkmn-sm\\25.png\" />\n    <Content Include=\"images\\pkmn-sm\\250.png\" />\n    <Content Include=\"images\\pkmn-sm\\251.png\" />\n    <Content Include=\"images\\pkmn-sm\\252.png\" />\n    <Content Include=\"images\\pkmn-sm\\253.png\" />\n    <Content Include=\"images\\pkmn-sm\\254-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\254.png\" />\n    <Content Include=\"images\\pkmn-sm\\255.png\" />\n    <Content Include=\"images\\pkmn-sm\\256.png\" />\n    <Content Include=\"images\\pkmn-sm\\257-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\257.png\" />\n    <Content Include=\"images\\pkmn-sm\\258.png\" />\n    <Content Include=\"images\\pkmn-sm\\259.png\" />\n    <Content Include=\"images\\pkmn-sm\\26-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\26.png\" />\n    <Content Include=\"images\\pkmn-sm\\260-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\260.png\" />\n    <Content Include=\"images\\pkmn-sm\\261.png\" />\n    <Content Include=\"images\\pkmn-sm\\262.png\" />\n    <Content Include=\"images\\pkmn-sm\\263.png\" />\n    <Content Include=\"images\\pkmn-sm\\264.png\" />\n    <Content Include=\"images\\pkmn-sm\\265.png\" />\n    <Content Include=\"images\\pkmn-sm\\266.png\" />\n    <Content Include=\"images\\pkmn-sm\\267.png\" />\n    <Content Include=\"images\\pkmn-sm\\268.png\" />\n    <Content Include=\"images\\pkmn-sm\\269.png\" />\n    <Content Include=\"images\\pkmn-sm\\27-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\27.png\" />\n    <Content Include=\"images\\pkmn-sm\\270.png\" />\n    <Content Include=\"images\\pkmn-sm\\271.png\" />\n    <Content Include=\"images\\pkmn-sm\\272.png\" />\n    <Content Include=\"images\\pkmn-sm\\273.png\" />\n    <Content Include=\"images\\pkmn-sm\\274.png\" />\n    <Content Include=\"images\\pkmn-sm\\275.png\" />\n    <Content Include=\"images\\pkmn-sm\\276.png\" />\n    <Content Include=\"images\\pkmn-sm\\277.png\" />\n    <Content Include=\"images\\pkmn-sm\\278.png\" />\n    <Content Include=\"images\\pkmn-sm\\279.png\" />\n    <Content Include=\"images\\pkmn-sm\\28-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\28.png\" />\n    <Content Include=\"images\\pkmn-sm\\280.png\" />\n    <Content Include=\"images\\pkmn-sm\\281.png\" />\n    <Content Include=\"images\\pkmn-sm\\282-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\282.png\" />\n    <Content Include=\"images\\pkmn-sm\\283.png\" />\n    <Content Include=\"images\\pkmn-sm\\284.png\" />\n    <Content Include=\"images\\pkmn-sm\\285.png\" />\n    <Content Include=\"images\\pkmn-sm\\286.png\" />\n    <Content Include=\"images\\pkmn-sm\\287.png\" />\n    <Content Include=\"images\\pkmn-sm\\288.png\" />\n    <Content Include=\"images\\pkmn-sm\\289.png\" />\n    <Content Include=\"images\\pkmn-sm\\29.png\" />\n    <Content Include=\"images\\pkmn-sm\\290.png\" />\n    <Content Include=\"images\\pkmn-sm\\291.png\" />\n    <Content Include=\"images\\pkmn-sm\\292.png\" />\n    <Content Include=\"images\\pkmn-sm\\293.png\" />\n    <Content Include=\"images\\pkmn-sm\\294.png\" />\n    <Content Include=\"images\\pkmn-sm\\295.png\" />\n    <Content Include=\"images\\pkmn-sm\\296.png\" />\n    <Content Include=\"images\\pkmn-sm\\297.png\" />\n    <Content Include=\"images\\pkmn-sm\\298.png\" />\n    <Content Include=\"images\\pkmn-sm\\299.png\" />\n    <Content Include=\"images\\pkmn-sm\\3-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\3.png\" />\n    <Content Include=\"images\\pkmn-sm\\30.png\" />\n    <Content Include=\"images\\pkmn-sm\\300.png\" />\n    <Content Include=\"images\\pkmn-sm\\301.png\" />\n    <Content Include=\"images\\pkmn-sm\\302-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\302.png\" />\n    <Content Include=\"images\\pkmn-sm\\303-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\303.png\" />\n    <Content Include=\"images\\pkmn-sm\\304.png\" />\n    <Content Include=\"images\\pkmn-sm\\305.png\" />\n    <Content Include=\"images\\pkmn-sm\\306-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\306.png\" />\n    <Content Include=\"images\\pkmn-sm\\307.png\" />\n    <Content Include=\"images\\pkmn-sm\\308-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\308.png\" />\n    <Content Include=\"images\\pkmn-sm\\309.png\" />\n    <Content Include=\"images\\pkmn-sm\\31.png\" />\n    <Content Include=\"images\\pkmn-sm\\310-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\310.png\" />\n    <Content Include=\"images\\pkmn-sm\\311.png\" />\n    <Content Include=\"images\\pkmn-sm\\312.png\" />\n    <Content Include=\"images\\pkmn-sm\\313.png\" />\n    <Content Include=\"images\\pkmn-sm\\314.png\" />\n    <Content Include=\"images\\pkmn-sm\\315.png\" />\n    <Content Include=\"images\\pkmn-sm\\316.png\" />\n    <Content Include=\"images\\pkmn-sm\\317.png\" />\n    <Content Include=\"images\\pkmn-sm\\318.png\" />\n    <Content Include=\"images\\pkmn-sm\\319-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\319.png\" />\n    <Content Include=\"images\\pkmn-sm\\32.png\" />\n    <Content Include=\"images\\pkmn-sm\\320.png\" />\n    <Content Include=\"images\\pkmn-sm\\321.png\" />\n    <Content Include=\"images\\pkmn-sm\\322.png\" />\n    <Content Include=\"images\\pkmn-sm\\323-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\323.png\" />\n    <Content Include=\"images\\pkmn-sm\\324.png\" />\n    <Content Include=\"images\\pkmn-sm\\325.png\" />\n    <Content Include=\"images\\pkmn-sm\\326.png\" />\n    <Content Include=\"images\\pkmn-sm\\327.png\" />\n    <Content Include=\"images\\pkmn-sm\\328.png\" />\n    <Content Include=\"images\\pkmn-sm\\329.png\" />\n    <Content Include=\"images\\pkmn-sm\\33.png\" />\n    <Content Include=\"images\\pkmn-sm\\330.png\" />\n    <Content Include=\"images\\pkmn-sm\\331.png\" />\n    <Content Include=\"images\\pkmn-sm\\332.png\" />\n    <Content Include=\"images\\pkmn-sm\\333.png\" />\n    <Content Include=\"images\\pkmn-sm\\334-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\334.png\" />\n    <Content Include=\"images\\pkmn-sm\\335.png\" />\n    <Content Include=\"images\\pkmn-sm\\336.png\" />\n    <Content Include=\"images\\pkmn-sm\\337.png\" />\n    <Content Include=\"images\\pkmn-sm\\338.png\" />\n    <Content Include=\"images\\pkmn-sm\\339.png\" />\n    <Content Include=\"images\\pkmn-sm\\34.png\" />\n    <Content Include=\"images\\pkmn-sm\\340.png\" />\n    <Content Include=\"images\\pkmn-sm\\341.png\" />\n    <Content Include=\"images\\pkmn-sm\\342.png\" />\n    <Content Include=\"images\\pkmn-sm\\343.png\" />\n    <Content Include=\"images\\pkmn-sm\\344.png\" />\n    <Content Include=\"images\\pkmn-sm\\345.png\" />\n    <Content Include=\"images\\pkmn-sm\\346.png\" />\n    <Content Include=\"images\\pkmn-sm\\347.png\" />\n    <Content Include=\"images\\pkmn-sm\\348.png\" />\n    <Content Include=\"images\\pkmn-sm\\349.png\" />\n    <Content Include=\"images\\pkmn-sm\\35.png\" />\n    <Content Include=\"images\\pkmn-sm\\350.png\" />\n    <Content Include=\"images\\pkmn-sm\\351-rainy.png\" />\n    <Content Include=\"images\\pkmn-sm\\351-snowy.png\" />\n    <Content Include=\"images\\pkmn-sm\\351-sunny.png\" />\n    <Content Include=\"images\\pkmn-sm\\351.png\" />\n    <Content Include=\"images\\pkmn-sm\\352.png\" />\n    <Content Include=\"images\\pkmn-sm\\353.png\" />\n    <Content Include=\"images\\pkmn-sm\\354-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\354.png\" />\n    <Content Include=\"images\\pkmn-sm\\355.png\" />\n    <Content Include=\"images\\pkmn-sm\\356.png\" />\n    <Content Include=\"images\\pkmn-sm\\357.png\" />\n    <Content Include=\"images\\pkmn-sm\\358.png\" />\n    <Content Include=\"images\\pkmn-sm\\359-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\359.png\" />\n    <Content Include=\"images\\pkmn-sm\\36.png\" />\n    <Content Include=\"images\\pkmn-sm\\360.png\" />\n    <Content Include=\"images\\pkmn-sm\\361.png\" />\n    <Content Include=\"images\\pkmn-sm\\362-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\362.png\" />\n    <Content Include=\"images\\pkmn-sm\\363.png\" />\n    <Content Include=\"images\\pkmn-sm\\364.png\" />\n    <Content Include=\"images\\pkmn-sm\\365.png\" />\n    <Content Include=\"images\\pkmn-sm\\366.png\" />\n    <Content Include=\"images\\pkmn-sm\\367.png\" />\n    <Content Include=\"images\\pkmn-sm\\368.png\" />\n    <Content Include=\"images\\pkmn-sm\\369.png\" />\n    <Content Include=\"images\\pkmn-sm\\37-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\37.png\" />\n    <Content Include=\"images\\pkmn-sm\\370.png\" />\n    <Content Include=\"images\\pkmn-sm\\371.png\" />\n    <Content Include=\"images\\pkmn-sm\\372.png\" />\n    <Content Include=\"images\\pkmn-sm\\373-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\373.png\" />\n    <Content Include=\"images\\pkmn-sm\\374.png\" />\n    <Content Include=\"images\\pkmn-sm\\375.png\" />\n    <Content Include=\"images\\pkmn-sm\\376-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\376.png\" />\n    <Content Include=\"images\\pkmn-sm\\377.png\" />\n    <Content Include=\"images\\pkmn-sm\\378.png\" />\n    <Content Include=\"images\\pkmn-sm\\379.png\" />\n    <Content Include=\"images\\pkmn-sm\\38-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\38.png\" />\n    <Content Include=\"images\\pkmn-sm\\380-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\380.png\" />\n    <Content Include=\"images\\pkmn-sm\\381-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\381.png\" />\n    <Content Include=\"images\\pkmn-sm\\382-primal.png\" />\n    <Content Include=\"images\\pkmn-sm\\382.png\" />\n    <Content Include=\"images\\pkmn-sm\\383-primal.png\" />\n    <Content Include=\"images\\pkmn-sm\\383.png\" />\n    <Content Include=\"images\\pkmn-sm\\384-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\384.png\" />\n    <Content Include=\"images\\pkmn-sm\\385.png\" />\n    <Content Include=\"images\\pkmn-sm\\386-attack.png\" />\n    <Content Include=\"images\\pkmn-sm\\386-defense.png\" />\n    <Content Include=\"images\\pkmn-sm\\386-normal.png\" />\n    <Content Include=\"images\\pkmn-sm\\386-speed.png\" />\n    <Content Include=\"images\\pkmn-sm\\386.png\" />\n    <Content Include=\"images\\pkmn-sm\\387.png\" />\n    <Content Include=\"images\\pkmn-sm\\388.png\" />\n    <Content Include=\"images\\pkmn-sm\\389.png\" />\n    <Content Include=\"images\\pkmn-sm\\39.png\" />\n    <Content Include=\"images\\pkmn-sm\\390.png\" />\n    <Content Include=\"images\\pkmn-sm\\391.png\" />\n    <Content Include=\"images\\pkmn-sm\\392.png\" />\n    <Content Include=\"images\\pkmn-sm\\393.png\" />\n    <Content Include=\"images\\pkmn-sm\\394.png\" />\n    <Content Include=\"images\\pkmn-sm\\395.png\" />\n    <Content Include=\"images\\pkmn-sm\\396.png\" />\n    <Content Include=\"images\\pkmn-sm\\397.png\" />\n    <Content Include=\"images\\pkmn-sm\\398.png\" />\n    <Content Include=\"images\\pkmn-sm\\399.png\" />\n    <Content Include=\"images\\pkmn-sm\\4.png\" />\n    <Content Include=\"images\\pkmn-sm\\40.png\" />\n    <Content Include=\"images\\pkmn-sm\\400.png\" />\n    <Content Include=\"images\\pkmn-sm\\401.png\" />\n    <Content Include=\"images\\pkmn-sm\\402.png\" />\n    <Content Include=\"images\\pkmn-sm\\403.png\" />\n    <Content Include=\"images\\pkmn-sm\\404.png\" />\n    <Content Include=\"images\\pkmn-sm\\405.png\" />\n    <Content Include=\"images\\pkmn-sm\\406.png\" />\n    <Content Include=\"images\\pkmn-sm\\407.png\" />\n    <Content Include=\"images\\pkmn-sm\\408.png\" />\n    <Content Include=\"images\\pkmn-sm\\409.png\" />\n    <Content Include=\"images\\pkmn-sm\\41.png\" />\n    <Content Include=\"images\\pkmn-sm\\410.png\" />\n    <Content Include=\"images\\pkmn-sm\\411.png\" />\n    <Content Include=\"images\\pkmn-sm\\412-plant.png\" />\n    <Content Include=\"images\\pkmn-sm\\412-sandy.png\" />\n    <Content Include=\"images\\pkmn-sm\\412-trash.png\" />\n    <Content Include=\"images\\pkmn-sm\\412.png\" />\n    <Content Include=\"images\\pkmn-sm\\413-plant.png\" />\n    <Content Include=\"images\\pkmn-sm\\413-sandy.png\" />\n    <Content Include=\"images\\pkmn-sm\\413-trash.png\" />\n    <Content Include=\"images\\pkmn-sm\\413.png\" />\n    <Content Include=\"images\\pkmn-sm\\414.png\" />\n    <Content Include=\"images\\pkmn-sm\\415.png\" />\n    <Content Include=\"images\\pkmn-sm\\416.png\" />\n    <Content Include=\"images\\pkmn-sm\\417.png\" />\n    <Content Include=\"images\\pkmn-sm\\418.png\" />\n    <Content Include=\"images\\pkmn-sm\\419.png\" />\n    <Content Include=\"images\\pkmn-sm\\42.png\" />\n    <Content Include=\"images\\pkmn-sm\\420.png\" />\n    <Content Include=\"images\\pkmn-sm\\421-overcast.png\" />\n    <Content Include=\"images\\pkmn-sm\\421-sunshine.png\" />\n    <Content Include=\"images\\pkmn-sm\\421.png\" />\n    <Content Include=\"images\\pkmn-sm\\422-east.png\" />\n    <Content Include=\"images\\pkmn-sm\\422-west.png\" />\n    <Content Include=\"images\\pkmn-sm\\422.png\" />\n    <Content Include=\"images\\pkmn-sm\\423-east.png\" />\n    <Content Include=\"images\\pkmn-sm\\423-west.png\" />\n    <Content Include=\"images\\pkmn-sm\\423.png\" />\n    <Content Include=\"images\\pkmn-sm\\424.png\" />\n    <Content Include=\"images\\pkmn-sm\\425.png\" />\n    <Content Include=\"images\\pkmn-sm\\426.png\" />\n    <Content Include=\"images\\pkmn-sm\\427.png\" />\n    <Content Include=\"images\\pkmn-sm\\428-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\428.png\" />\n    <Content Include=\"images\\pkmn-sm\\429.png\" />\n    <Content Include=\"images\\pkmn-sm\\43.png\" />\n    <Content Include=\"images\\pkmn-sm\\430.png\" />\n    <Content Include=\"images\\pkmn-sm\\431.png\" />\n    <Content Include=\"images\\pkmn-sm\\432.png\" />\n    <Content Include=\"images\\pkmn-sm\\433.png\" />\n    <Content Include=\"images\\pkmn-sm\\434.png\" />\n    <Content Include=\"images\\pkmn-sm\\435.png\" />\n    <Content Include=\"images\\pkmn-sm\\436.png\" />\n    <Content Include=\"images\\pkmn-sm\\437.png\" />\n    <Content Include=\"images\\pkmn-sm\\438.png\" />\n    <Content Include=\"images\\pkmn-sm\\439.png\" />\n    <Content Include=\"images\\pkmn-sm\\44.png\" />\n    <Content Include=\"images\\pkmn-sm\\440.png\" />\n    <Content Include=\"images\\pkmn-sm\\441.png\" />\n    <Content Include=\"images\\pkmn-sm\\442.png\" />\n    <Content Include=\"images\\pkmn-sm\\443.png\" />\n    <Content Include=\"images\\pkmn-sm\\444.png\" />\n    <Content Include=\"images\\pkmn-sm\\445-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\445.png\" />\n    <Content Include=\"images\\pkmn-sm\\446.png\" />\n    <Content Include=\"images\\pkmn-sm\\447.png\" />\n    <Content Include=\"images\\pkmn-sm\\448-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\448.png\" />\n    <Content Include=\"images\\pkmn-sm\\449-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\449.png\" />\n    <Content Include=\"images\\pkmn-sm\\45.png\" />\n    <Content Include=\"images\\pkmn-sm\\450-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\450.png\" />\n    <Content Include=\"images\\pkmn-sm\\451.png\" />\n    <Content Include=\"images\\pkmn-sm\\452.png\" />\n    <Content Include=\"images\\pkmn-sm\\453.png\" />\n    <Content Include=\"images\\pkmn-sm\\454.png\" />\n    <Content Include=\"images\\pkmn-sm\\455.png\" />\n    <Content Include=\"images\\pkmn-sm\\456.png\" />\n    <Content Include=\"images\\pkmn-sm\\457.png\" />\n    <Content Include=\"images\\pkmn-sm\\458.png\" />\n    <Content Include=\"images\\pkmn-sm\\459.png\" />\n    <Content Include=\"images\\pkmn-sm\\46.png\" />\n    <Content Include=\"images\\pkmn-sm\\460-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\460.png\" />\n    <Content Include=\"images\\pkmn-sm\\461.png\" />\n    <Content Include=\"images\\pkmn-sm\\462.png\" />\n    <Content Include=\"images\\pkmn-sm\\463.png\" />\n    <Content Include=\"images\\pkmn-sm\\464.png\" />\n    <Content Include=\"images\\pkmn-sm\\465.png\" />\n    <Content Include=\"images\\pkmn-sm\\466.png\" />\n    <Content Include=\"images\\pkmn-sm\\467.png\" />\n    <Content Include=\"images\\pkmn-sm\\468.png\" />\n    <Content Include=\"images\\pkmn-sm\\469.png\" />\n    <Content Include=\"images\\pkmn-sm\\47.png\" />\n    <Content Include=\"images\\pkmn-sm\\470.png\" />\n    <Content Include=\"images\\pkmn-sm\\471.png\" />\n    <Content Include=\"images\\pkmn-sm\\472.png\" />\n    <Content Include=\"images\\pkmn-sm\\473.png\" />\n    <Content Include=\"images\\pkmn-sm\\474.png\" />\n    <Content Include=\"images\\pkmn-sm\\475-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\475.png\" />\n    <Content Include=\"images\\pkmn-sm\\476.png\" />\n    <Content Include=\"images\\pkmn-sm\\477.png\" />\n    <Content Include=\"images\\pkmn-sm\\478.png\" />\n    <Content Include=\"images\\pkmn-sm\\479-fan.png\" />\n    <Content Include=\"images\\pkmn-sm\\479-frost.png\" />\n    <Content Include=\"images\\pkmn-sm\\479-heat.png\" />\n    <Content Include=\"images\\pkmn-sm\\479-mow.png\" />\n    <Content Include=\"images\\pkmn-sm\\479-wash.png\" />\n    <Content Include=\"images\\pkmn-sm\\479.png\" />\n    <Content Include=\"images\\pkmn-sm\\48.png\" />\n    <Content Include=\"images\\pkmn-sm\\480.png\" />\n    <Content Include=\"images\\pkmn-sm\\481.png\" />\n    <Content Include=\"images\\pkmn-sm\\482.png\" />\n    <Content Include=\"images\\pkmn-sm\\483.png\" />\n    <Content Include=\"images\\pkmn-sm\\484.png\" />\n    <Content Include=\"images\\pkmn-sm\\485.png\" />\n    <Content Include=\"images\\pkmn-sm\\486.png\" />\n    <Content Include=\"images\\pkmn-sm\\487-altered.png\" />\n    <Content Include=\"images\\pkmn-sm\\487-origin.png\" />\n    <Content Include=\"images\\pkmn-sm\\487.png\" />\n    <Content Include=\"images\\pkmn-sm\\488.png\" />\n    <Content Include=\"images\\pkmn-sm\\489.png\" />\n    <Content Include=\"images\\pkmn-sm\\49.png\" />\n    <Content Include=\"images\\pkmn-sm\\490.png\" />\n    <Content Include=\"images\\pkmn-sm\\491.png\" />\n    <Content Include=\"images\\pkmn-sm\\492-land.png\" />\n    <Content Include=\"images\\pkmn-sm\\492-sky.png\" />\n    <Content Include=\"images\\pkmn-sm\\492.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-bug.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-dark.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-dragon.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-electric.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-fairy.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-fighting.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-fire.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-flying.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-ghost.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-grass.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-ground.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-ice.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-normal.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-poison.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-psychic.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-rock.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-steel.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-unknown.png\" />\n    <Content Include=\"images\\pkmn-sm\\493-water.png\" />\n    <Content Include=\"images\\pkmn-sm\\493.png\" />\n    <Content Include=\"images\\pkmn-sm\\494.png\" />\n    <Content Include=\"images\\pkmn-sm\\495.png\" />\n    <Content Include=\"images\\pkmn-sm\\496.png\" />\n    <Content Include=\"images\\pkmn-sm\\497.png\" />\n    <Content Include=\"images\\pkmn-sm\\498.png\" />\n    <Content Include=\"images\\pkmn-sm\\499.png\" />\n    <Content Include=\"images\\pkmn-sm\\5.png\" />\n    <Content Include=\"images\\pkmn-sm\\50-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\50.png\" />\n    <Content Include=\"images\\pkmn-sm\\500.png\" />\n    <Content Include=\"images\\pkmn-sm\\501.png\" />\n    <Content Include=\"images\\pkmn-sm\\502.png\" />\n    <Content Include=\"images\\pkmn-sm\\503.png\" />\n    <Content Include=\"images\\pkmn-sm\\504.png\" />\n    <Content Include=\"images\\pkmn-sm\\505.png\" />\n    <Content Include=\"images\\pkmn-sm\\506.png\" />\n    <Content Include=\"images\\pkmn-sm\\507.png\" />\n    <Content Include=\"images\\pkmn-sm\\508.png\" />\n    <Content Include=\"images\\pkmn-sm\\509.png\" />\n    <Content Include=\"images\\pkmn-sm\\51-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\51.png\" />\n    <Content Include=\"images\\pkmn-sm\\510.png\" />\n    <Content Include=\"images\\pkmn-sm\\511.png\" />\n    <Content Include=\"images\\pkmn-sm\\512.png\" />\n    <Content Include=\"images\\pkmn-sm\\513.png\" />\n    <Content Include=\"images\\pkmn-sm\\514.png\" />\n    <Content Include=\"images\\pkmn-sm\\515.png\" />\n    <Content Include=\"images\\pkmn-sm\\516.png\" />\n    <Content Include=\"images\\pkmn-sm\\517.png\" />\n    <Content Include=\"images\\pkmn-sm\\518.png\" />\n    <Content Include=\"images\\pkmn-sm\\519.png\" />\n    <Content Include=\"images\\pkmn-sm\\52-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\52.png\" />\n    <Content Include=\"images\\pkmn-sm\\520.png\" />\n    <Content Include=\"images\\pkmn-sm\\521-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\521.png\" />\n    <Content Include=\"images\\pkmn-sm\\522.png\" />\n    <Content Include=\"images\\pkmn-sm\\523.png\" />\n    <Content Include=\"images\\pkmn-sm\\524.png\" />\n    <Content Include=\"images\\pkmn-sm\\525.png\" />\n    <Content Include=\"images\\pkmn-sm\\526.png\" />\n    <Content Include=\"images\\pkmn-sm\\527.png\" />\n    <Content Include=\"images\\pkmn-sm\\528.png\" />\n    <Content Include=\"images\\pkmn-sm\\529.png\" />\n    <Content Include=\"images\\pkmn-sm\\53-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\53.png\" />\n    <Content Include=\"images\\pkmn-sm\\530.png\" />\n    <Content Include=\"images\\pkmn-sm\\531-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\531.png\" />\n    <Content Include=\"images\\pkmn-sm\\532.png\" />\n    <Content Include=\"images\\pkmn-sm\\533.png\" />\n    <Content Include=\"images\\pkmn-sm\\534.png\" />\n    <Content Include=\"images\\pkmn-sm\\535.png\" />\n    <Content Include=\"images\\pkmn-sm\\536.png\" />\n    <Content Include=\"images\\pkmn-sm\\537.png\" />\n    <Content Include=\"images\\pkmn-sm\\538.png\" />\n    <Content Include=\"images\\pkmn-sm\\539.png\" />\n    <Content Include=\"images\\pkmn-sm\\54.png\" />\n    <Content Include=\"images\\pkmn-sm\\540.png\" />\n    <Content Include=\"images\\pkmn-sm\\541.png\" />\n    <Content Include=\"images\\pkmn-sm\\542.png\" />\n    <Content Include=\"images\\pkmn-sm\\543.png\" />\n    <Content Include=\"images\\pkmn-sm\\544.png\" />\n    <Content Include=\"images\\pkmn-sm\\545.png\" />\n    <Content Include=\"images\\pkmn-sm\\546.png\" />\n    <Content Include=\"images\\pkmn-sm\\547.png\" />\n    <Content Include=\"images\\pkmn-sm\\548.png\" />\n    <Content Include=\"images\\pkmn-sm\\549.png\" />\n    <Content Include=\"images\\pkmn-sm\\55.png\" />\n    <Content Include=\"images\\pkmn-sm\\550-blue-striped.png\" />\n    <Content Include=\"images\\pkmn-sm\\550-red-striped.png\" />\n    <Content Include=\"images\\pkmn-sm\\550.png\" />\n    <Content Include=\"images\\pkmn-sm\\551.png\" />\n    <Content Include=\"images\\pkmn-sm\\552.png\" />\n    <Content Include=\"images\\pkmn-sm\\553.png\" />\n    <Content Include=\"images\\pkmn-sm\\554.png\" />\n    <Content Include=\"images\\pkmn-sm\\555-standard.png\" />\n    <Content Include=\"images\\pkmn-sm\\555-zen.png\" />\n    <Content Include=\"images\\pkmn-sm\\555.png\" />\n    <Content Include=\"images\\pkmn-sm\\556.png\" />\n    <Content Include=\"images\\pkmn-sm\\557.png\" />\n    <Content Include=\"images\\pkmn-sm\\558.png\" />\n    <Content Include=\"images\\pkmn-sm\\559.png\" />\n    <Content Include=\"images\\pkmn-sm\\56.png\" />\n    <Content Include=\"images\\pkmn-sm\\560.png\" />\n    <Content Include=\"images\\pkmn-sm\\561.png\" />\n    <Content Include=\"images\\pkmn-sm\\562.png\" />\n    <Content Include=\"images\\pkmn-sm\\563.png\" />\n    <Content Include=\"images\\pkmn-sm\\564.png\" />\n    <Content Include=\"images\\pkmn-sm\\565.png\" />\n    <Content Include=\"images\\pkmn-sm\\566.png\" />\n    <Content Include=\"images\\pkmn-sm\\567.png\" />\n    <Content Include=\"images\\pkmn-sm\\568.png\" />\n    <Content Include=\"images\\pkmn-sm\\569.png\" />\n    <Content Include=\"images\\pkmn-sm\\57.png\" />\n    <Content Include=\"images\\pkmn-sm\\570.png\" />\n    <Content Include=\"images\\pkmn-sm\\571.png\" />\n    <Content Include=\"images\\pkmn-sm\\572.png\" />\n    <Content Include=\"images\\pkmn-sm\\573.png\" />\n    <Content Include=\"images\\pkmn-sm\\574.png\" />\n    <Content Include=\"images\\pkmn-sm\\575.png\" />\n    <Content Include=\"images\\pkmn-sm\\576.png\" />\n    <Content Include=\"images\\pkmn-sm\\577.png\" />\n    <Content Include=\"images\\pkmn-sm\\578.png\" />\n    <Content Include=\"images\\pkmn-sm\\579.png\" />\n    <Content Include=\"images\\pkmn-sm\\58.png\" />\n    <Content Include=\"images\\pkmn-sm\\580.png\" />\n    <Content Include=\"images\\pkmn-sm\\581.png\" />\n    <Content Include=\"images\\pkmn-sm\\582.png\" />\n    <Content Include=\"images\\pkmn-sm\\583.png\" />\n    <Content Include=\"images\\pkmn-sm\\584.png\" />\n    <Content Include=\"images\\pkmn-sm\\585-autumn.png\" />\n    <Content Include=\"images\\pkmn-sm\\585-spring.png\" />\n    <Content Include=\"images\\pkmn-sm\\585-summer.png\" />\n    <Content Include=\"images\\pkmn-sm\\585-winter.png\" />\n    <Content Include=\"images\\pkmn-sm\\585.png\" />\n    <Content Include=\"images\\pkmn-sm\\586-autumn.png\" />\n    <Content Include=\"images\\pkmn-sm\\586-spring.png\" />\n    <Content Include=\"images\\pkmn-sm\\586-summer.png\" />\n    <Content Include=\"images\\pkmn-sm\\586-winter.png\" />\n    <Content Include=\"images\\pkmn-sm\\586.png\" />\n    <Content Include=\"images\\pkmn-sm\\587.png\" />\n    <Content Include=\"images\\pkmn-sm\\588.png\" />\n    <Content Include=\"images\\pkmn-sm\\589.png\" />\n    <Content Include=\"images\\pkmn-sm\\59.png\" />\n    <Content Include=\"images\\pkmn-sm\\590.png\" />\n    <Content Include=\"images\\pkmn-sm\\591.png\" />\n    <Content Include=\"images\\pkmn-sm\\592-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\592.png\" />\n    <Content Include=\"images\\pkmn-sm\\593-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\593.png\" />\n    <Content Include=\"images\\pkmn-sm\\594.png\" />\n    <Content Include=\"images\\pkmn-sm\\595.png\" />\n    <Content Include=\"images\\pkmn-sm\\596.png\" />\n    <Content Include=\"images\\pkmn-sm\\597.png\" />\n    <Content Include=\"images\\pkmn-sm\\598.png\" />\n    <Content Include=\"images\\pkmn-sm\\599.png\" />\n    <Content Include=\"images\\pkmn-sm\\6-mega-x.png\" />\n    <Content Include=\"images\\pkmn-sm\\6-mega-y.png\" />\n    <Content Include=\"images\\pkmn-sm\\6.png\" />\n    <Content Include=\"images\\pkmn-sm\\60.png\" />\n    <Content Include=\"images\\pkmn-sm\\600.png\" />\n    <Content Include=\"images\\pkmn-sm\\601.png\" />\n    <Content Include=\"images\\pkmn-sm\\602.png\" />\n    <Content Include=\"images\\pkmn-sm\\603.png\" />\n    <Content Include=\"images\\pkmn-sm\\604.png\" />\n    <Content Include=\"images\\pkmn-sm\\605.png\" />\n    <Content Include=\"images\\pkmn-sm\\606.png\" />\n    <Content Include=\"images\\pkmn-sm\\607.png\" />\n    <Content Include=\"images\\pkmn-sm\\608.png\" />\n    <Content Include=\"images\\pkmn-sm\\609.png\" />\n    <Content Include=\"images\\pkmn-sm\\61.png\" />\n    <Content Include=\"images\\pkmn-sm\\610.png\" />\n    <Content Include=\"images\\pkmn-sm\\611.png\" />\n    <Content Include=\"images\\pkmn-sm\\612.png\" />\n    <Content Include=\"images\\pkmn-sm\\613.png\" />\n    <Content Include=\"images\\pkmn-sm\\614.png\" />\n    <Content Include=\"images\\pkmn-sm\\615.png\" />\n    <Content Include=\"images\\pkmn-sm\\616.png\" />\n    <Content Include=\"images\\pkmn-sm\\617.png\" />\n    <Content Include=\"images\\pkmn-sm\\618.png\" />\n    <Content Include=\"images\\pkmn-sm\\619.png\" />\n    <Content Include=\"images\\pkmn-sm\\62.png\" />\n    <Content Include=\"images\\pkmn-sm\\620.png\" />\n    <Content Include=\"images\\pkmn-sm\\621.png\" />\n    <Content Include=\"images\\pkmn-sm\\622.png\" />\n    <Content Include=\"images\\pkmn-sm\\623.png\" />\n    <Content Include=\"images\\pkmn-sm\\624.png\" />\n    <Content Include=\"images\\pkmn-sm\\625.png\" />\n    <Content Include=\"images\\pkmn-sm\\626.png\" />\n    <Content Include=\"images\\pkmn-sm\\627.png\" />\n    <Content Include=\"images\\pkmn-sm\\628.png\" />\n    <Content Include=\"images\\pkmn-sm\\629.png\" />\n    <Content Include=\"images\\pkmn-sm\\63.png\" />\n    <Content Include=\"images\\pkmn-sm\\630.png\" />\n    <Content Include=\"images\\pkmn-sm\\631.png\" />\n    <Content Include=\"images\\pkmn-sm\\632.png\" />\n    <Content Include=\"images\\pkmn-sm\\633.png\" />\n    <Content Include=\"images\\pkmn-sm\\634.png\" />\n    <Content Include=\"images\\pkmn-sm\\635.png\" />\n    <Content Include=\"images\\pkmn-sm\\636.png\" />\n    <Content Include=\"images\\pkmn-sm\\637.png\" />\n    <Content Include=\"images\\pkmn-sm\\638.png\" />\n    <Content Include=\"images\\pkmn-sm\\639.png\" />\n    <Content Include=\"images\\pkmn-sm\\64.png\" />\n    <Content Include=\"images\\pkmn-sm\\640.png\" />\n    <Content Include=\"images\\pkmn-sm\\641-incarnate.png\" />\n    <Content Include=\"images\\pkmn-sm\\641-therian.png\" />\n    <Content Include=\"images\\pkmn-sm\\641.png\" />\n    <Content Include=\"images\\pkmn-sm\\642-incarnate.png\" />\n    <Content Include=\"images\\pkmn-sm\\642-therian.png\" />\n    <Content Include=\"images\\pkmn-sm\\642.png\" />\n    <Content Include=\"images\\pkmn-sm\\643.png\" />\n    <Content Include=\"images\\pkmn-sm\\644.png\" />\n    <Content Include=\"images\\pkmn-sm\\645-incarnate.png\" />\n    <Content Include=\"images\\pkmn-sm\\645-therian.png\" />\n    <Content Include=\"images\\pkmn-sm\\645.png\" />\n    <Content Include=\"images\\pkmn-sm\\646-black.png\" />\n    <Content Include=\"images\\pkmn-sm\\646-white.png\" />\n    <Content Include=\"images\\pkmn-sm\\646.png\" />\n    <Content Include=\"images\\pkmn-sm\\647-ordinary.png\" />\n    <Content Include=\"images\\pkmn-sm\\647-resolute.png\" />\n    <Content Include=\"images\\pkmn-sm\\647.png\" />\n    <Content Include=\"images\\pkmn-sm\\648-aria.png\" />\n    <Content Include=\"images\\pkmn-sm\\648-pirouette.png\" />\n    <Content Include=\"images\\pkmn-sm\\648.png\" />\n    <Content Include=\"images\\pkmn-sm\\649-burn.png\" />\n    <Content Include=\"images\\pkmn-sm\\649-chill.png\" />\n    <Content Include=\"images\\pkmn-sm\\649-douse.png\" />\n    <Content Include=\"images\\pkmn-sm\\649-shock.png\" />\n    <Content Include=\"images\\pkmn-sm\\649.png\" />\n    <Content Include=\"images\\pkmn-sm\\65-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\65.png\" />\n    <Content Include=\"images\\pkmn-sm\\650.png\" />\n    <Content Include=\"images\\pkmn-sm\\651.png\" />\n    <Content Include=\"images\\pkmn-sm\\652.png\" />\n    <Content Include=\"images\\pkmn-sm\\653.png\" />\n    <Content Include=\"images\\pkmn-sm\\654.png\" />\n    <Content Include=\"images\\pkmn-sm\\655.png\" />\n    <Content Include=\"images\\pkmn-sm\\656.png\" />\n    <Content Include=\"images\\pkmn-sm\\657.png\" />\n    <Content Include=\"images\\pkmn-sm\\658-ash.png\" />\n    <Content Include=\"images\\pkmn-sm\\658.png\" />\n    <Content Include=\"images\\pkmn-sm\\659.png\" />\n    <Content Include=\"images\\pkmn-sm\\66.png\" />\n    <Content Include=\"images\\pkmn-sm\\660.png\" />\n    <Content Include=\"images\\pkmn-sm\\661.png\" />\n    <Content Include=\"images\\pkmn-sm\\662.png\" />\n    <Content Include=\"images\\pkmn-sm\\663.png\" />\n    <Content Include=\"images\\pkmn-sm\\664.png\" />\n    <Content Include=\"images\\pkmn-sm\\665.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-archipelago.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-continental.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-elegant.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-fancy.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-garden.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-high-plains.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-icy-snow.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-jungle.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-marine.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-meadow.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-modern.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-monsoon.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-ocean.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-poke-ball.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-polar.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-river.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-sandstorm.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-savanna.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-sun.png\" />\n    <Content Include=\"images\\pkmn-sm\\666-tundra.png\" />\n    <Content Include=\"images\\pkmn-sm\\666.png\" />\n    <Content Include=\"images\\pkmn-sm\\667.png\" />\n    <Content Include=\"images\\pkmn-sm\\668-f.png\" />\n    <Content Include=\"images\\pkmn-sm\\668.png\" />\n    <Content Include=\"images\\pkmn-sm\\669-blue.png\" />\n    <Content Include=\"images\\pkmn-sm\\669-orange.png\" />\n    <Content Include=\"images\\pkmn-sm\\669-red.png\" />\n    <Content Include=\"images\\pkmn-sm\\669-white.png\" />\n    <Content Include=\"images\\pkmn-sm\\669-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm\\669.png\" />\n    <Content Include=\"images\\pkmn-sm\\67.png\" />\n    <Content Include=\"images\\pkmn-sm\\670-blue.png\" />\n    <Content Include=\"images\\pkmn-sm\\670-eternal.png\" />\n    <Content Include=\"images\\pkmn-sm\\670-orange.png\" />\n    <Content Include=\"images\\pkmn-sm\\670-red.png\" />\n    <Content Include=\"images\\pkmn-sm\\670-white.png\" />\n    <Content Include=\"images\\pkmn-sm\\670-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm\\670.png\" />\n    <Content Include=\"images\\pkmn-sm\\671-blue.png\" />\n    <Content Include=\"images\\pkmn-sm\\671-orange.png\" />\n    <Content Include=\"images\\pkmn-sm\\671-red.png\" />\n    <Content Include=\"images\\pkmn-sm\\671-white.png\" />\n    <Content Include=\"images\\pkmn-sm\\671-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm\\671.png\" />\n    <Content Include=\"images\\pkmn-sm\\672.png\" />\n    <Content Include=\"images\\pkmn-sm\\673.png\" />\n    <Content Include=\"images\\pkmn-sm\\674.png\" />\n    <Content Include=\"images\\pkmn-sm\\675.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-dandy.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-debutante.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-diamond.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-heart.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-kabuki.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-la-reine.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-matron.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-natural.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-pharaoh.png\" />\n    <Content Include=\"images\\pkmn-sm\\676-star.png\" />\n    <Content Include=\"images\\pkmn-sm\\676.png\" />\n    <Content Include=\"images\\pkmn-sm\\677.png\" />\n    <Content Include=\"images\\pkmn-sm\\678-female.png\" />\n    <Content Include=\"images\\pkmn-sm\\678-male.png\" />\n    <Content Include=\"images\\pkmn-sm\\678.png\" />\n    <Content Include=\"images\\pkmn-sm\\679.png\" />\n    <Content Include=\"images\\pkmn-sm\\68.png\" />\n    <Content Include=\"images\\pkmn-sm\\680.png\" />\n    <Content Include=\"images\\pkmn-sm\\681-blade.png\" />\n    <Content Include=\"images\\pkmn-sm\\681-shield.png\" />\n    <Content Include=\"images\\pkmn-sm\\681.png\" />\n    <Content Include=\"images\\pkmn-sm\\682.png\" />\n    <Content Include=\"images\\pkmn-sm\\683.png\" />\n    <Content Include=\"images\\pkmn-sm\\684.png\" />\n    <Content Include=\"images\\pkmn-sm\\685.png\" />\n    <Content Include=\"images\\pkmn-sm\\686.png\" />\n    <Content Include=\"images\\pkmn-sm\\687.png\" />\n    <Content Include=\"images\\pkmn-sm\\688.png\" />\n    <Content Include=\"images\\pkmn-sm\\689.png\" />\n    <Content Include=\"images\\pkmn-sm\\69.png\" />\n    <Content Include=\"images\\pkmn-sm\\690.png\" />\n    <Content Include=\"images\\pkmn-sm\\691.png\" />\n    <Content Include=\"images\\pkmn-sm\\692.png\" />\n    <Content Include=\"images\\pkmn-sm\\693.png\" />\n    <Content Include=\"images\\pkmn-sm\\694.png\" />\n    <Content Include=\"images\\pkmn-sm\\695.png\" />\n    <Content Include=\"images\\pkmn-sm\\696.png\" />\n    <Content Include=\"images\\pkmn-sm\\697.png\" />\n    <Content Include=\"images\\pkmn-sm\\698.png\" />\n    <Content Include=\"images\\pkmn-sm\\699.png\" />\n    <Content Include=\"images\\pkmn-sm\\7.png\" />\n    <Content Include=\"images\\pkmn-sm\\70.png\" />\n    <Content Include=\"images\\pkmn-sm\\700.png\" />\n    <Content Include=\"images\\pkmn-sm\\701.png\" />\n    <Content Include=\"images\\pkmn-sm\\702.png\" />\n    <Content Include=\"images\\pkmn-sm\\703.png\" />\n    <Content Include=\"images\\pkmn-sm\\704.png\" />\n    <Content Include=\"images\\pkmn-sm\\705.png\" />\n    <Content Include=\"images\\pkmn-sm\\706.png\" />\n    <Content Include=\"images\\pkmn-sm\\707.png\" />\n    <Content Include=\"images\\pkmn-sm\\708.png\" />\n    <Content Include=\"images\\pkmn-sm\\709.png\" />\n    <Content Include=\"images\\pkmn-sm\\71.png\" />\n    <Content Include=\"images\\pkmn-sm\\710-average.png\" />\n    <Content Include=\"images\\pkmn-sm\\710-large.png\" />\n    <Content Include=\"images\\pkmn-sm\\710-small.png\" />\n    <Content Include=\"images\\pkmn-sm\\710-super.png\" />\n    <Content Include=\"images\\pkmn-sm\\710.png\" />\n    <Content Include=\"images\\pkmn-sm\\711-average.png\" />\n    <Content Include=\"images\\pkmn-sm\\711-large.png\" />\n    <Content Include=\"images\\pkmn-sm\\711-small.png\" />\n    <Content Include=\"images\\pkmn-sm\\711-super.png\" />\n    <Content Include=\"images\\pkmn-sm\\711.png\" />\n    <Content Include=\"images\\pkmn-sm\\712.png\" />\n    <Content Include=\"images\\pkmn-sm\\713.png\" />\n    <Content Include=\"images\\pkmn-sm\\714.png\" />\n    <Content Include=\"images\\pkmn-sm\\715.png\" />\n    <Content Include=\"images\\pkmn-sm\\716-active.png\" />\n    <Content Include=\"images\\pkmn-sm\\716-neutral.png\" />\n    <Content Include=\"images\\pkmn-sm\\716.png\" />\n    <Content Include=\"images\\pkmn-sm\\717.png\" />\n    <Content Include=\"images\\pkmn-sm\\718-10.png\" />\n    <Content Include=\"images\\pkmn-sm\\718-complete.png\" />\n    <Content Include=\"images\\pkmn-sm\\718.png\" />\n    <Content Include=\"images\\pkmn-sm\\719-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\719.png\" />\n    <Content Include=\"images\\pkmn-sm\\72.png\" />\n    <Content Include=\"images\\pkmn-sm\\720-unbound.png\" />\n    <Content Include=\"images\\pkmn-sm\\720.png\" />\n    <Content Include=\"images\\pkmn-sm\\721.png\" />\n    <Content Include=\"images\\pkmn-sm\\722.png\" />\n    <Content Include=\"images\\pkmn-sm\\723.png\" />\n    <Content Include=\"images\\pkmn-sm\\724.png\" />\n    <Content Include=\"images\\pkmn-sm\\725.png\" />\n    <Content Include=\"images\\pkmn-sm\\726.png\" />\n    <Content Include=\"images\\pkmn-sm\\727.png\" />\n    <Content Include=\"images\\pkmn-sm\\728.png\" />\n    <Content Include=\"images\\pkmn-sm\\729.png\" />\n    <Content Include=\"images\\pkmn-sm\\73.png\" />\n    <Content Include=\"images\\pkmn-sm\\730.png\" />\n    <Content Include=\"images\\pkmn-sm\\731.png\" />\n    <Content Include=\"images\\pkmn-sm\\732.png\" />\n    <Content Include=\"images\\pkmn-sm\\733.png\" />\n    <Content Include=\"images\\pkmn-sm\\734.png\" />\n    <Content Include=\"images\\pkmn-sm\\735.png\" />\n    <Content Include=\"images\\pkmn-sm\\736.png\" />\n    <Content Include=\"images\\pkmn-sm\\737.png\" />\n    <Content Include=\"images\\pkmn-sm\\738.png\" />\n    <Content Include=\"images\\pkmn-sm\\739.png\" />\n    <Content Include=\"images\\pkmn-sm\\74-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\74.png\" />\n    <Content Include=\"images\\pkmn-sm\\740.png\" />\n    <Content Include=\"images\\pkmn-sm\\741-baile.png\" />\n    <Content Include=\"images\\pkmn-sm\\741-pau.png\" />\n    <Content Include=\"images\\pkmn-sm\\741-pom-pom.png\" />\n    <Content Include=\"images\\pkmn-sm\\741-sensu.png\" />\n    <Content Include=\"images\\pkmn-sm\\741.png\" />\n    <Content Include=\"images\\pkmn-sm\\742.png\" />\n    <Content Include=\"images\\pkmn-sm\\743.png\" />\n    <Content Include=\"images\\pkmn-sm\\744.png\" />\n    <Content Include=\"images\\pkmn-sm\\745-dusk.png\" />\n    <Content Include=\"images\\pkmn-sm\\745-midday.png\" />\n    <Content Include=\"images\\pkmn-sm\\745-midnight.png\" />\n    <Content Include=\"images\\pkmn-sm\\745.png\" />\n    <Content Include=\"images\\pkmn-sm\\746-school.png\" />\n    <Content Include=\"images\\pkmn-sm\\746.png\" />\n    <Content Include=\"images\\pkmn-sm\\747.png\" />\n    <Content Include=\"images\\pkmn-sm\\748.png\" />\n    <Content Include=\"images\\pkmn-sm\\749.png\" />\n    <Content Include=\"images\\pkmn-sm\\75-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\75.png\" />\n    <Content Include=\"images\\pkmn-sm\\750.png\" />\n    <Content Include=\"images\\pkmn-sm\\751.png\" />\n    <Content Include=\"images\\pkmn-sm\\752.png\" />\n    <Content Include=\"images\\pkmn-sm\\753.png\" />\n    <Content Include=\"images\\pkmn-sm\\754.png\" />\n    <Content Include=\"images\\pkmn-sm\\755.png\" />\n    <Content Include=\"images\\pkmn-sm\\756.png\" />\n    <Content Include=\"images\\pkmn-sm\\757.png\" />\n    <Content Include=\"images\\pkmn-sm\\758.png\" />\n    <Content Include=\"images\\pkmn-sm\\759.png\" />\n    <Content Include=\"images\\pkmn-sm\\76-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\76.png\" />\n    <Content Include=\"images\\pkmn-sm\\760.png\" />\n    <Content Include=\"images\\pkmn-sm\\761.png\" />\n    <Content Include=\"images\\pkmn-sm\\762.png\" />\n    <Content Include=\"images\\pkmn-sm\\763.png\" />\n    <Content Include=\"images\\pkmn-sm\\764.png\" />\n    <Content Include=\"images\\pkmn-sm\\765.png\" />\n    <Content Include=\"images\\pkmn-sm\\766.png\" />\n    <Content Include=\"images\\pkmn-sm\\767.png\" />\n    <Content Include=\"images\\pkmn-sm\\768.png\" />\n    <Content Include=\"images\\pkmn-sm\\769.png\" />\n    <Content Include=\"images\\pkmn-sm\\77.png\" />\n    <Content Include=\"images\\pkmn-sm\\770.png\" />\n    <Content Include=\"images\\pkmn-sm\\771.png\" />\n    <Content Include=\"images\\pkmn-sm\\772.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-bug.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-dark.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-dragon.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-electric.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-fairy.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-fighting.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-fire.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-flying.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-ghost.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-grass.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-ground.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-ice.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-normal.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-poison.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-psychic.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-rock.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-steel.png\" />\n    <Content Include=\"images\\pkmn-sm\\773-water.png\" />\n    <Content Include=\"images\\pkmn-sm\\773.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-blue.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-green.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-indigo.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-meteor.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-orange.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-red.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-violet.png\" />\n    <Content Include=\"images\\pkmn-sm\\774-yellow.png\" />\n    <Content Include=\"images\\pkmn-sm\\774.png\" />\n    <Content Include=\"images\\pkmn-sm\\775.png\" />\n    <Content Include=\"images\\pkmn-sm\\776.png\" />\n    <Content Include=\"images\\pkmn-sm\\777.png\" />\n    <Content Include=\"images\\pkmn-sm\\778.png\" />\n    <Content Include=\"images\\pkmn-sm\\779.png\" />\n    <Content Include=\"images\\pkmn-sm\\78.png\" />\n    <Content Include=\"images\\pkmn-sm\\780.png\" />\n    <Content Include=\"images\\pkmn-sm\\781.png\" />\n    <Content Include=\"images\\pkmn-sm\\782.png\" />\n    <Content Include=\"images\\pkmn-sm\\783.png\" />\n    <Content Include=\"images\\pkmn-sm\\784.png\" />\n    <Content Include=\"images\\pkmn-sm\\785.png\" />\n    <Content Include=\"images\\pkmn-sm\\786.png\" />\n    <Content Include=\"images\\pkmn-sm\\787.png\" />\n    <Content Include=\"images\\pkmn-sm\\788.png\" />\n    <Content Include=\"images\\pkmn-sm\\789.png\" />\n    <Content Include=\"images\\pkmn-sm\\79-galar.png\" />\n    <Content Include=\"images\\pkmn-sm\\79.png\" />\n    <Content Include=\"images\\pkmn-sm\\790.png\" />\n    <Content Include=\"images\\pkmn-sm\\791.png\" />\n    <Content Include=\"images\\pkmn-sm\\792.png\" />\n    <Content Include=\"images\\pkmn-sm\\793.png\" />\n    <Content Include=\"images\\pkmn-sm\\794.png\" />\n    <Content Include=\"images\\pkmn-sm\\795.png\" />\n    <Content Include=\"images\\pkmn-sm\\796.png\" />\n    <Content Include=\"images\\pkmn-sm\\797.png\" />\n    <Content Include=\"images\\pkmn-sm\\798.png\" />\n    <Content Include=\"images\\pkmn-sm\\799.png\" />\n    <Content Include=\"images\\pkmn-sm\\8.png\" />\n    <Content Include=\"images\\pkmn-sm\\80-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\80.png\" />\n    <Content Include=\"images\\pkmn-sm\\800-dawn.png\" />\n    <Content Include=\"images\\pkmn-sm\\800-dusk.png\" />\n    <Content Include=\"images\\pkmn-sm\\800-ultra.png\" />\n    <Content Include=\"images\\pkmn-sm\\800.png\" />\n    <Content Include=\"images\\pkmn-sm\\801-original.png\" />\n    <Content Include=\"images\\pkmn-sm\\801.png\" />\n    <Content Include=\"images\\pkmn-sm\\802.png\" />\n    <Content Include=\"images\\pkmn-sm\\803.png\" />\n    <Content Include=\"images\\pkmn-sm\\804.png\" />\n    <Content Include=\"images\\pkmn-sm\\805.png\" />\n    <Content Include=\"images\\pkmn-sm\\806.png\" />\n    <Content Include=\"images\\pkmn-sm\\807.png\" />\n    <Content Include=\"images\\pkmn-sm\\808.png\" />\n    <Content Include=\"images\\pkmn-sm\\809.png\" />\n    <Content Include=\"images\\pkmn-sm\\81.png\" />\n    <Content Include=\"images\\pkmn-sm\\82.png\" />\n    <Content Include=\"images\\pkmn-sm\\83.png\" />\n    <Content Include=\"images\\pkmn-sm\\84.png\" />\n    <Content Include=\"images\\pkmn-sm\\85.png\" />\n    <Content Include=\"images\\pkmn-sm\\86.png\" />\n    <Content Include=\"images\\pkmn-sm\\87.png\" />\n    <Content Include=\"images\\pkmn-sm\\88-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\88.png\" />\n    <Content Include=\"images\\pkmn-sm\\89-alola.png\" />\n    <Content Include=\"images\\pkmn-sm\\89.png\" />\n    <Content Include=\"images\\pkmn-sm\\9-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\9.png\" />\n    <Content Include=\"images\\pkmn-sm\\90.png\" />\n    <Content Include=\"images\\pkmn-sm\\91.png\" />\n    <Content Include=\"images\\pkmn-sm\\92.png\" />\n    <Content Include=\"images\\pkmn-sm\\93.png\" />\n    <Content Include=\"images\\pkmn-sm\\94-mega.png\" />\n    <Content Include=\"images\\pkmn-sm\\94.png\" />\n    <Content Include=\"images\\pkmn-sm\\95.png\" />\n    <Content Include=\"images\\pkmn-sm\\96.png\" />\n    <Content Include=\"images\\pkmn-sm\\97.png\" />\n    <Content Include=\"images\\pkmn-sm\\98.png\" />\n    <Content Include=\"images\\pkmn-sm\\99.png\" />\n    <Content Include=\"images\\ribbon-sm\\3001.png\" />\n    <Content Include=\"images\\ribbon-sm\\3002.png\" />\n    <Content Include=\"images\\ribbon-sm\\3003.png\" />\n    <Content Include=\"images\\ribbon-sm\\3004.png\" />\n    <Content Include=\"images\\ribbon-sm\\3005.png\" />\n    <Content Include=\"images\\ribbon-sm\\3006.png\" />\n    <Content Include=\"images\\ribbon-sm\\3007.png\" />\n    <Content Include=\"images\\ribbon-sm\\3008.png\" />\n    <Content Include=\"images\\ribbon-sm\\3009.png\" />\n    <Content Include=\"images\\ribbon-sm\\3010.png\" />\n    <Content Include=\"images\\ribbon-sm\\3011.png\" />\n    <Content Include=\"images\\ribbon-sm\\3012.png\" />\n    <Content Include=\"images\\ribbon-sm\\3013.png\" />\n    <Content Include=\"images\\ribbon-sm\\3014.png\" />\n    <Content Include=\"images\\ribbon-sm\\3015.png\" />\n    <Content Include=\"images\\ribbon-sm\\3016.png\" />\n    <Content Include=\"images\\ribbon-sm\\3017.png\" />\n    <Content Include=\"images\\ribbon-sm\\3018.png\" />\n    <Content Include=\"images\\ribbon-sm\\3019.png\" />\n    <Content Include=\"images\\ribbon-sm\\3020.png\" />\n    <Content Include=\"images\\ribbon-sm\\3021.png\" />\n    <Content Include=\"images\\ribbon-sm\\3022.png\" />\n    <Content Include=\"images\\ribbon-sm\\3023.png\" />\n    <Content Include=\"images\\ribbon-sm\\3024.png\" />\n    <Content Include=\"images\\ribbon-sm\\3025.png\" />\n    <Content Include=\"images\\ribbon-sm\\3026.png\" />\n    <Content Include=\"images\\ribbon-sm\\3027.png\" />\n    <Content Include=\"images\\ribbon-sm\\3028.png\" />\n    <Content Include=\"images\\ribbon-sm\\3029.png\" />\n    <Content Include=\"images\\ribbon-sm\\3030.png\" />\n    <Content Include=\"images\\ribbon-sm\\3031.png\" />\n    <Content Include=\"images\\ribbon-sm\\3032.png\" />\n    <Content Include=\"images\\ribbon-sm\\4001.png\" />\n    <Content Include=\"images\\ribbon-sm\\4002.png\" />\n    <Content Include=\"images\\ribbon-sm\\4003.png\" />\n    <Content Include=\"images\\ribbon-sm\\4004.png\" />\n    <Content Include=\"images\\ribbon-sm\\4005.png\" />\n    <Content Include=\"images\\ribbon-sm\\4006.png\" />\n    <Content Include=\"images\\ribbon-sm\\4007.png\" />\n    <Content Include=\"images\\ribbon-sm\\4008.png\" />\n    <Content Include=\"images\\ribbon-sm\\4009.png\" />\n    <Content Include=\"images\\ribbon-sm\\4010.png\" />\n    <Content Include=\"images\\ribbon-sm\\4011.png\" />\n    <Content Include=\"images\\ribbon-sm\\4012.png\" />\n    <Content Include=\"images\\ribbon-sm\\4013.png\" />\n    <Content Include=\"images\\ribbon-sm\\4014.png\" />\n    <Content Include=\"images\\ribbon-sm\\4015.png\" />\n    <Content Include=\"images\\ribbon-sm\\4016.png\" />\n    <Content Include=\"images\\ribbon-sm\\4017.png\" />\n    <Content Include=\"images\\ribbon-sm\\4018.png\" />\n    <Content Include=\"images\\ribbon-sm\\4019.png\" />\n    <Content Include=\"images\\ribbon-sm\\4020.png\" />\n    <Content Include=\"images\\ribbon-sm\\4021.png\" />\n    <Content Include=\"images\\ribbon-sm\\4022.png\" />\n    <Content Include=\"images\\ribbon-sm\\4023.png\" />\n    <Content Include=\"images\\ribbon-sm\\4024.png\" />\n    <Content Include=\"images\\ribbon-sm\\4025.png\" />\n    <Content Include=\"images\\ribbon-sm\\4026.png\" />\n    <Content Include=\"images\\ribbon-sm\\4027.png\" />\n    <Content Include=\"images\\ribbon-sm\\4028.png\" />\n    <Content Include=\"images\\ribbon-sm\\4029.png\" />\n    <Content Include=\"images\\ribbon-sm\\4030.png\" />\n    <Content Include=\"images\\ribbon-sm\\4031.png\" />\n    <Content Include=\"images\\ribbon-sm\\4032.png\" />\n    <Content Include=\"images\\ribbon-sm\\4033.png\" />\n    <Content Include=\"images\\ribbon-sm\\4034.png\" />\n    <Content Include=\"images\\ribbon-sm\\4035.png\" />\n    <Content Include=\"images\\ribbon-sm\\4036.png\" />\n    <Content Include=\"images\\ribbon-sm\\4037.png\" />\n    <Content Include=\"images\\ribbon-sm\\4038.png\" />\n    <Content Include=\"images\\ribbon-sm\\4039.png\" />\n    <Content Include=\"images\\ribbon-sm\\4040.png\" />\n    <Content Include=\"images\\ribbon-sm\\4041.png\" />\n    <Content Include=\"images\\ribbon-sm\\4042.png\" />\n    <Content Include=\"images\\ribbon-sm\\4043.png\" />\n    <Content Include=\"images\\ribbon-sm\\4044.png\" />\n    <Content Include=\"images\\ribbon-sm\\4045.png\" />\n    <Content Include=\"images\\ribbon-sm\\4046.png\" />\n    <Content Include=\"images\\ribbon-sm\\4047.png\" />\n    <Content Include=\"images\\ribbon-sm\\4048.png\" />\n    <Content Include=\"images\\ribbon-sm\\5001.png\" />\n    <Content Include=\"images\\ribbon-sm\\5002.png\" />\n    <Content Include=\"images\\ribbon-sm\\5003.png\" />\n    <Content Include=\"images\\ribbon-sm\\5004.png\" />\n    <Content Include=\"images\\ribbon-sm\\5005.png\" />\n    <Content Include=\"images\\ribbon-sm\\5006.png\" />\n    <Content Include=\"images\\ribbon-sm\\5007.png\" />\n    <Content Include=\"images\\ribbon-sm\\5008.png\" />\n    <Content Include=\"images\\ribbon-sm\\5009.png\" />\n    <Content Include=\"images\\ver-icon\\10.png\" />\n    <Content Include=\"images\\ver-icon\\11.png\" />\n    <Content Include=\"images\\ver-icon\\12.png\" />\n    <Content Include=\"images\\ver-icon\\20.png\" />\n    <Content Include=\"images\\ver-icon\\21.png\" />\n    <Content Include=\"images\\ver-icon\\22.png\" />\n    <Content Include=\"images\\ver-icon\\23.png\" />\n    <Content Include=\"images\\ver-icon\\7.png\" />\n    <Content Include=\"images\\ver-icon\\8.png\" />\n    <Content Include=\"pad.bin\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"scripts\\form.js\" />\n    <Content Include=\"scripts\\jquery-1.11.1.min.js\" />\n    <Content Include=\"scripts\\jquery-ui.min.js\" />\n    <Content Include=\"scripts\\retina.js\" />\n    <Content Include=\"test\\BoxUp.aspx\" />\n    <Content Include=\"test\\Decode.aspx\" />\n    <Content Include=\"test\\Gsid.aspx\" />\n    <Content Include=\"test\\NameDecode.aspx\" />\n    <Content Include=\"test\\NameEncode.aspx\" />\n    <Content Include=\"test\\VideoId.aspx\" />\n    <Content Include=\"test\\Web.config\" />\n    <Content Include=\"masters\\LeftColumn.master\" />\n    <Content Include=\"masters\\MasterPage.master\" />\n    <Content Include=\"masters\\ThreeColumn.master\" />\n    <Content Include=\"admin\\Web.config\" />\n    <None Include=\"admin\\Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"admin\\Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <Content Include=\"packages.config\" />\n    <Content Include=\"controls\\PokemonSource.ashx\" />\n    <None Include=\"Properties\\PublishProfiles\\Public.pubxml\" />\n    <Content Include=\"Web.config\">\n      <SubType>Designer</SubType>\n    </Content>\n    <None Include=\"Web.Public.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"admin\\AddBoxes.aspx.cs\">\n      <DependentUpon>AddBoxes.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"admin\\AddBoxes.aspx.designer.cs\">\n      <DependentUpon>AddBoxes.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"admin\\AddDressup.aspx.cs\">\n      <DependentUpon>AddDressup.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"admin\\AddDressup.aspx.designer.cs\">\n      <DependentUpon>AddDressup.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"admin\\AddMusical.aspx.cs\">\n      <DependentUpon>AddMusical.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"admin\\AddMusical.aspx.designer.cs\">\n      <DependentUpon>AddMusical.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"battlevideo\\Default.aspx.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"battlevideo\\Default.aspx.designer.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"controls\\DnsAddress.ascx.cs\">\n      <DependentUpon>DnsAddress.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"controls\\DnsAddress.ascx.designer.cs\">\n      <DependentUpon>DnsAddress.ascx</DependentUpon>\n    </Compile>\n    <Compile Include=\"controls\\ForeignLookup.ascx.cs\">\n      <DependentUpon>ForeignLookup.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"controls\\ForeignLookup.ascx.designer.cs\">\n      <DependentUpon>ForeignLookup.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"controls\\LabelTextBox.ascx.cs\">\n      <DependentUpon>LabelTextBox.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"controls\\LabelTextBox.ascx.designer.cs\">\n      <DependentUpon>LabelTextBox.ascx</DependentUpon>\n    </Compile>\n    <Compile Include=\"controls\\PokemonPicker.ascx.cs\">\n      <DependentUpon>PokemonPicker.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"controls\\PokemonPicker.ascx.designer.cs\">\n      <DependentUpon>PokemonPicker.ascx</DependentUpon>\n    </Compile>\n    <Compile Include=\"controls\\PokemonSource.ashx.cs\">\n      <DependentUpon>PokemonSource.ashx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Default.aspx.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Default.aspx.designer.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"gts\\Default.aspx.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"gts\\Default.aspx.designer.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"gts\\Pokemon.aspx.cs\">\n      <DependentUpon>Pokemon.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"gts\\Pokemon.aspx.designer.cs\">\n      <DependentUpon>Pokemon.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"masters\\LeftColumn.master.cs\">\n      <DependentUpon>LeftColumn.master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"masters\\LeftColumn.master.designer.cs\">\n      <DependentUpon>LeftColumn.master</DependentUpon>\n    </Compile>\n    <Compile Include=\"masters\\MasterPage.master.cs\">\n      <DependentUpon>MasterPage.master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"masters\\MasterPage.master.designer.cs\">\n      <DependentUpon>MasterPage.master</DependentUpon>\n    </Compile>\n    <Compile Include=\"masters\\ThreeColumn.master.cs\">\n      <DependentUpon>ThreeColumn.master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"masters\\ThreeColumn.master.designer.cs\">\n      <DependentUpon>ThreeColumn.master</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RoomLeaders.aspx.cs\">\n      <DependentUpon>RoomLeaders.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"RoomLeaders.aspx.designer.cs\">\n      <DependentUpon>RoomLeaders.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"src\\AppStateHelper.cs\" />\n    <Compile Include=\"src\\Common.cs\" />\n    <Compile Include=\"src\\DependencyNode.cs\" />\n    <Compile Include=\"src\\ForeignLookupSource.cs\" />\n    <Compile Include=\"src\\HeaderColour.cs\" />\n    <Compile Include=\"src\\OnceTemplate.cs\" />\n    <Compile Include=\"src\\RequireCss.cs\" />\n    <Compile Include=\"src\\RequireLinkBase.cs\" />\n    <Compile Include=\"src\\RequireScript.cs\" />\n    <Compile Include=\"src\\RetinaImage.cs\" />\n    <Compile Include=\"src\\RetinaImageBase.cs\" />\n    <Compile Include=\"src\\WebException.cs\" />\n    <Compile Include=\"src\\WebFormat.cs\" />\n    <Compile Include=\"test\\BoxUp.aspx.cs\">\n      <DependentUpon>BoxUp.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"test\\BoxUp.aspx.designer.cs\">\n      <DependentUpon>BoxUp.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"test\\Decode.aspx.cs\">\n      <DependentUpon>Decode.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"test\\Decode.aspx.designer.cs\">\n      <DependentUpon>Decode.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"test\\Gsid.aspx.cs\">\n      <DependentUpon>Gsid.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"test\\Gsid.aspx.designer.cs\">\n      <DependentUpon>Gsid.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"test\\NameDecode.aspx.cs\">\n      <DependentUpon>NameDecode.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"test\\NameDecode.aspx.designer.cs\">\n      <DependentUpon>NameDecode.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"test\\NameEncode.aspx.cs\">\n      <DependentUpon>NameEncode.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"test\\NameEncode.aspx.designer.cs\">\n      <DependentUpon>NameEncode.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"test\\VideoId.aspx.cs\">\n      <DependentUpon>VideoId.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"test\\VideoId.aspx.designer.cs\">\n      <DependentUpon>VideoId.aspx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"RoomLeaders.aspx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\GamestatsBase\\GamestatsBase\\GamestatsBase.csproj\">\n      <Project>{2d667f5b-f10d-44e2-93f6-dd555d9ee7df}</Project>\n      <Name>GamestatsBase</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\library\\Library.csproj\">\n      <Project>{408efc7e-c6b0-4160-8628-2679e34385ce}</Project>\n      <Name>Library</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>50689</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:50661/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  }
]