001package com.fs.starfarer.api.impl.campaign.procgen;
002
003import java.util.ArrayList;
004import java.util.Collection;
005import java.util.HashMap;
006import java.util.HashSet;
007import java.util.LinkedHashSet;
008import java.util.List;
009import java.util.Map;
010import java.util.Random;
011import java.util.Set;
012
013import com.fs.starfarer.api.Global;
014import com.fs.starfarer.api.util.WeightedRandomPicker;
015
016public class MarkovNames {
017
018        public static String UNUSED = "*";
019        public static String START = "@";
020        public static String END = "#";
021        
022        public static float [][] prob;
023
024        public static String alphabet = UNUSED + START + END + "abcdefghijklmnopqrstuvwxyz-' ";
025        public static Map<String, Integer> stringToIndex = new HashMap<String, Integer>();
026        public static Map<Integer, String> indexToString = new HashMap<Integer, String>();
027        public static int order = 2;
028        
029        public static void loadIfNeeded() {
030                if (prob == null) {
031                        List<String> names = new ArrayList<String>();
032                        Collection<NameGenData> specs = Global.getSettings().getAllSpecs(NameGenData.class);
033                        for (NameGenData spec : specs) {
034                                //if ((float) Math.random() > 0.1f) continue;
035                                names.add(spec.getName());
036                        }
037                        MarkovNames.load(names, 3);
038                }
039        }
040        
041        public static void load(List<String> names, int order) {
042                MarkovNames.order = order;
043                clear();
044                
045                List<String> all = new ArrayList<String>();
046                for (int i = 1; i < alphabet.length(); i++) {
047                        String s1 = "" + alphabet.charAt(i);
048                        all.add(s1);
049                        for (int j = 1; j < alphabet.length(); j++) {
050                                String s2 = "" + alphabet.charAt(j);
051                                all.add(s1 + s2);
052                                
053                                if (order == 3) {
054                                        for (int k = 1; k < alphabet.length(); k++) {
055                                                String s3 = "" + alphabet.charAt(k);
056                                                all.add(s1 + s2 + s3);
057                                        }
058                                }
059                        }
060                }
061                for (String str : all) {
062                        Integer index = computeIndex(str);
063                        stringToIndex.put(str, index);
064                        indexToString.put(index, str);
065                }
066                
067                int size = (int) Math.pow(alphabet.length() + 1, order) + (int) Math.pow(alphabet.length(), order - 1);
068                
069                prob = new float [size][alphabet.length()];
070                
071                
072                for (String name : names) {
073                        if (name.contains("$")) continue;
074                        if (containsWord(name, "field")) continue;
075                        if (containsWord(name, "disk")) continue;
076                        if (containsWord(name, "asteroid")) continue;
077                        if (containsWord(name, "nebula")) continue;
078                        if (containsWord(name, "magnetic")) continue;
079                        if (containsWord(name, "star")) continue;
080                        if (containsWord(name, "planet")) continue;
081                        if (containsWord(name, "world")) continue;
082                        load(name);
083                }
084                
085                int x = 0;
086        }
087        
088        public static void load(String name) {
089                name = START + name + END;
090                for (int i = 0; i < name.length() - 1; i++) {
091                        String curr = "" + name.charAt(i);
092                        if (i > 0) curr = "" + name.charAt(i - 1) + curr;
093                        if (i > 1 && order == 3) curr = "" + name.charAt(i - 2) + curr;
094                        
095                        String next = "" + name.charAt(i + 1);
096                        
097                        int x = getIndex(curr.toLowerCase());
098                        int y = getIndex(next.toLowerCase());
099                        
100                        prob[x][y]++;
101                }
102        }
103        
104        public static boolean sanityCheck(String name) {
105                if (name.length() <= 2) return false;
106                if (name.length() > 20) return false;
107                
108                int maxUnbroken = 0;
109                int currUnbroken = 0;
110                int numSpaces = 0;
111                for (int i = 0; i < name.length(); i++) {
112                        String curr = "" + name.charAt(i);
113                        if (" ".equals(curr) || "-".equals(curr)) {
114                                currUnbroken = 0;
115                        }
116                        if (" ".equals(curr)) {
117                                numSpaces++;
118                        }
119                        
120                        currUnbroken++;
121                        if (currUnbroken > maxUnbroken) {
122                                maxUnbroken = currUnbroken;
123                        }
124                }
125                
126                if (numSpaces >= 2) return false;
127                if (maxUnbroken >= 12) return false;
128                
129                if (containsBad(name)) return false;
130                
131                return true;
132        }
133        
134        public static class MarkovNameResult {
135                public String name;
136                public double probability;
137        }
138        
139        public static MarkovNameResult generate(Random random) {
140                if (prob == null) return null;
141                if (random == null) random = new Random();
142                
143                double probability = 1f;
144                
145                String name = "";
146                String add = START;
147                while (!END.equals(add) && add != null) {
148                        name += add;
149                        
150                        String curr = add;
151                        if (name.length() > 1) {
152                                curr = "" + name.charAt(name.length() - 2) + curr;
153                        }
154                        if (name.length() > 2 && order == 3) {
155                                curr = "" + name.charAt(name.length() - 3) + curr;
156                        }
157                        
158                        WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>(random);
159                        int index = getIndex(curr);
160                        if (index >= 0) {
161                                for (int i = 0; i < prob[index].length; i++) {
162                                        float weight = prob[index][i];
163                                        if (weight > 0) {
164                                                String next = getString(i);
165                                                picker.add(next, weight);
166                                        }
167                                }
168                        }
169                        
170                        add = picker.pick();
171                        if (add != null) {
172                                int pickIndex = picker.getItems().indexOf(add);
173                                if (pickIndex >= 0) {
174                                        probability *= (double) (picker.getWeight(pickIndex) / picker.getTotal());
175                                }
176                        }
177                        
178                        
179                        if (name.length() > 50) break;
180                }
181                if (add != null) name += add;
182                
183                
184                if (name.startsWith(START)) name = name.substring(1);
185                if (name.endsWith(END)) name = name.substring(0, name.length() - 1);
186                
187                StringBuffer result = new StringBuffer();
188                String prev = null;
189                for (int i = 0; i < name.length(); i++) {
190                        String curr = "" + name.charAt(i);
191                        if (" ".equals(prev) || "-".equals(prev) || prev == null) {
192                                curr = curr.toUpperCase();
193                        }
194                        result.append(curr);
195                        prev = curr;
196                }
197                
198                name = result.toString();
199                if (!sanityCheck(name)) name = null;
200                
201                if (name == null) return null;
202                
203                MarkovNameResult r = new MarkovNameResult();
204                r.name = name;
205                r.probability = probability * 1000000;
206                return r;
207        }
208        
209        public static void clear() {
210                prob = null;
211                stringToIndex.clear();
212                indexToString.clear();
213        }
214        
215        public static Integer getIndex(String str) {
216                if (!stringToIndex.containsKey(str)) {
217                        return alphabet.indexOf(" ");
218                }
219                return stringToIndex.get(str);
220        }
221        public static String getString(Integer index) {
222                if (!indexToString.containsKey(index)) {
223                        return " ";
224                }
225                return indexToString.get(index);
226        }
227        
228        public static int computeIndex(String str) {
229                int index = 0;
230                int radix = alphabet.length();
231                
232                for (int i = 0; i < str.length(); i++) {
233                        int val = alphabet.indexOf("" + str.charAt(i));
234                        if (val < 0) continue;
235                        
236                        index += val * Math.pow(radix, i);
237                        radix++;
238                }
239                
240                return index;
241        }
242        
243        
244        public static void main(String[] args) {
245                List<String> names = createNames();
246                load(names, 3);
247                
248                
249//              for (int i = 0; i < 1000; i++) {
250//                      MarkovNameResult r = generate(null);
251//                      //if (r != null && r.name != null && r.probability > 1000 && !names.contains(r.name) && r.name.length() > 4) {
252//                      if (r != null && r.name != null) {
253//                              System.out.println(r.name + "\t\t\t\t(" + (int) r.probability + ")");
254//                      }
255//              }
256                Set<String> generated = new LinkedHashSet<String>();
257                for (int i = 0; i < 20000; i++) {
258                        MarkovNameResult r = MarkovNames.generate(null);
259                        if (r == null) continue;
260                        if (r.name == null) continue;
261                        if (names.contains(r.name)) continue;
262                        if (generated.contains(r.name)) continue;
263                        
264                        System.out.println(r.name);
265                        generated.add(r.name);
266                }
267        }
268        
269        public static boolean containsWord(String in, String word) {
270                String [] split = in.split(" |-");
271                for (String curr : split) {
272                        if (curr.toLowerCase().equals(word.toLowerCase())) {
273                                return true;
274                        }
275                }
276                return false;
277        }
278                
279        public static boolean containsBad(String in) {
280                if (blocked.contains(in.toLowerCase())) return true;
281                
282                String [] split = in.split(" |-");
283                for (String curr : split) {
284                        if (badWords.contains(curr.toLowerCase())) return true;
285                }
286                
287                boolean allBlocked = true;
288                for (String curr : split) {
289                        if (!blocked.contains(curr.toLowerCase())) {
290                                allBlocked = false;
291                                break;
292                        }
293                }
294                if (allBlocked) return true;
295                
296                return false;
297        }
298        
299        public static Set<String> badWords = new HashSet<String>();
300        public static Set<String> blocked = new HashSet<String>();
301        static {
302                blocked = new HashSet<String>();
303                blocked.add("yes");
304                blocked.add("the");
305                blocked.add("new");
306                blocked.add("old");
307                blocked.add("and");
308                blocked.add("but");
309                blocked.add("for");
310                blocked.add("all");
311                blocked.add("any");
312                blocked.add("are");
313                blocked.add("ask");
314                blocked.add("etc");
315                blocked.add("far");
316                blocked.add("few");
317                blocked.add("get");
318                blocked.add("got");
319                blocked.add("him");
320                blocked.add("his");
321                blocked.add("how");
322                blocked.add("inc");
323                blocked.add("may");
324                blocked.add("non");
325                blocked.add("nor");
326                blocked.add("not");
327                blocked.add("now");
328                blocked.add("off");
329                blocked.add("one");
330                blocked.add("our");
331                blocked.add("out");
332                blocked.add("own");
333                blocked.add("per");
334                blocked.add("que");
335                blocked.add("saw");
336                blocked.add("say");
337                blocked.add("sub");
338                blocked.add("too");
339                blocked.add("try");
340                blocked.add("two");
341                blocked.add("use");
342                blocked.add("lay");
343                blocked.add("yet");
344                blocked.add("you");
345                
346                badWords = new HashSet<String>();
347                badWords.add("fuck");
348                badWords.add("fucks");
349                badWords.add("fucker");
350                badWords.add("fucking");
351                badWords.add("fucked");
352                badWords.add("shit");
353                badWords.add("shits");
354                badWords.add("cunt");
355                badWords.add("cunts");
356                badWords.add("bitch");
357                badWords.add("bitches");
358                badWords.add("ass");
359                badWords.add("arse");
360                badWords.add("arses");
361                badWords.add("asses");
362                badWords.add("dick");
363                badWords.add("dicks");
364                badWords.add("cock");
365                badWords.add("cocks");
366                badWords.add("nigga");
367                badWords.add("niggas");
368                badWords.add("nigger");
369                badWords.add("niggers");
370                badWords.add("shitass");
371                badWords.add("whore");
372                badWords.add("twat");
373                badWords.add("twats");
374                badWords.add("pussy");
375                badWords.add("pussys");
376                badWords.add("pussies");
377                badWords.add("butt");
378                badWords.add("butts");
379                badWords.add("anus");
380        }
381        
382        
383        public static List<String> createNames() {
384                List<String> names = new ArrayList<String>();
385                
386                names.add("Aelurus");
387                names.add("Hera");
388                names.add("Ares");
389                names.add("Deimos");
390                names.add("Phobos");
391                names.add("Kydoimos");
392                names.add("Makhai");
393                names.add("Mysminai");
394                names.add("Polemos");
395                names.add("Hebe");
396                names.add("Alexiares");
397                names.add("Anicetus");
398                names.add("Eris");
399                names.add("Dysnomia");
400                names.add("Lethe");
401                names.add("Limos");
402                names.add("Algos");
403                names.add("Neikea");
404                names.add("Eleuthia");
405                names.add("Enyo");
406                names.add("Enyalius");
407                names.add("Baraq");
408                names.add("Zumurrud");
409                names.add("Lithos");
410                names.add("Temblor");
411                names.add("Baal");
412                names.add("Bel");
413                names.add("Haddu");
414                names.add("Ishkur");
415                names.add("Enki");
416                names.add("Dilmun");
417                names.add("Ki");
418                names.add("Nintul");
419                names.add("Ninsutu");
420                names.add("Ninkasi");
421                names.add("Dazimua");
422                names.add("Enshagag");
423                names.add("Nintu");
424                names.add("Ninsar");
425                names.add("Ninkurra");
426                names.add("Uttu");
427                names.add("Isimud");
428                names.add("Ishtar");
429                names.add("Dumuzi");
430                names.add("Gudam");
431                names.add("Galatura");
432                names.add("Kurjara");
433                names.add("Dagon");
434                names.add("Belatu");
435                names.add("Godiva");
436                names.add("Great Dismal");
437                names.add("Herzog");
438                names.add("Pandemonium");
439                names.add("Mulciber");
440                names.add("Mammon");
441                names.add("Leviathon");
442                names.add("Asmodeus");
443                names.add("Belphegor");
444                names.add("Belial");
445                names.add("Berith");
446                names.add("Ashtoreth");
447                names.add("Sidon");
448                names.add("Galera");
449                names.add("Moloch");
450                names.add("Utopia");
451                names.add("Azathoth");
452                names.add("Abaddon");
453                names.add("Dis");
454                names.add("Medea");
455                names.add("Crucible");
456                names.add("Wyrm");
457                names.add("Dantalion");
458                names.add("Humility");
459                names.add("Romance");
460                names.add("Wan");
461                names.add("Leeloo");
462                names.add("Zhu Que");
463                names.add("Ada");
464                names.add("Rukh");
465                names.add("Zenobia");
466                names.add("Labyrinth");
467                names.add("Genbu");
468                names.add("Qilin");
469                names.add("Black Emperor");
470                names.add("Myrkheim");
471                names.add("Idunn");
472                names.add("Draupnir");
473                names.add("Ivaldi");
474                names.add("Brokr");
475                names.add("Gadfly");
476                names.add("Eitri");
477                names.add("Gullinbursti");
478                names.add("Habrok");
479                names.add("Jotunheim");
480                names.add("Greip");
481                names.add("Gjalp");
482                names.add("Bardarbunga");
483                names.add("Thrivaldi");
484                names.add("Zosimos");
485                names.add("$parent's Wheel");
486                names.add("Ezekial's Wheel");
487                names.add("Arc of $parent");
488                names.add("$parent's Wreath");
489                names.add("Torq of $parent");
490                names.add("Crown of $parent");
491                names.add("Ring System");
492                names.add("Accretion Disk");
493                names.add("The Ouroboros");
494                names.add("$parent's Girdle");
495                names.add("Iron Stream");
496                names.add("Stone River");
497                names.add("The Glittering Band");
498                names.add("Asteroid Belt");
499                names.add("Stone Conclave");
500                names.add("Freyja");
501                names.add("Brisingamen");
502                names.add("Wotan");
503                names.add("Draupnir");
504                names.add("Hlidskjalf");
505                names.add("Ring of Gyges");
506                names.add("Fenrir");
507                names.add("Gjoll");
508                names.add("Sledovik");
509                names.add("Sessho-seki");
510                names.add("Arkady");
511                names.add("Rocannon's World");
512                names.add("Baslag");
513                names.add("Boone");
514                names.add("Zakalwe");
515                names.add("Darkense");
516                names.add("Livueta");
517                names.add("Elethiomel ");
518                names.add("Staberinde");
519                names.add("Cache");
520                names.add("Ged");
521                names.add("Palaver");
522                names.add("Rigamarole");
523                names.add("Scrimshaw");
524                names.add("Hadria");
525                names.add("Rosas");
526                names.add("Orobas");
527                names.add("Murmur");
528                names.add("Asmoday");
529                names.add("Marax");
530                names.add("Amon");
531                names.add("Komarov");
532                names.add("Nibiru");
533                names.add("Brahe");
534                names.add("Perseus");
535                names.add("Cerenkov");
536                names.add("Cygnus");
537                names.add("Saurus");
538                names.add("Pisces");
539                names.add("Carina");
540                names.add("Draco");
541                names.add("Elysia");
542                names.add("Irkalla");
543                names.add("Meropis");
544                names.add("Nysa");
545                names.add("Paititi");
546                names.add("Suddene");
547                names.add("Yomi");
548                names.add("Baltia");
549                names.add("Union");
550                names.add("Jeremiah's World");
551                names.add("Strathcona");
552                names.add("Tamsin");
553                names.add("Kete");
554                names.add("Hrosa");
555                names.add("Aether");
556                names.add("Eros");
557                names.add("Asphodel");
558                names.add("Erebus");
559                names.add("Nyx");
560                names.add("Acheron");
561                names.add("Kharon");
562                names.add("Tartarus");
563                names.add("Khthon");
564                names.add("Bothros");
565                names.add("Megaron");
566                names.add("Thanatos");
567                names.add("Hypnos");
568                names.add("Morpheus");
569                names.add("Phobetor");
570                names.add("Phantasos");
571                names.add("Oneiroi");
572                names.add("Lethe");
573                names.add("Cocytus");
574                names.add("Oceanus Nebula");
575                names.add("Elysion");
576                names.add("Minos");
577                names.add("Khora");
578                names.add("Mnemosyne");
579                names.add("Calliope");
580                names.add("Myhdon");
581                names.add("Edonus");
582                names.add("Biston");
583                names.add("Kleio");
584                names.add("Hyacinth ");
585                names.add("Euterpe");
586                names.add("Rhesus");
587                names.add("Erato");
588                names.add("Melpomene");
589                names.add("Polymnia");
590                names.add("Aglaope");
591                names.add("Leucosia");
592                names.add("Ligeia");
593                names.add("Molpe");
594                names.add("Pathenope");
595                names.add("Peisinoe");
596                names.add("Thelxiope");
597                names.add("Terpsichore");
598                names.add("Thalia");
599                names.add("The Korybantes");
600                names.add("Urania");
601                names.add("Linus");
602                names.add("Dia");
603                names.add("Helicon");
604                names.add("Aoide");
605                names.add("Melete");
606                names.add("Mneme");
607                names.add("Parnassos");
608                names.add("The Banshee");
609                names.add("The Sirens");
610                names.add("Orpheus");
611                names.add("Tragedy");
612                names.add("The Kuretes");
613                names.add("Mangindusa");
614                names.add("Bugawasin");
615                names.add("Polo");
616                names.add("Sedumunadoc");
617                names.add("Tabiacoud");
618                names.add("Anggugru");
619                names.add("Balugu");
620                names.add("Kalabagang");
621                names.add("Taliyakad");
622                names.add("Langit");
623                names.add("Basad");
624                names.add("Sidpan");
625                names.add("Dibuwat");
626                names.add("Kavacha");
627                names.add("Orm");
628                names.add("Ogion");
629                names.add("Ring of Morred");
630                names.add("Selidor");
631                names.add("Nug");
632                names.add("Yeg");
633                names.add("Rhogog");
634                names.add("Hastur");
635                names.add("Yig");
636                names.add("Rama");
637                names.add("Hanuman");
638                names.add("Vanara");
639                names.add("Surasa");
640                names.add("Vasuki");
641                names.add("The Nagas");
642                names.add("Kaliya");
643                names.add("Manasa");
644                names.add("Bakunawa");
645                names.add("Karkotaka");
646                names.add("Mucalinda");
647                names.add("Padmavati");
648                names.add("Pearl River");
649                names.add("Zmey");
650                names.add("Lamya");
651                names.add("Smok");
652                names.add("Stygia");
653                names.add("Cimmeria");
654                names.add("Magen");
655                names.add("Zirnitra");
656                names.add("Arkona");
657                names.add("Ved");
658                names.add("Kolobok");
659                names.add("Mokosh");
660                names.add("Perun");
661                names.add("Morana");
662                names.add("Veles");
663                names.add("Jarilo");
664                names.add("Morana");
665                names.add("Svarog");
666                names.add("Dazbog");
667                names.add("Indrik");
668                names.add("Stribog");
669                names.add("Gamayun");
670                names.add("Sirin");
671                names.add("Alkonost");
672                names.add("The Simargl");
673                names.add("Baba Yaga");
674                names.add("Buyan");
675                names.add("Koschei");
676                names.add("Kitezh");
677                names.add("Neter");
678                names.add("Pontus");
679                names.add("Tiamat");
680                names.add("Apsu");
681                names.add("Lotan");
682                names.add("Basmu");
683                names.add("Usumgallu");
684                names.add("Masmahhu");
685                names.add("Mushussu");
686                names.add("Lahmu");
687                names.add("Ugallu");
688                names.add("Uridimmu");
689                names.add("Girtablullu");
690                names.add("Umu Dabrutu");
691                names.add("Kulullu");
692                names.add("Kusarikku");
693                names.add("Yaw");
694                names.add("Rahab");
695                names.add("Tannin");
696                names.add("Anzu");
697                names.add("Ausir");
698                names.add("Horos");
699                names.add("Nekhen");
700                names.add("Anapa");
701                names.add("Atuan");
702                names.add("Tenar");
703                names.add("Kossil");
704                names.add("Rota Fortunae");
705                names.add("Siege Perilous");
706                names.add("World Mill");
707                names.add("Ara");
708                names.add("Durer's Star");
709                names.add("Melancholia");
710                names.add("Moskva");
711                names.add("Griseus");
712                names.add("Breq");
713                names.add("Hungry Ghost");
714                names.add("Diyu");
715                names.add("Yama");
716                names.add("Naihe Qiao");
717                names.add("Youdu");
718                names.add("Qinguang");
719                names.add("Bing Diyu");
720                names.add("Chujiang");
721                names.add("Heisheng Dadi");
722                names.add("Songdi");
723                names.add("Wuguan");
724                names.add("Xuechi");
725                names.add("Yanluo");
726                names.add("Diancheng");
727                names.add("Jiaohuan");
728                names.add("Taishan");
729                names.add("Roujiang");
730                names.add("Dushi");
731                names.add("Menguo");
732                names.add("Pingden");
733                names.add("Avici");
734                names.add("Jigoku");
735                names.add("Enma");
736                names.add("Gargoyle");
737                names.add("Familiar");
738                names.add("Schrat");
739                names.add("Kobold");
740                names.add("Youming");
741                names.add("Yinjian");
742                names.add("Soleyn");
743                names.add("Glowan");
744                names.add("Sagan");
745                names.add("Robinson's Moon");
746                names.add("Idir");
747                names.add("Morthanveld");
748                names.add("Issorile");
749                names.add("Azad");
750                names.add("Gormenghast");
751                names.add("Knole");
752                names.add("Carcassonne");
753                names.add("Sark");
754                names.add("Rameumptom");
755                names.add("Vidur");
756                names.add("Jahannam");
757                names.add("Zaqqum");
758                names.add("Maalik");
759                names.add("Haawiyah");
760                names.add("Barzakh");
761                names.add("Al Nar");
762                names.add("Jahim");
763                names.add("Jannah");
764                names.add("Touba");
765                names.add("Araf");
766                names.add("Sheol");
767                names.add("Rephaim");
768                names.add("Perdition");
769                names.add("Aaru");
770                names.add("Neter-hkertet");
771                names.add("Erlig");
772                names.add("Karoaglanlar");
773                names.add("Karakizlar");
774                names.add("Karash");
775                names.add("Matyr");
776                names.add("Shyngay");
777                names.add("Komur");
778                names.add("Badysh");
779                names.add("Yabash");
780                names.add("Temir");
781                names.add("Uchar");
782                names.add("Kerey");
783                names.add("Ulgan");
784                names.add("Maidere");
785                names.add("The Ordog");
786                names.add("Yav");
787                names.add("Prav");
788                names.add("Nav");
789                names.add("Anyox");
790                names.add("Atlin");
791                names.add("The Chechidla");
792                names.add("Comiaken");
793                names.add("Cultus");
794                names.add("Gingolx");
795                names.add("The Nechako");
796                names.add("Tsimshian");
797                names.add("Ivavik");
798                names.add("Ghost Dance");
799                names.add("Mag Mell");
800                names.add("Loka");
801                names.add("Cipactli");
802                names.add("Ehecatl");
803                names.add("Spirit Wind");
804                names.add("Agiel");
805                names.add("Tesh");
806                names.add("Rohagi");
807                names.add("Cymek");
808                names.add("Bered Kai Nev");
809                names.add("Samael");
810                names.add("Agrat bat Mahlat");
811                names.add("Amamar");
812                names.add("Naamah");
813                names.add("Lilith");
814                names.add("Eisheth");
815                names.add("Zepar");
816                names.add("The Grigori");
817                names.add("The Sentinels");
818                names.add("Suriel");
819                names.add("Old Goat");
820                names.add("Kochab");
821                names.add("Yaqum");
822                names.add("Asbeel");
823                names.add("Gadreel");
824                names.add("Penemue");
825                names.add("Kasdaye");
826                names.add("Cambriel Nebula");
827                names.add("Armaros' Work");
828                names.add("The Myriad");
829                names.add("The Lost Legion");
830                names.add("Al Kathab");
831                names.add("The Armada");
832                names.add("Kohnid");
833                names.add("The Gengris");
834                names.add("New Suroch");
835                names.add("Xezbeth");
836                names.add("Xaphan");
837                names.add("Vanth");
838                names.add("The Erinyes");
839                names.add("Charun");
840                names.add("Calu");
841                names.add("Turms");
842                names.add("Aita");
843                names.add("Anvil");
844                names.add("Stray Dog");
845                names.add("Valefar");
846                names.add("Laverna");
847                names.add("Maderakka");
848                names.add("Sarakka");
849                names.add("Juksakka");
850                names.add("Uksakka");
851                names.add("Jabme-Akka");
852                names.add("Maan-Emo");
853                names.add("An");
854                names.add("Ki");
855                names.add("Anu");
856                names.add("Long");
857                names.add("Quy");
858                names.add("Lan");
859                names.add("Phung");
860                names.add("Art of the Jinns");
861                names.add("The Qarin");
862                names.add("Tuchulcha");
863                names.add("Suanggi");
864                names.add("Surgat");
865                names.add("The Imp");
866                names.add("Chax");
867                names.add("The Raven");
868                names.add("The Murder");
869                names.add("Saleos");
870                names.add("Puloman");
871                names.add("Indrani Sachi");
872                names.add("Sivasri");
873                names.add("The Pontianak");
874                names.add("The Pocong");
875                names.add("O Tokata");
876                names.add("Osor");
877                names.add("Empusa");
878                names.add("Mormo");
879                names.add("Onoskelis");
880                names.add("Mara");
881                names.add("Krampus");
882                names.add("Kroni");
883                names.add("Ravanan");
884                names.add("Kaliyan");
885                names.add("Thuriothanan");
886                names.add("Kad");
887                names.add("The Marid");
888                names.add("Hantu Raya");
889                names.add("Tuyul");
890                names.add("Koman-tong");
891                names.add("Koman-lay");
892                names.add("Kwee Kia");
893                names.add("Jenglot");
894                names.add("Gusoyn");
895                names.add("Gallu");
896                names.add("Gaap");
897                names.add("Dzoavits");
898                names.add("Klabautermann");
899                names.add("$parent's Jinx");
900                names.add("$parent's Hex");
901                names.add("The Hecatomb");
902                names.add("Grigri");
903                names.add("Bakaak");
904                names.add("Jumbee's Dance");
905                names.add("Kigatilik");
906                names.add("Qiqirn");
907                names.add("Tupilaq");
908                names.add("Tizheruk");
909                names.add("Run of the Haietlik");
910                names.add("Unhcegila");
911                names.add("Okeus");
912                names.add("Shapishico");
913                names.add("Atahsaya");
914                names.add("Wekufe");
915                names.add("Gualichu");
916                names.add("Babi Ngepet");
917                names.add("Royllo");
918                names.add("Braxil");
919                names.add("Mam");
920                names.add("Zuane");
921                names.add("Caprica");
922                names.add("Letum");
923                names.add("Pallida");
924                names.add("Somnus");
925                names.add("Nox");
926                names.add("Mors");
927                names.add("The Pactolus");
928                names.add("Socordia");
929                names.add("Ignavia");
930                names.add("Sabriel");
931                names.add("Lirael");
932                names.add("Clariel");
933                names.add("Ranna");
934                names.add("Mosrael");
935                names.add("Kibeth");
936                names.add("Dyrim");
937                names.add("Belgaer");
938                names.add("Astarael");
939                names.add("Saraneth");
940                names.add("Tanmar");
941                names.add("Maida");
942                names.add("Bentusle");
943                names.add("Asmaidas");
944                names.add("Groclant");
945                names.add("Nona");
946                names.add("Decima");
947                names.add("Morta");
948                names.add("Ratna");
949                names.add("Sharkara");
950                names.add("Valuka");
951                names.add("Panka");
952                names.add("Dhuma");
953                names.add("Tamaha");
954                names.add("Mahatamaha");
955                names.add("Achuguayo");
956                names.add("Teide");
957                names.add("Gara");
958                names.add("Jonay");
959                names.add("Chijoraji");
960                names.add("Achuhucanac");
961                names.add("Ganigo");
962                names.add("Tagoror");
963                names.add("Goro");
964                names.add("Sose");
965                names.add("Faunus");
966                names.add("Bona Dea");
967                names.add("Pitys");
968                names.add("Echo");
969                names.add("Kelaineus");
970                names.add("Argennon");
971                names.add("Aigikoros");
972                names.add("Eugeneios");
973                names.add("Omester");
974                names.add("Daphoenus");
975                names.add("Philamnos");
976                names.add("Xanthos");
977                names.add("Glaukos");
978                names.add("Phorbas");
979                names.add("Leng");
980                names.add("Kang Admi");
981                names.add("Mika");
982                names.add("Bun Manchi");
983                names.add("Migoi");
984                names.add("Dzu-teh");
985                names.add("Miche");
986                names.add("Sarkomand");
987                names.add("Cerenerian Sea");
988                names.add("Kephalos");
989                names.add("Procris");
990                names.add("Minyas");
991                names.add("Cymene");
992                names.add("Arcesius");
993                names.add("Astraeus");
994                names.add("Boreas");
995                names.add("Notus");
996                names.add("Eurus");
997                names.add("Zephyrus");
998                names.add("Toci");
999                names.add("Coatlicue");
1000                names.add("Centeotl");
1001                names.add("Chicomecoatl");
1002                names.add("Texcatlipoca");
1003                names.add("Xantico");
1004                names.add("Chantico");
1005                names.add("Mayahue");
1006                names.add("Mixcoatl");
1007                names.add("Centzon Huitznauhtin");
1008                names.add("Tlaloc");
1009                names.add("The Anillo");
1010                names.add("Tohil");
1011                names.add("Denyen");
1012                names.add("Ekwesh");
1013                names.add("Peleset");
1014                names.add("Sherden");
1015                names.add("Teresh");
1016                names.add("Weshesh");
1017                names.add("Tjeker");
1018                names.add("Bull Moose");
1019                names.add("Minnow");
1020                names.add("Will-o-wisp");
1021                names.add("Stingy Jack");
1022                names.add("City of Brass");
1023                names.add("Saraph");
1024                names.add("Harah");
1025                names.add("Hazor");
1026                names.add("Gezor");
1027                names.add("Ningishzida");
1028                names.add("Azimua");
1029                names.add("Nehushtan");
1030                names.add("Oberon");
1031                names.add("Cymnea");
1032                names.add("Faiella");
1033                names.add("Clarissa");
1034                names.add("Riga");
1035                names.add("Sawal");
1036                names.add("Dara");
1037                names.add("Mandor");
1038                names.add("Jurt");
1039                names.add("Corwin");
1040                names.add("Merlin");
1041                names.add("Brand");
1042                names.add("Jasra");
1043                names.add("Luke");
1044                names.add("Random");
1045                names.add("Morganthe");
1046                names.add("Martin");
1047                names.add("Morganna");
1048                names.add("Moronoe");
1049                names.add("Mazoe");
1050                names.add("Gliten");
1051                names.add("Glitonea");
1052                names.add("Tyronoe");
1053                names.add("Thiten");
1054                names.add("Pomorum");
1055                names.add("Basilia");
1056                names.add("Mentonomon");
1057                names.add("Suroch");
1058                names.add("Grimnebulin");
1059                names.add("Weaver");
1060                names.add("Tesh");
1061                names.add("Shining Tor");
1062                names.add("Vannin");
1063                names.add("Manau");
1064                names.add("Monabia");
1065                names.add("Cushag");
1066                names.add("Ayre");
1067                names.add("Neb");
1068                names.add("Dhoo");
1069                names.add("Keter");
1070                names.add("Zohar");
1071                names.add("Binah");
1072                names.add("Netzach");
1073                names.add("Yesod");
1074                names.add("Hod");
1075                names.add("Simchah");
1076                names.add("Emet");
1077                names.add("Grimsnes");
1078                names.add("Alfur");
1079                names.add("Grensdalur");
1080                names.add("Troll");
1081                names.add("Askja");
1082                names.add("Vofa");
1083                names.add("Surtsey");
1084                names.add("Sal");
1085                names.add("Krossa");
1086                names.add("Hvita");
1087                names.add("Olfusa");
1088                names.add("Grendel");
1089                names.add("Modor");
1090                names.add("The Chiral Wisp");
1091                names.add("Avice");
1092                names.add("Maculatus");
1093                names.add("Deinos");
1094                names.add("Vuzgrimeti");
1095                names.add("Balwom");
1096                names.add("Spira");
1097                names.add("Zaranya");
1098                names.add("The Motley");
1099                names.add("Moile");
1100                names.add("Prism");
1101                names.add("Arcus");
1102                names.add("Welo");
1103                names.add("Acorn");
1104                names.add("Hope");
1105                names.add("Wonder");
1106                names.add("The Confluence");
1107                names.add("Cirrus");
1108                names.add("Olwyn");
1109                names.add("Pantheon");
1110                names.add("Eye");
1111                names.add("Pharos");
1112                names.add("Tempest");
1113                names.add("The Precipice");
1114                names.add("Archon");
1115                names.add("Sabazios");
1116                names.add("Terror");
1117                names.add("Despair");
1118                names.add("Abandon");
1119                names.add("Legion");
1120                names.add("Golgotha");
1121                names.add("Blost");
1122                names.add("Uz");
1123                names.add("Hul");
1124                names.add("Togar");
1125                names.add("Mesha");
1126                names.add("Mu");
1127                names.add("Naacal");
1128                names.add("Zahra");
1129                names.add("Hufra");
1130                names.add("Zill");
1131                names.add("Swang");
1132                names.add("Troano");
1133                names.add("Mayda");
1134                names.add("Bolunda");
1135                names.add("Brazir");
1136                names.add("Mam");
1137                names.add("Vlaanderen");
1138                names.add("Asmaida");
1139                names.add("Chagos");
1140                names.add("Eiger");
1141                names.add("Ran");
1142                names.add("Vigrid");
1143                names.add("Hrym");
1144                names.add("Nog");
1145                names.add("Gryla");
1146                names.add("Cormoran");
1147                names.add("Morvah");
1148                names.add("Zennor");
1149                names.add("Madron");
1150                names.add("Athos");
1151                names.add("Cadmus");
1152                names.add("Echion");
1153                names.add("Laius");
1154                names.add("The Spartoi");
1155                names.add("Bellerophon");
1156                names.add("Cilix");
1157                names.add("Telephassa");
1158                names.add("Telephe");
1159                names.add("Agriope");
1160                names.add("Shevar");
1161                names.add("Ferragut");
1162                names.add("Kroni");
1163                names.add("Kapre");
1164                names.add("Zipacna");
1165                names.add("Mbombo");
1166                names.add("Basan");
1167                names.add("Wendigo");
1168                names.add("Abraxas");
1169                names.add("Vassago");
1170                names.add("Ukobach");
1171                names.add("Valac");
1172                names.add("Toyol");
1173                names.add("Solas");
1174                names.add("Shedim");
1175                names.add("Raum");
1176                names.add("Ose");
1177                names.add("Lempo");
1178                names.add("Lilin");
1179                names.add("Killakee Cat");
1180                names.add("Ipos");
1181                names.add("Hantu Raya");
1182                names.add("The Polong");
1183                names.add("Pelesit");
1184                names.add("Blue Crow");
1185                names.add("Marathon");
1186                names.add("Mazu");
1187                names.add("Svarga");
1188                names.add("Sunda");
1189                names.add("Garbhodaka");
1190                names.add("Pitrloka");
1191                names.add("Dalar's Star");
1192                names.add("Kardashev");
1193                names.add("Hero");
1194                names.add("Vecna");
1195                names.add("Zendar");
1196                names.add("Yaahl");
1197                names.add("Sahara");
1198                names.add("Gobi");
1199                names.add("Kalahari");
1200                names.add("Karakum");
1201                names.add("Sonora");
1202                names.add("Atacama");
1203                names.add("Mojave");
1204                names.add("Namib");
1205                names.add("Aegea");
1206                names.add("New Labrador");
1207                names.add("New Biscay");
1208                names.add("New Azov");
1209                names.add("New Cordova");
1210                names.add("New Pender");
1211                names.add("New Guayaquil");
1212                names.add("Third Bogota");
1213                names.add("Yuendumu");
1214                names.add("Yulara");
1215                names.add("Ghan");
1216                names.add("Warmun");
1217                names.add("The Ord");
1218                names.add("Naikoon");
1219                names.add("Haanas");
1220                names.add("The Pines");
1221                names.add("New Caldwell");
1222                names.add("Potato");
1223                
1224                return names;
1225        }
1226}
1227
1228
1229
1230
1231
1232
1233