UNPKG

343 kBJavaScriptView Raw
1// Chance.js 1.0.15
2// http://chancejs.com
3// (c) 2013 Victor Quinn
4// Chance may be freely distributed or modified under the MIT license.
5
6(function () {
7
8 // Constants
9 var MAX_INT = 9007199254740992;
10 var MIN_INT = -MAX_INT;
11 var NUMBERS = '0123456789';
12 var CHARS_LOWER = 'abcdefghijklmnopqrstuvwxyz';
13 var CHARS_UPPER = CHARS_LOWER.toUpperCase();
14 var HEX_POOL = NUMBERS + "abcdef";
15
16 // Errors
17 function UnsupportedError(message) {
18 this.name = 'UnsupportedError';
19 this.message = message || 'This feature is not supported on this platform';
20 }
21
22 UnsupportedError.prototype = new Error();
23 UnsupportedError.prototype.constructor = UnsupportedError;
24
25 // Cached array helpers
26 var slice = Array.prototype.slice;
27
28 // Constructor
29 function Chance (seed) {
30 if (!(this instanceof Chance)) {
31 if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322
32 return seed === null ? new Chance() : new Chance(seed);
33 }
34
35 // if user has provided a function, use that as the generator
36 if (typeof seed === 'function') {
37 this.random = seed;
38 return this;
39 }
40
41 if (arguments.length) {
42 // set a starting value of zero so we can add to it
43 this.seed = 0;
44 }
45
46 // otherwise, leave this.seed blank so that MT will receive a blank
47
48 for (var i = 0; i < arguments.length; i++) {
49 var seedling = 0;
50 if (Object.prototype.toString.call(arguments[i]) === '[object String]') {
51 for (var j = 0; j < arguments[i].length; j++) {
52 // create a numeric hash for each argument, add to seedling
53 var hash = 0;
54 for (var k = 0; k < arguments[i].length; k++) {
55 hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;
56 }
57 seedling += hash;
58 }
59 } else {
60 seedling = arguments[i];
61 }
62 this.seed += (arguments.length - i) * seedling;
63 }
64
65 // If no generator function was provided, use our MT
66 this.mt = this.mersenne_twister(this.seed);
67 this.bimd5 = this.blueimp_md5();
68 this.random = function () {
69 return this.mt.random(this.seed);
70 };
71
72 return this;
73 }
74
75 Chance.prototype.VERSION = "1.0.15";
76
77 // Random helper functions
78 function initOptions(options, defaults) {
79 options = options || {};
80
81 if (defaults) {
82 for (var i in defaults) {
83 if (typeof options[i] === 'undefined') {
84 options[i] = defaults[i];
85 }
86 }
87 }
88
89 return options;
90 }
91
92 function range(size) {
93 return Array.apply(null, Array(size)).map(function (_, i) {return i;});
94 }
95
96 function testRange(test, errorMessage) {
97 if (test) {
98 throw new RangeError(errorMessage);
99 }
100 }
101
102 /**
103 * Encode the input string with Base64.
104 */
105 var base64 = function() {
106 throw new Error('No Base64 encoder available.');
107 };
108
109 // Select proper Base64 encoder.
110 (function determineBase64Encoder() {
111 if (typeof btoa === 'function') {
112 base64 = btoa;
113 } else if (typeof Buffer === 'function') {
114 base64 = function(input) {
115 return new Buffer(input).toString('base64');
116 };
117 }
118 })();
119
120 // -- Basics --
121
122 /**
123 * Return a random bool, either true or false
124 *
125 * @param {Object} [options={ likelihood: 50 }] alter the likelihood of
126 * receiving a true or false value back.
127 * @throws {RangeError} if the likelihood is out of bounds
128 * @returns {Bool} either true or false
129 */
130 Chance.prototype.bool = function (options) {
131 // likelihood of success (true)
132 options = initOptions(options, {likelihood : 50});
133
134 // Note, we could get some minor perf optimizations by checking range
135 // prior to initializing defaults, but that makes code a bit messier
136 // and the check more complicated as we have to check existence of
137 // the object then existence of the key before checking constraints.
138 // Since the options initialization should be minor computationally,
139 // decision made for code cleanliness intentionally. This is mentioned
140 // here as it's the first occurrence, will not be mentioned again.
141 testRange(
142 options.likelihood < 0 || options.likelihood > 100,
143 "Chance: Likelihood accepts values from 0 to 100."
144 );
145
146 return this.random() * 100 < options.likelihood;
147 };
148
149 Chance.prototype.animal = function (options){
150 //returns a random animal
151 options = initOptions(options);
152
153 if(typeof options.type !== 'undefined'){
154 //if user does not put in a valid animal type, user will get an error
155 testRange(
156 !this.get("animals")[options.type.toLowerCase()],
157 "Please pick from desert, ocean, grassland, forest, zoo, pets, farm."
158 );
159 //if user does put in valid animal type, will return a random animal of that type
160 return this.pick(this.get("animals")[options.type.toLowerCase()]);
161 }
162 //if user does not put in any animal type, will return a random animal regardless
163 animalTypeArray = ["desert","forest","ocean","zoo","farm","pet","grassland"];
164 return this.pick(this.get("animals")[this.pick(animalTypeArray)]);
165 };
166
167 /**
168 * Return a random character.
169 *
170 * @param {Object} [options={}] can specify a character pool, only alpha,
171 * only symbols, and casing (lower or upper)
172 * @returns {String} a single random character
173 * @throws {RangeError} Can only specify alpha or symbols, not both
174 */
175 Chance.prototype.character = function (options) {
176 options = initOptions(options);
177 testRange(
178 options.alpha && options.symbols,
179 "Chance: Cannot specify both alpha and symbols."
180 );
181
182 var symbols = "!@#$%^&*()[]",
183 letters, pool;
184
185 if (options.casing === 'lower') {
186 letters = CHARS_LOWER;
187 } else if (options.casing === 'upper') {
188 letters = CHARS_UPPER;
189 } else {
190 letters = CHARS_LOWER + CHARS_UPPER;
191 }
192
193 if (options.pool) {
194 pool = options.pool;
195 } else if (options.alpha) {
196 pool = letters;
197 } else if (options.symbols) {
198 pool = symbols;
199 } else {
200 pool = letters + NUMBERS + symbols;
201 }
202
203 return pool.charAt(this.natural({max: (pool.length - 1)}));
204 };
205
206 // Note, wanted to use "float" or "double" but those are both JS reserved words.
207
208 // Note, fixed means N OR LESS digits after the decimal. This because
209 // It could be 14.9000 but in JavaScript, when this is cast as a number,
210 // the trailing zeroes are dropped. Left to the consumer if trailing zeroes are
211 // needed
212 /**
213 * Return a random floating point number
214 *
215 * @param {Object} [options={}] can specify a fixed precision, min, max
216 * @returns {Number} a single floating point number
217 * @throws {RangeError} Can only specify fixed or precision, not both. Also
218 * min cannot be greater than max
219 */
220 Chance.prototype.floating = function (options) {
221 options = initOptions(options, {fixed : 4});
222 testRange(
223 options.fixed && options.precision,
224 "Chance: Cannot specify both fixed and precision."
225 );
226
227 var num;
228 var fixed = Math.pow(10, options.fixed);
229
230 var max = MAX_INT / fixed;
231 var min = -max;
232
233 testRange(
234 options.min && options.fixed && options.min < min,
235 "Chance: Min specified is out of range with fixed. Min should be, at least, " + min
236 );
237 testRange(
238 options.max && options.fixed && options.max > max,
239 "Chance: Max specified is out of range with fixed. Max should be, at most, " + max
240 );
241
242 options = initOptions(options, { min : min, max : max });
243
244 // Todo - Make this work!
245 // options.precision = (typeof options.precision !== "undefined") ? options.precision : false;
246
247 num = this.integer({min: options.min * fixed, max: options.max * fixed});
248 var num_fixed = (num / fixed).toFixed(options.fixed);
249
250 return parseFloat(num_fixed);
251 };
252
253 /**
254 * Return a random integer
255 *
256 * NOTE the max and min are INCLUDED in the range. So:
257 * chance.integer({min: 1, max: 3});
258 * would return either 1, 2, or 3.
259 *
260 * @param {Object} [options={}] can specify a min and/or max
261 * @returns {Number} a single random integer number
262 * @throws {RangeError} min cannot be greater than max
263 */
264 Chance.prototype.integer = function (options) {
265 // 9007199254740992 (2^53) is the max integer number in JavaScript
266 // See: http://vq.io/132sa2j
267 options = initOptions(options, {min: MIN_INT, max: MAX_INT});
268 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
269
270 return Math.floor(this.random() * (options.max - options.min + 1) + options.min);
271 };
272
273 /**
274 * Return a random natural
275 *
276 * NOTE the max and min are INCLUDED in the range. So:
277 * chance.natural({min: 1, max: 3});
278 * would return either 1, 2, or 3.
279 *
280 * @param {Object} [options={}] can specify a min and/or maxm or a numerals count.
281 * @returns {Number} a single random integer number
282 * @throws {RangeError} min cannot be greater than max
283 */
284 Chance.prototype.natural = function (options) {
285 options = initOptions(options, {min: 0, max: MAX_INT});
286 if (typeof options.numerals === 'number'){
287 testRange(options.numerals < 1, "Chance: Numerals cannot be less than one.");
288 options.min = Math.pow(10, options.numerals - 1);
289 options.max = Math.pow(10, options.numerals) - 1;
290 }
291 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
292 return this.integer(options);
293 };
294
295 /**
296 * Return a random hex number as string
297 *
298 * NOTE the max and min are INCLUDED in the range. So:
299 * chance.hex({min: '9', max: 'B'});
300 * would return either '9', 'A' or 'B'.
301 *
302 * @param {Object} [options={}] can specify a min and/or max and/or casing
303 * @returns {String} a single random string hex number
304 * @throws {RangeError} min cannot be greater than max
305 */
306 Chance.prototype.hex = function (options) {
307 options = initOptions(options, {min: 0, max: MAX_INT, casing: 'lower'});
308 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
309 var integer = this.natural({min: options.min, max: options.max});
310 if (options.casing === 'upper') {
311 return integer.toString(16).toUpperCase();
312 }
313 return integer.toString(16);
314 };
315
316 Chance.prototype.letter = function(options) {
317 options = initOptions(options, {casing: 'lower'});
318 var pool = "abcdefghijklmnopqrstuvwxyz";
319 var letter = this.character({pool: pool});
320 if (options.casing === 'upper') {
321 letter = letter.toUpperCase();
322 }
323 return letter;
324 }
325
326 /**
327 * Return a random string
328 *
329 * @param {Object} [options={}] can specify a length
330 * @returns {String} a string of random length
331 * @throws {RangeError} length cannot be less than zero
332 */
333 Chance.prototype.string = function (options) {
334 options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
335 testRange(options.length < 0, "Chance: Length cannot be less than zero.");
336 var length = options.length,
337 text = this.n(this.character, length, options);
338
339 return text.join("");
340 };
341
342 /**
343 * Return a random buffer
344 *
345 * @param {Object} [options={}] can specify a length
346 * @returns {Buffer} a buffer of random length
347 * @throws {RangeError} length cannot be less than zero
348 */
349 Chance.prototype.buffer = function (options) {
350 if (typeof Buffer === 'undefined') {
351 throw new UnsupportedError('Sorry, the buffer() function is not supported on your platform');
352 }
353 options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
354 testRange(options.length < 0, "Chance: Length cannot be less than zero.");
355 var length = options.length;
356 var content = this.n(this.character, length, options);
357
358 return Buffer.from(content);
359 };
360
361 // -- End Basics --
362
363 // -- Helpers --
364
365 Chance.prototype.capitalize = function (word) {
366 return word.charAt(0).toUpperCase() + word.substr(1);
367 };
368
369 Chance.prototype.mixin = function (obj) {
370 for (var func_name in obj) {
371 Chance.prototype[func_name] = obj[func_name];
372 }
373 return this;
374 };
375
376 /**
377 * Given a function that generates something random and a number of items to generate,
378 * return an array of items where none repeat.
379 *
380 * @param {Function} fn the function that generates something random
381 * @param {Number} num number of terms to generate
382 * @param {Object} options any options to pass on to the generator function
383 * @returns {Array} an array of length `num` with every item generated by `fn` and unique
384 *
385 * There can be more parameters after these. All additional parameters are provided to the given function
386 */
387 Chance.prototype.unique = function(fn, num, options) {
388 testRange(
389 typeof fn !== "function",
390 "Chance: The first argument must be a function."
391 );
392
393 var comparator = function(arr, val) { return arr.indexOf(val) !== -1; };
394
395 if (options) {
396 comparator = options.comparator || comparator;
397 }
398
399 var arr = [], count = 0, result, MAX_DUPLICATES = num * 50, params = slice.call(arguments, 2);
400
401 while (arr.length < num) {
402 var clonedParams = JSON.parse(JSON.stringify(params));
403 result = fn.apply(this, clonedParams);
404 if (!comparator(arr, result)) {
405 arr.push(result);
406 // reset count when unique found
407 count = 0;
408 }
409
410 if (++count > MAX_DUPLICATES) {
411 throw new RangeError("Chance: num is likely too large for sample set");
412 }
413 }
414 return arr;
415 };
416
417 /**
418 * Gives an array of n random terms
419 *
420 * @param {Function} fn the function that generates something random
421 * @param {Number} n number of terms to generate
422 * @returns {Array} an array of length `n` with items generated by `fn`
423 *
424 * There can be more parameters after these. All additional parameters are provided to the given function
425 */
426 Chance.prototype.n = function(fn, n) {
427 testRange(
428 typeof fn !== "function",
429 "Chance: The first argument must be a function."
430 );
431
432 if (typeof n === 'undefined') {
433 n = 1;
434 }
435 var i = n, arr = [], params = slice.call(arguments, 2);
436
437 // Providing a negative count should result in a noop.
438 i = Math.max( 0, i );
439
440 for (null; i--; null) {
441 arr.push(fn.apply(this, params));
442 }
443
444 return arr;
445 };
446
447 // H/T to SO for this one: http://vq.io/OtUrZ5
448 Chance.prototype.pad = function (number, width, pad) {
449 // Default pad to 0 if none provided
450 pad = pad || '0';
451 // Convert number to a string
452 number = number + '';
453 return number.length >= width ? number : new Array(width - number.length + 1).join(pad) + number;
454 };
455
456 // DEPRECATED on 2015-10-01
457 Chance.prototype.pick = function (arr, count) {
458 if (arr.length === 0) {
459 throw new RangeError("Chance: Cannot pick() from an empty array");
460 }
461 if (!count || count === 1) {
462 return arr[this.natural({max: arr.length - 1})];
463 } else {
464 return this.shuffle(arr).slice(0, count);
465 }
466 };
467
468 // Given an array, returns a single random element
469 Chance.prototype.pickone = function (arr) {
470 if (arr.length === 0) {
471 throw new RangeError("Chance: Cannot pickone() from an empty array");
472 }
473 return arr[this.natural({max: arr.length - 1})];
474 };
475
476 // Given an array, returns a random set with 'count' elements
477 Chance.prototype.pickset = function (arr, count) {
478 if (count === 0) {
479 return [];
480 }
481 if (arr.length === 0) {
482 throw new RangeError("Chance: Cannot pickset() from an empty array");
483 }
484 if (count < 0) {
485 throw new RangeError("Chance: Count must be a positive number");
486 }
487 if (!count || count === 1) {
488 return [ this.pickone(arr) ];
489 } else {
490 return this.n(this.natural, count, {max: arr.length - 1}).map(function (i) {
491 return arr[i];
492 });
493 }
494 };
495
496 Chance.prototype.shuffle = function (arr) {
497 var new_array = [],
498 j = 0,
499 length = Number(arr.length),
500 source_indexes = range(length),
501 last_source_index = length - 1,
502 selected_source_index;
503
504 for (var i = 0; i < length; i++) {
505 // Pick a random index from the array
506 selected_source_index = this.natural({max: last_source_index});
507 j = source_indexes[selected_source_index];
508
509 // Add it to the new array
510 new_array[i] = arr[j];
511
512 // Mark the source index as used
513 source_indexes[selected_source_index] = source_indexes[last_source_index];
514 last_source_index -= 1;
515 }
516
517 return new_array;
518 };
519
520 // Returns a single item from an array with relative weighting of odds
521 Chance.prototype.weighted = function (arr, weights, trim) {
522 if (arr.length !== weights.length) {
523 throw new RangeError("Chance: Length of array and weights must match");
524 }
525
526 // scan weights array and sum valid entries
527 var sum = 0;
528 var val;
529 for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
530 val = weights[weightIndex];
531 if (isNaN(val)) {
532 throw new RangeError("Chance: All weights must be numbers");
533 }
534
535 if (val > 0) {
536 sum += val;
537 }
538 }
539
540 if (sum === 0) {
541 throw new RangeError("Chance: No valid entries in array weights");
542 }
543
544 // select a value within range
545 var selected = this.random() * sum;
546
547 // find array entry corresponding to selected value
548 var total = 0;
549 var lastGoodIdx = -1;
550 var chosenIdx;
551 for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
552 val = weights[weightIndex];
553 total += val;
554 if (val > 0) {
555 if (selected <= total) {
556 chosenIdx = weightIndex;
557 break;
558 }
559 lastGoodIdx = weightIndex;
560 }
561
562 // handle any possible rounding error comparison to ensure something is picked
563 if (weightIndex === (weights.length - 1)) {
564 chosenIdx = lastGoodIdx;
565 }
566 }
567
568 var chosen = arr[chosenIdx];
569 trim = (typeof trim === 'undefined') ? false : trim;
570 if (trim) {
571 arr.splice(chosenIdx, 1);
572 weights.splice(chosenIdx, 1);
573 }
574
575 return chosen;
576 };
577
578 // -- End Helpers --
579
580 // -- Text --
581
582 Chance.prototype.paragraph = function (options) {
583 options = initOptions(options);
584
585 var sentences = options.sentences || this.natural({min: 3, max: 7}),
586 sentence_array = this.n(this.sentence, sentences);
587
588 return sentence_array.join(' ');
589 };
590
591 // Could get smarter about this than generating random words and
592 // chaining them together. Such as: http://vq.io/1a5ceOh
593 Chance.prototype.sentence = function (options) {
594 options = initOptions(options);
595
596 var words = options.words || this.natural({min: 12, max: 18}),
597 punctuation = options.punctuation,
598 text, word_array = this.n(this.word, words);
599
600 text = word_array.join(' ');
601
602 // Capitalize first letter of sentence
603 text = this.capitalize(text);
604
605 // Make sure punctuation has a usable value
606 if (punctuation !== false && !/^[\.\?;!:]$/.test(punctuation)) {
607 punctuation = '.';
608 }
609
610 // Add punctuation mark
611 if (punctuation) {
612 text += punctuation;
613 }
614
615 return text;
616 };
617
618 Chance.prototype.syllable = function (options) {
619 options = initOptions(options);
620
621 var length = options.length || this.natural({min: 2, max: 3}),
622 consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones
623 vowels = 'aeiou', // vowels
624 all = consonants + vowels, // all
625 text = '',
626 chr;
627
628 // I'm sure there's a more elegant way to do this, but this works
629 // decently well.
630 for (var i = 0; i < length; i++) {
631 if (i === 0) {
632 // First character can be anything
633 chr = this.character({pool: all});
634 } else if (consonants.indexOf(chr) === -1) {
635 // Last character was a vowel, now we want a consonant
636 chr = this.character({pool: consonants});
637 } else {
638 // Last character was a consonant, now we want a vowel
639 chr = this.character({pool: vowels});
640 }
641
642 text += chr;
643 }
644
645 if (options.capitalize) {
646 text = this.capitalize(text);
647 }
648
649 return text;
650 };
651
652 Chance.prototype.word = function (options) {
653 options = initOptions(options);
654
655 testRange(
656 options.syllables && options.length,
657 "Chance: Cannot specify both syllables AND length."
658 );
659
660 var syllables = options.syllables || this.natural({min: 1, max: 3}),
661 text = '';
662
663 if (options.length) {
664 // Either bound word by length
665 do {
666 text += this.syllable();
667 } while (text.length < options.length);
668 text = text.substring(0, options.length);
669 } else {
670 // Or by number of syllables
671 for (var i = 0; i < syllables; i++) {
672 text += this.syllable();
673 }
674 }
675
676 if (options.capitalize) {
677 text = this.capitalize(text);
678 }
679
680 return text;
681 };
682
683 // -- End Text --
684
685 // -- Person --
686
687 Chance.prototype.age = function (options) {
688 options = initOptions(options);
689 var ageRange;
690
691 switch (options.type) {
692 case 'child':
693 ageRange = {min: 0, max: 12};
694 break;
695 case 'teen':
696 ageRange = {min: 13, max: 19};
697 break;
698 case 'adult':
699 ageRange = {min: 18, max: 65};
700 break;
701 case 'senior':
702 ageRange = {min: 65, max: 100};
703 break;
704 case 'all':
705 ageRange = {min: 0, max: 100};
706 break;
707 default:
708 ageRange = {min: 18, max: 65};
709 break;
710 }
711
712 return this.natural(ageRange);
713 };
714
715 Chance.prototype.birthday = function (options) {
716 var age = this.age(options);
717 var currentYear = new Date().getFullYear();
718
719 if (options && options.type) {
720 var min = new Date();
721 var max = new Date();
722 min.setFullYear(currentYear - age - 1);
723 max.setFullYear(currentYear - age);
724
725 options = initOptions(options, {
726 min: min,
727 max: max
728 });
729 } else {
730 options = initOptions(options, {
731 year: currentYear - age
732 });
733 }
734
735 return this.date(options);
736 };
737
738 // CPF; ID to identify taxpayers in Brazil
739 Chance.prototype.cpf = function (options) {
740 options = initOptions(options, {
741 formatted: true
742 });
743
744 var n = this.n(this.natural, 9, { max: 9 });
745 var d1 = n[8]*2+n[7]*3+n[6]*4+n[5]*5+n[4]*6+n[3]*7+n[2]*8+n[1]*9+n[0]*10;
746 d1 = 11 - (d1 % 11);
747 if (d1>=10) {
748 d1 = 0;
749 }
750 var d2 = d1*2+n[8]*3+n[7]*4+n[6]*5+n[5]*6+n[4]*7+n[3]*8+n[2]*9+n[1]*10+n[0]*11;
751 d2 = 11 - (d2 % 11);
752 if (d2>=10) {
753 d2 = 0;
754 }
755 var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;
756 return options.formatted ? cpf : cpf.replace(/\D/g,'');
757 };
758
759 // CNPJ: ID to identify companies in Brazil
760 Chance.prototype.cnpj = function (options) {
761 options = initOptions(options, {
762 formatted: true
763 });
764
765 var n = this.n(this.natural, 12, { max: 12 });
766 var d1 = n[11]*2+n[10]*3+n[9]*4+n[8]*5+n[7]*6+n[6]*7+n[5]*8+n[4]*9+n[3]*2+n[2]*3+n[1]*4+n[0]*5;
767 d1 = 11 - (d1 % 11);
768 if (d1<2) {
769 d1 = 0;
770 }
771 var d2 = d1*2+n[11]*3+n[10]*4+n[9]*5+n[8]*6+n[7]*7+n[6]*8+n[5]*9+n[4]*2+n[3]*3+n[2]*4+n[1]*5+n[0]*6;
772 d2 = 11 - (d2 % 11);
773 if (d2<2) {
774 d2 = 0;
775 }
776 var cnpj = ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/'+n[8]+n[9]+n[10]+n[11]+'-'+d1+d2;
777 return options.formatted ? cnpj : cnpj.replace(/\D/g,'');
778 };
779
780 Chance.prototype.first = function (options) {
781 options = initOptions(options, {gender: this.gender(), nationality: 'en'});
782 return this.pick(this.get("firstNames")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);
783 };
784
785 Chance.prototype.profession = function (options) {
786 options = initOptions(options);
787 if(options.rank){
788 return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get("profession"));
789 } else{
790 return this.pick(this.get("profession"));
791 }
792 };
793
794 Chance.prototype.company = function (){
795 return this.pick(this.get("company"));
796 };
797
798 Chance.prototype.gender = function (options) {
799 options = initOptions(options, {extraGenders: []});
800 return this.pick(['Male', 'Female'].concat(options.extraGenders));
801 };
802
803 Chance.prototype.last = function (options) {
804 options = initOptions(options, {nationality: '*'});
805 if (options.nationality === "*") {
806 var allLastNames = []
807 var lastNames = this.get("lastNames")
808 Object.keys(lastNames).forEach(function(key, i){
809 allLastNames = allLastNames.concat(lastNames[key])
810 })
811 return this.pick(allLastNames)
812 }
813 else {
814 return this.pick(this.get("lastNames")[options.nationality.toLowerCase()]);
815 }
816
817 };
818
819 Chance.prototype.israelId=function(){
820 var x=this.string({pool: '0123456789',length:8});
821 var y=0;
822 for (var i=0;i<x.length;i++){
823 var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);
824 thisDigit=this.pad(thisDigit,2).toString();
825 thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);
826 y=y+thisDigit;
827 }
828 x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);
829 return x;
830 };
831
832 Chance.prototype.mrz = function (options) {
833 var checkDigit = function (input) {
834 var alpha = "<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(''),
835 multipliers = [ 7, 3, 1 ],
836 runningTotal = 0;
837
838 if (typeof input !== 'string') {
839 input = input.toString();
840 }
841
842 input.split('').forEach(function(character, idx) {
843 var pos = alpha.indexOf(character);
844
845 if(pos !== -1) {
846 character = pos === 0 ? 0 : pos + 9;
847 } else {
848 character = parseInt(character, 10);
849 }
850 character *= multipliers[idx % multipliers.length];
851 runningTotal += character;
852 });
853 return runningTotal % 10;
854 };
855 var generate = function (opts) {
856 var pad = function (length) {
857 return new Array(length + 1).join('<');
858 };
859 var number = [ 'P<',
860 opts.issuer,
861 opts.last.toUpperCase(),
862 '<<',
863 opts.first.toUpperCase(),
864 pad(39 - (opts.last.length + opts.first.length + 2)),
865 opts.passportNumber,
866 checkDigit(opts.passportNumber),
867 opts.nationality,
868 opts.dob,
869 checkDigit(opts.dob),
870 opts.gender,
871 opts.expiry,
872 checkDigit(opts.expiry),
873 pad(14),
874 checkDigit(pad(14)) ].join('');
875
876 return number +
877 (checkDigit(number.substr(44, 10) +
878 number.substr(57, 7) +
879 number.substr(65, 7)));
880 };
881
882 var that = this;
883
884 options = initOptions(options, {
885 first: this.first(),
886 last: this.last(),
887 passportNumber: this.integer({min: 100000000, max: 999999999}),
888 dob: (function () {
889 var date = that.birthday({type: 'adult'});
890 return [date.getFullYear().toString().substr(2),
891 that.pad(date.getMonth() + 1, 2),
892 that.pad(date.getDate(), 2)].join('');
893 }()),
894 expiry: (function () {
895 var date = new Date();
896 return [(date.getFullYear() + 5).toString().substr(2),
897 that.pad(date.getMonth() + 1, 2),
898 that.pad(date.getDate(), 2)].join('');
899 }()),
900 gender: this.gender() === 'Female' ? 'F': 'M',
901 issuer: 'GBR',
902 nationality: 'GBR'
903 });
904 return generate (options);
905 };
906
907 Chance.prototype.name = function (options) {
908 options = initOptions(options);
909
910 var first = this.first(options),
911 last = this.last(options),
912 name;
913
914 if (options.middle) {
915 name = first + ' ' + this.first(options) + ' ' + last;
916 } else if (options.middle_initial) {
917 name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;
918 } else {
919 name = first + ' ' + last;
920 }
921
922 if (options.prefix) {
923 name = this.prefix(options) + ' ' + name;
924 }
925
926 if (options.suffix) {
927 name = name + ' ' + this.suffix(options);
928 }
929
930 return name;
931 };
932
933 // Return the list of available name prefixes based on supplied gender.
934 // @todo introduce internationalization
935 Chance.prototype.name_prefixes = function (gender) {
936 gender = gender || "all";
937 gender = gender.toLowerCase();
938
939 var prefixes = [
940 { name: 'Doctor', abbreviation: 'Dr.' }
941 ];
942
943 if (gender === "male" || gender === "all") {
944 prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });
945 }
946
947 if (gender === "female" || gender === "all") {
948 prefixes.push({ name: 'Miss', abbreviation: 'Miss' });
949 prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });
950 }
951
952 return prefixes;
953 };
954
955 // Alias for name_prefix
956 Chance.prototype.prefix = function (options) {
957 return this.name_prefix(options);
958 };
959
960 Chance.prototype.name_prefix = function (options) {
961 options = initOptions(options, { gender: "all" });
962 return options.full ?
963 this.pick(this.name_prefixes(options.gender)).name :
964 this.pick(this.name_prefixes(options.gender)).abbreviation;
965 };
966 //Hungarian ID number
967 Chance.prototype.HIDN= function(){
968 //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)
969 var idn_pool="0123456789";
970 var idn_chrs="ABCDEFGHIJKLMNOPQRSTUVWXYXZ";
971 var idn="";
972 idn+=this.string({pool:idn_pool,length:6});
973 idn+=this.string({pool:idn_chrs,length:2});
974 return idn;
975 };
976
977
978 Chance.prototype.ssn = function (options) {
979 options = initOptions(options, {ssnFour: false, dashes: true});
980 var ssn_pool = "1234567890",
981 ssn,
982 dash = options.dashes ? '-' : '';
983
984 if(!options.ssnFour) {
985 ssn = this.string({pool: ssn_pool, length: 3}) + dash +
986 this.string({pool: ssn_pool, length: 2}) + dash +
987 this.string({pool: ssn_pool, length: 4});
988 } else {
989 ssn = this.string({pool: ssn_pool, length: 4});
990 }
991 return ssn;
992 };
993
994 // Aadhar is similar to ssn, used in India to uniquely identify a person
995 Chance.prototype.aadhar = function (options) {
996 options = initOptions(options, {onlyLastFour: false, separatedByWhiteSpace: true});
997 var aadhar_pool = "1234567890",
998 aadhar,
999 whiteSpace = options.separatedByWhiteSpace ? ' ' : '';
1000
1001 if(!options.onlyLastFour) {
1002 aadhar = this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1003 this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1004 this.string({pool: aadhar_pool, length: 4});
1005 } else {
1006 aadhar = this.string({pool: aadhar_pool, length: 4});
1007 }
1008 return aadhar;
1009 };
1010
1011 // Return the list of available name suffixes
1012 // @todo introduce internationalization
1013 Chance.prototype.name_suffixes = function () {
1014 var suffixes = [
1015 { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },
1016 { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },
1017 { name: 'Esquire', abbreviation: 'Esq.' },
1018 { name: 'Junior', abbreviation: 'Jr.' },
1019 { name: 'Juris Doctor', abbreviation: 'J.D.' },
1020 { name: 'Master of Arts', abbreviation: 'M.A.' },
1021 { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },
1022 { name: 'Master of Science', abbreviation: 'M.S.' },
1023 { name: 'Medical Doctor', abbreviation: 'M.D.' },
1024 { name: 'Senior', abbreviation: 'Sr.' },
1025 { name: 'The Third', abbreviation: 'III' },
1026 { name: 'The Fourth', abbreviation: 'IV' },
1027 { name: 'Bachelor of Engineering', abbreviation: 'B.E' },
1028 { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }
1029 ];
1030 return suffixes;
1031 };
1032
1033 // Alias for name_suffix
1034 Chance.prototype.suffix = function (options) {
1035 return this.name_suffix(options);
1036 };
1037
1038 Chance.prototype.name_suffix = function (options) {
1039 options = initOptions(options);
1040 return options.full ?
1041 this.pick(this.name_suffixes()).name :
1042 this.pick(this.name_suffixes()).abbreviation;
1043 };
1044
1045 Chance.prototype.nationalities = function () {
1046 return this.get("nationalities");
1047 };
1048
1049 // Generate random nationality based on json list
1050 Chance.prototype.nationality = function () {
1051 var nationality = this.pick(this.nationalities());
1052 return nationality.name;
1053 };
1054
1055 // -- End Person --
1056
1057 // -- Mobile --
1058 // Android GCM Registration ID
1059 Chance.prototype.android_id = function () {
1060 return "APA91" + this.string({ pool: "0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_", length: 178 });
1061 };
1062
1063 // Apple Push Token
1064 Chance.prototype.apple_token = function () {
1065 return this.string({ pool: "abcdef1234567890", length: 64 });
1066 };
1067
1068 // Windows Phone 8 ANID2
1069 Chance.prototype.wp8_anid2 = function () {
1070 return base64( this.hash( { length : 32 } ) );
1071 };
1072
1073 // Windows Phone 7 ANID
1074 Chance.prototype.wp7_anid = function () {
1075 return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });
1076 };
1077
1078 // BlackBerry Device PIN
1079 Chance.prototype.bb_pin = function () {
1080 return this.hash({ length: 8 });
1081 };
1082
1083 // -- End Mobile --
1084
1085 // -- Web --
1086 Chance.prototype.avatar = function (options) {
1087 var url = null;
1088 var URL_BASE = '//www.gravatar.com/avatar/';
1089 var PROTOCOLS = {
1090 http: 'http',
1091 https: 'https'
1092 };
1093 var FILE_TYPES = {
1094 bmp: 'bmp',
1095 gif: 'gif',
1096 jpg: 'jpg',
1097 png: 'png'
1098 };
1099 var FALLBACKS = {
1100 '404': '404', // Return 404 if not found
1101 mm: 'mm', // Mystery man
1102 identicon: 'identicon', // Geometric pattern based on hash
1103 monsterid: 'monsterid', // A generated monster icon
1104 wavatar: 'wavatar', // A generated face
1105 retro: 'retro', // 8-bit icon
1106 blank: 'blank' // A transparent png
1107 };
1108 var RATINGS = {
1109 g: 'g',
1110 pg: 'pg',
1111 r: 'r',
1112 x: 'x'
1113 };
1114 var opts = {
1115 protocol: null,
1116 email: null,
1117 fileExtension: null,
1118 size: null,
1119 fallback: null,
1120 rating: null
1121 };
1122
1123 if (!options) {
1124 // Set to a random email
1125 opts.email = this.email();
1126 options = {};
1127 }
1128 else if (typeof options === 'string') {
1129 opts.email = options;
1130 options = {};
1131 }
1132 else if (typeof options !== 'object') {
1133 return null;
1134 }
1135 else if (options.constructor === 'Array') {
1136 return null;
1137 }
1138
1139 opts = initOptions(options, opts);
1140
1141 if (!opts.email) {
1142 // Set to a random email
1143 opts.email = this.email();
1144 }
1145
1146 // Safe checking for params
1147 opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';
1148 opts.size = parseInt(opts.size, 0) ? opts.size : '';
1149 opts.rating = RATINGS[opts.rating] ? opts.rating : '';
1150 opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';
1151 opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';
1152
1153 url =
1154 opts.protocol +
1155 URL_BASE +
1156 this.bimd5.md5(opts.email) +
1157 (opts.fileExtension ? '.' + opts.fileExtension : '') +
1158 (opts.size || opts.rating || opts.fallback ? '?' : '') +
1159 (opts.size ? '&s=' + opts.size.toString() : '') +
1160 (opts.rating ? '&r=' + opts.rating : '') +
1161 (opts.fallback ? '&d=' + opts.fallback : '')
1162 ;
1163
1164 return url;
1165 };
1166
1167 /**
1168 * #Description:
1169 * ===============================================
1170 * Generate random color value base on color type:
1171 * -> hex
1172 * -> rgb
1173 * -> rgba
1174 * -> 0x
1175 * -> named color
1176 *
1177 * #Examples:
1178 * ===============================================
1179 * * Geerate random hex color
1180 * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'
1181 *
1182 * * Generate Hex based color value
1183 * chance.color({format: 'hex'}) => '#d67118'
1184 *
1185 * * Generate simple rgb value
1186 * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'
1187 *
1188 * * Generate Ox based color value
1189 * chance.color({format: '0x'}) => '0x67ae0b'
1190 *
1191 * * Generate graiscale based value
1192 * chance.color({grayscale: true}) => '#e2e2e2'
1193 *
1194 * * Return valide color name
1195 * chance.color({format: 'name'}) => 'red'
1196 *
1197 * * Make color uppercase
1198 * chance.color({casing: 'upper'}) => '#29CFA7'
1199 *
1200 * * Min Max values for RGBA
1201 * var light_red = chance.color({format: 'hex', min_red: 200, max_red: 255, max_green: 0, max_blue: 0, min_alpha: .2, max_alpha: .3});
1202 *
1203 * @param [object] options
1204 * @return [string] color value
1205 */
1206 Chance.prototype.color = function (options) {
1207 function gray(value, delimiter) {
1208 return [value, value, value].join(delimiter || '');
1209 }
1210
1211 function rgb(hasAlpha) {
1212 var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';
1213 var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : "";
1214 var colorValue = (isGrayscale) ? (gray(this.natural({min: min_rgb, max: max_rgb}), ',')) : (this.natural({min: min_green, max: max_green}) + ',' + this.natural({min: min_blue, max: max_blue}) + ',' + this.natural({max: 255}));
1215 return rgbValue + '(' + colorValue + alphaChannel + ')';
1216 }
1217
1218 function hex(start, end, withHash) {
1219 var symbol = (withHash) ? "#" : "";
1220 var hexstring = "";
1221
1222 if (isGrayscale) {
1223 hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));
1224 if (options.format === "shorthex") {
1225 hexstring = gray(this.hex({min: 0, max: 15}));
1226 }
1227 }
1228 else {
1229 if (options.format === "shorthex") {
1230 hexstring = this.pad(this.hex({min: Math.floor(min_red / 16), max: Math.floor(max_red / 16)}), 1) + this.pad(this.hex({min: Math.floor(min_green / 16), max: Math.floor(max_green / 16)}), 1) + this.pad(this.hex({min: Math.floor(min_blue / 16), max: Math.floor(max_blue / 16)}), 1);
1231 }
1232 else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {
1233 hexstring = this.pad(this.hex({min: min_red, max: max_red}), 2) + this.pad(this.hex({min: min_green, max: max_green}), 2) + this.pad(this.hex({min: min_blue, max: max_blue}), 2);
1234 }
1235 else {
1236 hexstring = this.pad(this.hex({min: min_rgb, max: max_rgb}), 2) + this.pad(this.hex({min: min_rgb, max: max_rgb}), 2) + this.pad(this.hex({min: min_rgb, max: max_rgb}), 2);
1237 }
1238 }
1239
1240 return symbol + hexstring;
1241 }
1242
1243 options = initOptions(options, {
1244 format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),
1245 grayscale: false,
1246 casing: 'lower',
1247 min: 0,
1248 max: 255,
1249 min_red: undefined,
1250 max_red: undefined,
1251 min_green: undefined,
1252 max_green: undefined,
1253 min_blue: undefined,
1254 max_blue: undefined,
1255 min_alpha: 0,
1256 max_alpha: 1
1257 });
1258
1259 var isGrayscale = options.grayscale;
1260 var min_rgb = options.min;
1261 var max_rgb = options.max;
1262 var min_red = options.min_red;
1263 var max_red = options.max_red;
1264 var min_green = options.min_green;
1265 var max_green = options.max_green;
1266 var min_blue = options.min_blue;
1267 var max_blue = options.max_blue;
1268 var min_alpha = options.min_alpha;
1269 var max_alpha = options.max_alpha;
1270 if (options.min_red === undefined) { min_red = min_rgb; }
1271 if (options.max_red === undefined) { max_red = max_rgb; }
1272 if (options.min_green === undefined) { min_green = min_rgb; }
1273 if (options.max_green === undefined) { max_green = max_rgb; }
1274 if (options.min_blue === undefined) { min_blue = min_rgb; }
1275 if (options.max_blue === undefined) { max_blue = max_rgb; }
1276 if (options.min_alpha === undefined) { min_alpha = 0; }
1277 if (options.max_alpha === undefined) { max_alpha = 1; }
1278 if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {
1279 min_rgb = ((min_red + min_green + min_blue) / 3);
1280 max_rgb = ((max_red + max_green + max_blue) / 3);
1281 }
1282 var colorValue;
1283
1284 if (options.format === 'hex') {
1285 colorValue = hex.call(this, 2, 6, true);
1286 }
1287 else if (options.format === 'shorthex') {
1288 colorValue = hex.call(this, 1, 3, true);
1289 }
1290 else if (options.format === 'rgb') {
1291 colorValue = rgb.call(this, false);
1292 }
1293 else if (options.format === 'rgba') {
1294 colorValue = rgb.call(this, true);
1295 }
1296 else if (options.format === '0x') {
1297 colorValue = '0x' + hex.call(this, 2, 6);
1298 }
1299 else if(options.format === 'name') {
1300 return this.pick(this.get("colorNames"));
1301 }
1302 else {
1303 throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".');
1304 }
1305
1306 if (options.casing === 'upper' ) {
1307 colorValue = colorValue.toUpperCase();
1308 }
1309
1310 return colorValue;
1311 };
1312
1313 Chance.prototype.domain = function (options) {
1314 options = initOptions(options);
1315 return this.word() + '.' + (options.tld || this.tld());
1316 };
1317
1318 Chance.prototype.email = function (options) {
1319 options = initOptions(options);
1320 return this.word({length: options.length}) + '@' + (options.domain || this.domain());
1321 };
1322
1323 /**
1324 * #Description:
1325 * ===============================================
1326 * Generate a random Facebook id, aka fbid.
1327 *
1328 * NOTE: At the moment (Sep 2017), Facebook ids are
1329 * "numeric strings" of length 16.
1330 * However, Facebook Graph API documentation states that
1331 * "it is extremely likely to change over time".
1332 * @see https://developers.facebook.com/docs/graph-api/overview/
1333 *
1334 * #Examples:
1335 * ===============================================
1336 * chance.fbid() => '1000035231661304'
1337 *
1338 * @return [string] facebook id
1339 */
1340 Chance.prototype.fbid = function () {
1341 return '10000' + this.string({pool: "1234567890", length: 11});
1342 };
1343
1344 Chance.prototype.google_analytics = function () {
1345 var account = this.pad(this.natural({max: 999999}), 6);
1346 var property = this.pad(this.natural({max: 99}), 2);
1347
1348 return 'UA-' + account + '-' + property;
1349 };
1350
1351 Chance.prototype.hashtag = function () {
1352 return '#' + this.word();
1353 };
1354
1355 Chance.prototype.ip = function () {
1356 // Todo: This could return some reserved IPs. See http://vq.io/137dgYy
1357 // this should probably be updated to account for that rare as it may be
1358 return this.natural({min: 1, max: 254}) + '.' +
1359 this.natural({max: 255}) + '.' +
1360 this.natural({max: 255}) + '.' +
1361 this.natural({min: 1, max: 254});
1362 };
1363
1364 Chance.prototype.ipv6 = function () {
1365 var ip_addr = this.n(this.hash, 8, {length: 4});
1366
1367 return ip_addr.join(":");
1368 };
1369
1370 Chance.prototype.klout = function () {
1371 return this.natural({min: 1, max: 99});
1372 };
1373
1374 Chance.prototype.semver = function (options) {
1375 options = initOptions(options, { include_prerelease: true });
1376
1377 var range = this.pickone(["^", "~", "<", ">", "<=", ">=", "="]);
1378 if (options.range) {
1379 range = options.range;
1380 }
1381
1382 var prerelease = "";
1383 if (options.include_prerelease) {
1384 prerelease = this.weighted(["", "-dev", "-beta", "-alpha"], [50, 10, 5, 1]);
1385 }
1386 return range + this.rpg('3d10').join('.') + prerelease;
1387 };
1388
1389 Chance.prototype.tlds = function () {
1390 return ['com', 'org', 'edu', 'gov', 'co.uk', 'net', 'io', 'ac', 'ad', 'ae', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bm', 'bn', 'bo', 'bq', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'cr', 'cu', 'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mk', 'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nc', 'ne', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'su', 'sv', 'sx', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'za', 'zm', 'zw'];
1391 };
1392
1393 Chance.prototype.tld = function () {
1394 return this.pick(this.tlds());
1395 };
1396
1397 Chance.prototype.twitter = function () {
1398 return '@' + this.word();
1399 };
1400
1401 Chance.prototype.url = function (options) {
1402 options = initOptions(options, { protocol: "http", domain: this.domain(options), domain_prefix: "", path: this.word(), extensions: []});
1403
1404 var extension = options.extensions.length > 0 ? "." + this.pick(options.extensions) : "";
1405 var domain = options.domain_prefix ? options.domain_prefix + "." + options.domain : options.domain;
1406
1407 return options.protocol + "://" + domain + "/" + options.path + extension;
1408 };
1409
1410 Chance.prototype.port = function() {
1411 return this.integer({min: 0, max: 65535});
1412 };
1413
1414 Chance.prototype.locale = function (options) {
1415 options = initOptions(options);
1416 if (options.region){
1417 return this.pick(this.get("locale_regions"));
1418 } else {
1419 return this.pick(this.get("locale_languages"));
1420 }
1421 };
1422
1423 Chance.prototype.locales = function (options) {
1424 options = initOptions(options);
1425 if (options.region){
1426 return this.get("locale_regions");
1427 } else {
1428 return this.get("locale_languages");
1429 }
1430 };
1431
1432 Chance.prototype.loremPicsum = function (options) {
1433 options = initOptions(options, { width: 500, height: 500, greyscale: false, blurred: false });
1434
1435 var greyscale = options.greyscale ? 'g/' : '';
1436 var query = options.blurred ? '/?blur' : '/?random';
1437
1438 return 'https://picsum.photos/' + greyscale + options.width + '/' + options.height + query;
1439 }
1440
1441 // -- End Web --
1442
1443 // -- Location --
1444
1445 Chance.prototype.address = function (options) {
1446 options = initOptions(options);
1447 return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);
1448 };
1449
1450 Chance.prototype.altitude = function (options) {
1451 options = initOptions(options, {fixed: 5, min: 0, max: 8848});
1452 return this.floating({
1453 min: options.min,
1454 max: options.max,
1455 fixed: options.fixed
1456 });
1457 };
1458
1459 Chance.prototype.areacode = function (options) {
1460 options = initOptions(options, {parens : true});
1461 // Don't want area codes to start with 1, or have a 9 as the second digit
1462 var areacode = this.natural({min: 2, max: 9}).toString() +
1463 this.natural({min: 0, max: 8}).toString() +
1464 this.natural({min: 0, max: 9}).toString();
1465
1466 return options.parens ? '(' + areacode + ')' : areacode;
1467 };
1468
1469 Chance.prototype.city = function () {
1470 return this.capitalize(this.word({syllables: 3}));
1471 };
1472
1473 Chance.prototype.coordinates = function (options) {
1474 return this.latitude(options) + ', ' + this.longitude(options);
1475 };
1476
1477 Chance.prototype.countries = function () {
1478 return this.get("countries");
1479 };
1480
1481 Chance.prototype.country = function (options) {
1482 options = initOptions(options);
1483 var country = this.pick(this.countries());
1484 return options.raw ? country : options.full ? country.name : country.abbreviation;
1485 };
1486
1487 Chance.prototype.depth = function (options) {
1488 options = initOptions(options, {fixed: 5, min: -10994, max: 0});
1489 return this.floating({
1490 min: options.min,
1491 max: options.max,
1492 fixed: options.fixed
1493 });
1494 };
1495
1496 Chance.prototype.geohash = function (options) {
1497 options = initOptions(options, { length: 7 });
1498 return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });
1499 };
1500
1501 Chance.prototype.geojson = function (options) {
1502 return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);
1503 };
1504
1505 Chance.prototype.latitude = function (options) {
1506 options = initOptions(options, {fixed: 5, min: -90, max: 90});
1507 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1508 };
1509
1510 Chance.prototype.longitude = function (options) {
1511 options = initOptions(options, {fixed: 5, min: -180, max: 180});
1512 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1513 };
1514
1515 Chance.prototype.phone = function (options) {
1516 var self = this,
1517 numPick,
1518 ukNum = function (parts) {
1519 var section = [];
1520 //fills the section part of the phone number with random numbers.
1521 parts.sections.forEach(function(n) {
1522 section.push(self.string({ pool: '0123456789', length: n}));
1523 });
1524 return parts.area + section.join(' ');
1525 };
1526 options = initOptions(options, {
1527 formatted: true,
1528 country: 'us',
1529 mobile: false
1530 });
1531 if (!options.formatted) {
1532 options.parens = false;
1533 }
1534 var phone;
1535 switch (options.country) {
1536 case 'fr':
1537 if (!options.mobile) {
1538 numPick = this.pick([
1539 // Valid zone and département codes.
1540 '01' + this.pick(['30', '34', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '53', '55', '56', '58', '60', '64', '69', '70', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83']) + self.string({ pool: '0123456789', length: 6}),
1541 '02' + this.pick(['14', '18', '22', '23', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '40', '41', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '56', '57', '61', '62', '69', '72', '76', '77', '78', '85', '90', '96', '97', '98', '99']) + self.string({ pool: '0123456789', length: 6}),
1542 '03' + this.pick(['10', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '39', '44', '45', '51', '52', '54', '55', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90']) + self.string({ pool: '0123456789', length: 6}),
1543 '04' + this.pick(['11', '13', '15', '20', '22', '26', '27', '30', '32', '34', '37', '42', '43', '44', '50', '56', '57', '63', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '88', '89', '90', '91', '92', '93', '94', '95', '97', '98']) + self.string({ pool: '0123456789', length: 6}),
1544 '05' + this.pick(['08', '16', '17', '19', '24', '31', '32', '33', '34', '35', '40', '45', '46', '47', '49', '53', '55', '56', '57', '58', '59', '61', '62', '63', '64', '65', '67', '79', '81', '82', '86', '87', '90', '94']) + self.string({ pool: '0123456789', length: 6}),
1545 '09' + self.string({ pool: '0123456789', length: 8}),
1546 ]);
1547 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1548 } else {
1549 numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});
1550 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1551 }
1552 break;
1553 case 'uk':
1554 if (!options.mobile) {
1555 numPick = this.pick([
1556 //valid area codes of major cities/counties followed by random numbers in required format.
1557
1558 { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },
1559 { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },
1560 { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },
1561 { area: '024 7', sections: [3,4] },
1562 { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },
1563 { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },
1564 { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },
1565 { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },
1566 { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },
1567 { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },
1568 { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },
1569 { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },
1570 { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }
1571 ]);
1572 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');
1573 } else {
1574 numPick = this.pick([
1575 { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },
1576 { area: '07624 ', sections: [6] }
1577 ]);
1578 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');
1579 }
1580 break;
1581 case 'za':
1582 if (!options.mobile) {
1583 numPick = this.pick([
1584 '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1585 '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1586 '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),
1587 '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),
1588 '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1589 ]);
1590 phone = options.formatted || numPick;
1591 } else {
1592 numPick = this.pick([
1593 '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1594 '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),
1595 '06' + self.string({ pool: '0123456789', length: 7}),
1596 '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1597 '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),
1598 '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),
1599 ]);
1600 phone = options.formatted || numPick;
1601 }
1602 break;
1603 case 'us':
1604 var areacode = this.areacode(options).toString();
1605 var exchange = this.natural({ min: 2, max: 9 }).toString() +
1606 this.natural({ min: 0, max: 9 }).toString() +
1607 this.natural({ min: 0, max: 9 }).toString();
1608 var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}
1609 phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;
1610 break;
1611 case 'br':
1612 var areaCode = this.pick(["11", "12", "13", "14", "15", "16", "17", "18", "19", "21", "22", "24", "27", "28", "31", "32", "33", "34", "35", "37", "38", "41", "42", "43", "44", "45", "46", "47", "48", "49", "51", "53", "54", "55", "61", "62", "63", "64", "65", "66", "67", "68", "69", "71", "73", "74", "75", "77", "79", "81", "82", "83", "84", "85", "86", "87", "88", "89", "91", "92", "93", "94", "95", "96", "97", "98", "99"]);
1613 var prefix;
1614 if (options.mobile) {
1615 // Brasilian official reference (mobile): http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=330
1616 prefix = '9' + self.string({ pool: '0123456789', length: 4});
1617 } else {
1618 // Brasilian official reference: http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=331
1619 prefix = this.natural({ min: 2000, max: 5999 }).toString();
1620 }
1621 var mcdu = self.string({ pool: '0123456789', length: 4});
1622 phone = options.formatted ? '(' + areaCode + ') ' + prefix + '-' + mcdu : areaCode + prefix + mcdu;
1623 break;
1624 }
1625 return phone;
1626 };
1627
1628 Chance.prototype.postal = function () {
1629 // Postal District
1630 var pd = this.character({pool: "XVTSRPNKLMHJGECBA"});
1631 // Forward Sortation Area (FSA)
1632 var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: "upper"});
1633 // Local Delivery Unut (LDU)
1634 var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: "upper"}) + this.natural({max: 9});
1635
1636 return fsa + " " + ldu;
1637 };
1638
1639 Chance.prototype.counties = function (options) {
1640 options = initOptions(options, { country: 'uk' });
1641 return this.get("counties")[options.country.toLowerCase()];
1642 };
1643
1644 Chance.prototype.county = function (options) {
1645 return this.pick(this.counties(options)).name;
1646 };
1647
1648 Chance.prototype.provinces = function (options) {
1649 options = initOptions(options, { country: 'ca' });
1650 return this.get("provinces")[options.country.toLowerCase()];
1651 };
1652
1653 Chance.prototype.province = function (options) {
1654 return (options && options.full) ?
1655 this.pick(this.provinces(options)).name :
1656 this.pick(this.provinces(options)).abbreviation;
1657 };
1658
1659 Chance.prototype.state = function (options) {
1660 return (options && options.full) ?
1661 this.pick(this.states(options)).name :
1662 this.pick(this.states(options)).abbreviation;
1663 };
1664
1665 Chance.prototype.states = function (options) {
1666 options = initOptions(options, { country: 'us', us_states_and_dc: true } );
1667
1668 var states;
1669
1670 switch (options.country.toLowerCase()) {
1671 case 'us':
1672 var us_states_and_dc = this.get("us_states_and_dc"),
1673 territories = this.get("territories"),
1674 armed_forces = this.get("armed_forces");
1675
1676 states = [];
1677
1678 if (options.us_states_and_dc) {
1679 states = states.concat(us_states_and_dc);
1680 }
1681 if (options.territories) {
1682 states = states.concat(territories);
1683 }
1684 if (options.armed_forces) {
1685 states = states.concat(armed_forces);
1686 }
1687 break;
1688 case 'it':
1689 states = this.get("country_regions")[options.country.toLowerCase()];
1690 break;
1691 case 'uk':
1692 states = this.get("counties")[options.country.toLowerCase()];
1693 break;
1694 }
1695
1696 return states;
1697 };
1698
1699 Chance.prototype.street = function (options) {
1700 options = initOptions(options, { country: 'us', syllables: 2 });
1701 var street;
1702
1703 switch (options.country.toLowerCase()) {
1704 case 'us':
1705 street = this.word({ syllables: options.syllables });
1706 street = this.capitalize(street);
1707 street += ' ';
1708 street += options.short_suffix ?
1709 this.street_suffix(options).abbreviation :
1710 this.street_suffix(options).name;
1711 break;
1712 case 'it':
1713 street = this.word({ syllables: options.syllables });
1714 street = this.capitalize(street);
1715 street = (options.short_suffix ?
1716 this.street_suffix(options).abbreviation :
1717 this.street_suffix(options).name) + " " + street;
1718 break;
1719 }
1720 return street;
1721 };
1722
1723 Chance.prototype.street_suffix = function (options) {
1724 options = initOptions(options, { country: 'us' });
1725 return this.pick(this.street_suffixes(options));
1726 };
1727
1728 Chance.prototype.street_suffixes = function (options) {
1729 options = initOptions(options, { country: 'us' });
1730 // These are the most common suffixes.
1731 return this.get("street_suffixes")[options.country.toLowerCase()];
1732 };
1733
1734 // Note: only returning US zip codes, internationalization will be a whole
1735 // other beast to tackle at some point.
1736 Chance.prototype.zip = function (options) {
1737 var zip = this.n(this.natural, 5, {max: 9});
1738
1739 if (options && options.plusfour === true) {
1740 zip.push('-');
1741 zip = zip.concat(this.n(this.natural, 4, {max: 9}));
1742 }
1743
1744 return zip.join("");
1745 };
1746
1747 // -- End Location --
1748
1749 // -- Time
1750
1751 Chance.prototype.ampm = function () {
1752 return this.bool() ? 'am' : 'pm';
1753 };
1754
1755 Chance.prototype.date = function (options) {
1756 var date_string, date;
1757
1758 // If interval is specified we ignore preset
1759 if(options && (options.min || options.max)) {
1760 options = initOptions(options, {
1761 american: true,
1762 string: false
1763 });
1764 var min = typeof options.min !== "undefined" ? options.min.getTime() : 1;
1765 // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1
1766 var max = typeof options.max !== "undefined" ? options.max.getTime() : 8640000000000000;
1767
1768 date = new Date(this.integer({min: min, max: max}));
1769 } else {
1770 var m = this.month({raw: true});
1771 var daysInMonth = m.days;
1772
1773 if(options && options.month) {
1774 // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).
1775 daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;
1776 }
1777
1778 options = initOptions(options, {
1779 year: parseInt(this.year(), 10),
1780 // Necessary to subtract 1 because Date() 0-indexes month but not day or year
1781 // for some reason.
1782 month: m.numeric - 1,
1783 day: this.natural({min: 1, max: daysInMonth}),
1784 hour: this.hour({twentyfour: true}),
1785 minute: this.minute(),
1786 second: this.second(),
1787 millisecond: this.millisecond(),
1788 american: true,
1789 string: false
1790 });
1791
1792 date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);
1793 }
1794
1795 if (options.american) {
1796 // Adding 1 to the month is necessary because Date() 0-indexes
1797 // months but not day for some odd reason.
1798 date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
1799 } else {
1800 date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
1801 }
1802
1803 return options.string ? date_string : date;
1804 };
1805
1806 Chance.prototype.hammertime = function (options) {
1807 return this.date(options).getTime();
1808 };
1809
1810 Chance.prototype.hour = function (options) {
1811 options = initOptions(options, {
1812 min: options && options.twentyfour ? 0 : 1,
1813 max: options && options.twentyfour ? 23 : 12
1814 });
1815
1816 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1817 testRange(options.twentyfour && options.max > 23, "Chance: Max cannot be greater than 23 for twentyfour option.");
1818 testRange(!options.twentyfour && options.max > 12, "Chance: Max cannot be greater than 12.");
1819 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1820
1821 return this.natural({min: options.min, max: options.max});
1822 };
1823
1824 Chance.prototype.millisecond = function () {
1825 return this.natural({max: 999});
1826 };
1827
1828 Chance.prototype.minute = Chance.prototype.second = function (options) {
1829 options = initOptions(options, {min: 0, max: 59});
1830
1831 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1832 testRange(options.max > 59, "Chance: Max cannot be greater than 59.");
1833 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1834
1835 return this.natural({min: options.min, max: options.max});
1836 };
1837
1838 Chance.prototype.month = function (options) {
1839 options = initOptions(options, {min: 1, max: 12});
1840
1841 testRange(options.min < 1, "Chance: Min cannot be less than 1.");
1842 testRange(options.max > 12, "Chance: Max cannot be greater than 12.");
1843 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1844
1845 var month = this.pick(this.months().slice(options.min - 1, options.max));
1846 return options.raw ? month : month.name;
1847 };
1848
1849 Chance.prototype.months = function () {
1850 return this.get("months");
1851 };
1852
1853 Chance.prototype.second = function () {
1854 return this.natural({max: 59});
1855 };
1856
1857 Chance.prototype.timestamp = function () {
1858 return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});
1859 };
1860
1861 Chance.prototype.weekday = function (options) {
1862 options = initOptions(options, {weekday_only: false});
1863 var weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
1864 if (!options.weekday_only) {
1865 weekdays.push("Saturday");
1866 weekdays.push("Sunday");
1867 }
1868 return this.pickone(weekdays);
1869 };
1870
1871 Chance.prototype.year = function (options) {
1872 // Default to current year as min if none specified
1873 options = initOptions(options, {min: new Date().getFullYear()});
1874
1875 // Default to one century after current year as max if none specified
1876 options.max = (typeof options.max !== "undefined") ? options.max : options.min + 100;
1877
1878 return this.natural(options).toString();
1879 };
1880
1881 // -- End Time
1882
1883 // -- Finance --
1884
1885 Chance.prototype.cc = function (options) {
1886 options = initOptions(options);
1887
1888 var type, number, to_generate;
1889
1890 type = (options.type) ?
1891 this.cc_type({ name: options.type, raw: true }) :
1892 this.cc_type({ raw: true });
1893
1894 number = type.prefix.split("");
1895 to_generate = type.length - type.prefix.length - 1;
1896
1897 // Generates n - 1 digits
1898 number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));
1899
1900 // Generates the last digit according to Luhn algorithm
1901 number.push(this.luhn_calculate(number.join("")));
1902
1903 return number.join("");
1904 };
1905
1906 Chance.prototype.cc_types = function () {
1907 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
1908 return this.get("cc_types");
1909 };
1910
1911 Chance.prototype.cc_type = function (options) {
1912 options = initOptions(options);
1913 var types = this.cc_types(),
1914 type = null;
1915
1916 if (options.name) {
1917 for (var i = 0; i < types.length; i++) {
1918 // Accept either name or short_name to specify card type
1919 if (types[i].name === options.name || types[i].short_name === options.name) {
1920 type = types[i];
1921 break;
1922 }
1923 }
1924 if (type === null) {
1925 throw new RangeError("Chance: Credit card type '" + options.name + "' is not supported");
1926 }
1927 } else {
1928 type = this.pick(types);
1929 }
1930
1931 return options.raw ? type : type.name;
1932 };
1933
1934 // return all world currency by ISO 4217
1935 Chance.prototype.currency_types = function () {
1936 return this.get("currency_types");
1937 };
1938
1939 // return random world currency by ISO 4217
1940 Chance.prototype.currency = function () {
1941 return this.pick(this.currency_types());
1942 };
1943
1944 // return all timezones available
1945 Chance.prototype.timezones = function () {
1946 return this.get("timezones");
1947 };
1948
1949 // return random timezone
1950 Chance.prototype.timezone = function () {
1951 return this.pick(this.timezones());
1952 };
1953
1954 //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code
1955 Chance.prototype.currency_pair = function (returnAsString) {
1956 var currencies = this.unique(this.currency, 2, {
1957 comparator: function(arr, val) {
1958
1959 return arr.reduce(function(acc, item) {
1960 // If a match has been found, short circuit check and just return
1961 return acc || (item.code === val.code);
1962 }, false);
1963 }
1964 });
1965
1966 if (returnAsString) {
1967 return currencies[0].code + '/' + currencies[1].code;
1968 } else {
1969 return currencies;
1970 }
1971 };
1972
1973 Chance.prototype.dollar = function (options) {
1974 // By default, a somewhat more sane max for dollar than all available numbers
1975 options = initOptions(options, {max : 10000, min : 0});
1976
1977 var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),
1978 cents = dollar.split('.')[1];
1979
1980 if (cents === undefined) {
1981 dollar += '.00';
1982 } else if (cents.length < 2) {
1983 dollar = dollar + '0';
1984 }
1985
1986 if (dollar < 0) {
1987 return '-$' + dollar.replace('-', '');
1988 } else {
1989 return '$' + dollar;
1990 }
1991 };
1992
1993 Chance.prototype.euro = function (options) {
1994 return Number(this.dollar(options).replace("$", "")).toLocaleString() + "€";
1995 };
1996
1997 Chance.prototype.exp = function (options) {
1998 options = initOptions(options);
1999 var exp = {};
2000
2001 exp.year = this.exp_year();
2002
2003 // If the year is this year, need to ensure month is greater than the
2004 // current month or this expiration will not be valid
2005 if (exp.year === (new Date().getFullYear()).toString()) {
2006 exp.month = this.exp_month({future: true});
2007 } else {
2008 exp.month = this.exp_month();
2009 }
2010
2011 return options.raw ? exp : exp.month + '/' + exp.year;
2012 };
2013
2014 Chance.prototype.exp_month = function (options) {
2015 options = initOptions(options);
2016 var month, month_int,
2017 // Date object months are 0 indexed
2018 curMonth = new Date().getMonth() + 1;
2019
2020 if (options.future && (curMonth !== 12)) {
2021 do {
2022 month = this.month({raw: true}).numeric;
2023 month_int = parseInt(month, 10);
2024 } while (month_int <= curMonth);
2025 } else {
2026 month = this.month({raw: true}).numeric;
2027 }
2028
2029 return month;
2030 };
2031
2032 Chance.prototype.exp_year = function () {
2033 var curMonth = new Date().getMonth() + 1,
2034 curYear = new Date().getFullYear();
2035
2036 return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});
2037 };
2038
2039 Chance.prototype.vat = function (options) {
2040 options = initOptions(options, { country: 'it' });
2041 switch (options.country.toLowerCase()) {
2042 case 'it':
2043 return this.it_vat();
2044 }
2045 };
2046
2047 /**
2048 * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).
2049 * No country-specific formats support (yet)
2050 */
2051 Chance.prototype.iban = function () {
2052 var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
2053 var alphanum = alpha + '0123456789';
2054 var iban =
2055 this.string({ length: 2, pool: alpha }) +
2056 this.pad(this.integer({ min: 0, max: 99 }), 2) +
2057 this.string({ length: 4, pool: alphanum }) +
2058 this.pad(this.natural(), this.natural({ min: 6, max: 26 }));
2059 return iban;
2060 };
2061
2062 // -- End Finance
2063
2064 // -- Regional
2065
2066 Chance.prototype.it_vat = function () {
2067 var it_vat = this.natural({min: 1, max: 1800000});
2068
2069 it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);
2070 return it_vat + this.luhn_calculate(it_vat);
2071 };
2072
2073 /*
2074 * this generator is written following the official algorithm
2075 * all data can be passed explicitely or randomized by calling chance.cf() without options
2076 * the code does not check that the input data is valid (it goes beyond the scope of the generator)
2077 *
2078 * @param [Object] options = { first: first name,
2079 * last: last name,
2080 * gender: female|male,
2081 birthday: JavaScript date object,
2082 city: string(4), 1 letter + 3 numbers
2083 }
2084 * @return [string] codice fiscale
2085 *
2086 */
2087 Chance.prototype.cf = function (options) {
2088 options = options || {};
2089 var gender = !!options.gender ? options.gender : this.gender(),
2090 first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),
2091 last = !!options.last ? options.last : this.last( { nationality: 'it'} ),
2092 birthday = !!options.birthday ? options.birthday : this.birthday(),
2093 city = !!options.city ? options.city : this.pickone(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'L', 'M', 'Z']) + this.pad(this.natural({max:999}), 3),
2094 cf = [],
2095 name_generator = function(name, isLast) {
2096 var temp,
2097 return_value = [];
2098
2099 if (name.length < 3) {
2100 return_value = name.split("").concat("XXX".split("")).splice(0,3);
2101 }
2102 else {
2103 temp = name.toUpperCase().split('').map(function(c){
2104 return ("BCDFGHJKLMNPRSTVWZ".indexOf(c) !== -1) ? c : undefined;
2105 }).join('');
2106 if (temp.length > 3) {
2107 if (isLast) {
2108 temp = temp.substr(0,3);
2109 } else {
2110 temp = temp[0] + temp.substr(2,2);
2111 }
2112 }
2113 if (temp.length < 3) {
2114 return_value = temp;
2115 temp = name.toUpperCase().split('').map(function(c){
2116 return ("AEIOU".indexOf(c) !== -1) ? c : undefined;
2117 }).join('').substr(0, 3 - return_value.length);
2118 }
2119 return_value = return_value + temp;
2120 }
2121
2122 return return_value;
2123 },
2124 date_generator = function(birthday, gender, that) {
2125 var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];
2126
2127 return birthday.getFullYear().toString().substr(2) +
2128 lettermonths[birthday.getMonth()] +
2129 that.pad(birthday.getDate() + ((gender.toLowerCase() === "female") ? 40 : 0), 2);
2130 },
2131 checkdigit_generator = function(cf) {
2132 var range1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2133 range2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",
2134 evens = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2135 odds = "BAKPLCQDREVOSFTGUHMINJWZYX",
2136 digit = 0;
2137
2138
2139 for(var i = 0; i < 15; i++) {
2140 if (i % 2 !== 0) {
2141 digit += evens.indexOf(range2[range1.indexOf(cf[i])]);
2142 }
2143 else {
2144 digit += odds.indexOf(range2[range1.indexOf(cf[i])]);
2145 }
2146 }
2147 return evens[digit % 26];
2148 };
2149
2150 cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split("")).join("");
2151 cf += checkdigit_generator(cf.toUpperCase(), this);
2152
2153 return cf.toUpperCase();
2154 };
2155
2156 Chance.prototype.pl_pesel = function () {
2157 var number = this.natural({min: 1, max: 9999999999});
2158 var arr = this.pad(number, 10).split('');
2159 for (var i = 0; i < arr.length; i++) {
2160 arr[i] = parseInt(arr[i]);
2161 }
2162
2163 var controlNumber = (1 * arr[0] + 3 * arr[1] + 7 * arr[2] + 9 * arr[3] + 1 * arr[4] + 3 * arr[5] + 7 * arr[6] + 9 * arr[7] + 1 * arr[8] + 3 * arr[9]) % 10;
2164 if(controlNumber !== 0) {
2165 controlNumber = 10 - controlNumber;
2166 }
2167
2168 return arr.join('') + controlNumber;
2169 };
2170
2171 Chance.prototype.pl_nip = function () {
2172 var number = this.natural({min: 1, max: 999999999});
2173 var arr = this.pad(number, 9).split('');
2174 for (var i = 0; i < arr.length; i++) {
2175 arr[i] = parseInt(arr[i]);
2176 }
2177
2178 var controlNumber = (6 * arr[0] + 5 * arr[1] + 7 * arr[2] + 2 * arr[3] + 3 * arr[4] + 4 * arr[5] + 5 * arr[6] + 6 * arr[7] + 7 * arr[8]) % 11;
2179 if(controlNumber === 10) {
2180 return this.pl_nip();
2181 }
2182
2183 return arr.join('') + controlNumber;
2184 };
2185
2186 Chance.prototype.pl_regon = function () {
2187 var number = this.natural({min: 1, max: 99999999});
2188 var arr = this.pad(number, 8).split('');
2189 for (var i = 0; i < arr.length; i++) {
2190 arr[i] = parseInt(arr[i]);
2191 }
2192
2193 var controlNumber = (8 * arr[0] + 9 * arr[1] + 2 * arr[2] + 3 * arr[3] + 4 * arr[4] + 5 * arr[5] + 6 * arr[6] + 7 * arr[7]) % 11;
2194 if(controlNumber === 10) {
2195 controlNumber = 0;
2196 }
2197
2198 return arr.join('') + controlNumber;
2199 };
2200
2201 // -- End Regional
2202
2203 // -- Music --
2204
2205 Chance.prototype.note = function(options) {
2206 // choices for 'notes' option:
2207 // flatKey - chromatic scale with flat notes (default)
2208 // sharpKey - chromatic scale with sharp notes
2209 // flats - just flat notes
2210 // sharps - just sharp notes
2211 // naturals - just natural notes
2212 // all - naturals, sharps and flats
2213 options = initOptions(options, { notes : 'flatKey'});
2214 var scales = {
2215 naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],
2216 flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],
2217 sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']
2218 };
2219 scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))
2220 scales.flatKey = scales.naturals.concat(scales.flats)
2221 scales.sharpKey = scales.naturals.concat(scales.sharps)
2222 return this.pickone(scales[options.notes]);
2223 }
2224
2225 Chance.prototype.midi_note = function(options) {
2226 var min = 0;
2227 var max = 127;
2228 options = initOptions(options, { min : min, max : max });
2229 return this.integer({min: options.min, max: options.max});
2230 }
2231
2232 Chance.prototype.chord_quality = function(options) {
2233 options = initOptions(options, { jazz: true });
2234 var chord_qualities = ['maj', 'min', 'aug', 'dim'];
2235 if (options.jazz){
2236 chord_qualities = [
2237 'maj7',
2238 'min7',
2239 '7',
2240 'sus',
2241 'dim',
2242 'ø'
2243 ];
2244 }
2245 return this.pickone(chord_qualities);
2246 }
2247
2248 Chance.prototype.chord = function (options) {
2249 options = initOptions(options);
2250 return this.note(options) + this.chord_quality(options);
2251 }
2252
2253 Chance.prototype.tempo = function (options) {
2254 var min = 40;
2255 var max = 320;
2256 options = initOptions(options, {min: min, max: max});
2257 return this.integer({min: options.min, max: options.max});
2258 }
2259
2260 // -- End Music
2261
2262 // -- Miscellaneous --
2263
2264 // Coin - Flip, flip, flipadelphia
2265 Chance.prototype.coin = function(options) {
2266 return this.bool() ? "heads" : "tails";
2267 }
2268
2269 // Dice - For all the board game geeks out there, myself included ;)
2270 function diceFn (range) {
2271 return function () {
2272 return this.natural(range);
2273 };
2274 }
2275 Chance.prototype.d4 = diceFn({min: 1, max: 4});
2276 Chance.prototype.d6 = diceFn({min: 1, max: 6});
2277 Chance.prototype.d8 = diceFn({min: 1, max: 8});
2278 Chance.prototype.d10 = diceFn({min: 1, max: 10});
2279 Chance.prototype.d12 = diceFn({min: 1, max: 12});
2280 Chance.prototype.d20 = diceFn({min: 1, max: 20});
2281 Chance.prototype.d30 = diceFn({min: 1, max: 30});
2282 Chance.prototype.d100 = diceFn({min: 1, max: 100});
2283
2284 Chance.prototype.rpg = function (thrown, options) {
2285 options = initOptions(options);
2286 if (!thrown) {
2287 throw new RangeError("Chance: A type of die roll must be included");
2288 } else {
2289 var bits = thrown.toLowerCase().split("d"),
2290 rolls = [];
2291
2292 if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {
2293 throw new Error("Chance: Invalid format provided. Please provide #d# where the first # is the number of dice to roll, the second # is the max of each die");
2294 }
2295 for (var i = bits[0]; i > 0; i--) {
2296 rolls[i - 1] = this.natural({min: 1, max: bits[1]});
2297 }
2298 return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;
2299 }
2300 };
2301
2302 // Guid
2303 Chance.prototype.guid = function (options) {
2304 options = initOptions(options, { version: 5 });
2305
2306 var guid_pool = "abcdef1234567890",
2307 variant_pool = "ab89",
2308 guid = this.string({ pool: guid_pool, length: 8 }) + '-' +
2309 this.string({ pool: guid_pool, length: 4 }) + '-' +
2310 // The Version
2311 options.version +
2312 this.string({ pool: guid_pool, length: 3 }) + '-' +
2313 // The Variant
2314 this.string({ pool: variant_pool, length: 1 }) +
2315 this.string({ pool: guid_pool, length: 3 }) + '-' +
2316 this.string({ pool: guid_pool, length: 12 });
2317 return guid;
2318 };
2319
2320 // Hash
2321 Chance.prototype.hash = function (options) {
2322 options = initOptions(options, {length : 40, casing: 'lower'});
2323 var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;
2324 return this.string({pool: pool, length: options.length});
2325 };
2326
2327 Chance.prototype.luhn_check = function (num) {
2328 var str = num.toString();
2329 var checkDigit = +str.substring(str.length - 1);
2330 return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));
2331 };
2332
2333 Chance.prototype.luhn_calculate = function (num) {
2334 var digits = num.toString().split("").reverse();
2335 var sum = 0;
2336 var digit;
2337
2338 for (var i = 0, l = digits.length; l > i; ++i) {
2339 digit = +digits[i];
2340 if (i % 2 === 0) {
2341 digit *= 2;
2342 if (digit > 9) {
2343 digit -= 9;
2344 }
2345 }
2346 sum += digit;
2347 }
2348 return (sum * 9) % 10;
2349 };
2350
2351 // MD5 Hash
2352 Chance.prototype.md5 = function(options) {
2353 var opts = { str: '', key: null, raw: false };
2354
2355 if (!options) {
2356 opts.str = this.string();
2357 options = {};
2358 }
2359 else if (typeof options === 'string') {
2360 opts.str = options;
2361 options = {};
2362 }
2363 else if (typeof options !== 'object') {
2364 return null;
2365 }
2366 else if(options.constructor === 'Array') {
2367 return null;
2368 }
2369
2370 opts = initOptions(options, opts);
2371
2372 if(!opts.str){
2373 throw new Error('A parameter is required to return an md5 hash.');
2374 }
2375
2376 return this.bimd5.md5(opts.str, opts.key, opts.raw);
2377 };
2378
2379 /**
2380 * #Description:
2381 * =====================================================
2382 * Generate random file name with extension
2383 *
2384 * The argument provide extension type
2385 * -> raster
2386 * -> vector
2387 * -> 3d
2388 * -> document
2389 *
2390 * If nothing is provided the function return random file name with random
2391 * extension type of any kind
2392 *
2393 * The user can validate the file name length range
2394 * If nothing provided the generated file name is random
2395 *
2396 * #Extension Pool :
2397 * * Currently the supported extensions are
2398 * -> some of the most popular raster image extensions
2399 * -> some of the most popular vector image extensions
2400 * -> some of the most popular 3d image extensions
2401 * -> some of the most popular document extensions
2402 *
2403 * #Examples :
2404 * =====================================================
2405 *
2406 * Return random file name with random extension. The file extension
2407 * is provided by a predefined collection of extensions. More about the extension
2408 * pool can be found in #Extension Pool section
2409 *
2410 * chance.file()
2411 * => dsfsdhjf.xml
2412 *
2413 * In order to generate a file name with specific length, specify the
2414 * length property and integer value. The extension is going to be random
2415 *
2416 * chance.file({length : 10})
2417 * => asrtineqos.pdf
2418 *
2419 * In order to generate file with extension from some of the predefined groups
2420 * of the extension pool just specify the extension pool category in fileType property
2421 *
2422 * chance.file({fileType : 'raster'})
2423 * => dshgssds.psd
2424 *
2425 * You can provide specific extension for your files
2426 * chance.file({extension : 'html'})
2427 * => djfsd.html
2428 *
2429 * Or you could pass custom collection of extensions by array or by object
2430 * chance.file({extensions : [...]})
2431 * => dhgsdsd.psd
2432 *
2433 * chance.file({extensions : { key : [...], key : [...]}})
2434 * => djsfksdjsd.xml
2435 *
2436 * @param [collection] options
2437 * @return [string]
2438 *
2439 */
2440 Chance.prototype.file = function(options) {
2441
2442 var fileOptions = options || {};
2443 var poolCollectionKey = "fileExtension";
2444 var typeRange = Object.keys(this.get("fileExtension"));//['raster', 'vector', '3d', 'document'];
2445 var fileName;
2446 var fileExtension;
2447
2448 // Generate random file name
2449 fileName = this.word({length : fileOptions.length});
2450
2451 // Generate file by specific extension provided by the user
2452 if(fileOptions.extension) {
2453
2454 fileExtension = fileOptions.extension;
2455 return (fileName + '.' + fileExtension);
2456 }
2457
2458 // Generate file by specific extension collection
2459 if(fileOptions.extensions) {
2460
2461 if(Array.isArray(fileOptions.extensions)) {
2462
2463 fileExtension = this.pickone(fileOptions.extensions);
2464 return (fileName + '.' + fileExtension);
2465 }
2466 else if(fileOptions.extensions.constructor === Object) {
2467
2468 var extensionObjectCollection = fileOptions.extensions;
2469 var keys = Object.keys(extensionObjectCollection);
2470
2471 fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);
2472 return (fileName + '.' + fileExtension);
2473 }
2474
2475 throw new Error("Chance: Extensions must be an Array or Object");
2476 }
2477
2478 // Generate file extension based on specific file type
2479 if(fileOptions.fileType) {
2480
2481 var fileType = fileOptions.fileType;
2482 if(typeRange.indexOf(fileType) !== -1) {
2483
2484 fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);
2485 return (fileName + '.' + fileExtension);
2486 }
2487
2488 throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'");
2489 }
2490
2491 // Generate random file name if no extension options are passed
2492 fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);
2493 return (fileName + '.' + fileExtension);
2494 };
2495
2496 var data = {
2497
2498 firstNames: {
2499 "male": {
2500 "en": ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Charles", "Thomas", "Christopher", "Daniel", "Matthew", "George", "Donald", "Anthony", "Paul", "Mark", "Edward", "Steven", "Kenneth", "Andrew", "Brian", "Joshua", "Kevin", "Ronald", "Timothy", "Jason", "Jeffrey", "Frank", "Gary", "Ryan", "Nicholas", "Eric", "Stephen", "Jacob", "Larry", "Jonathan", "Scott", "Raymond", "Justin", "Brandon", "Gregory", "Samuel", "Benjamin", "Patrick", "Jack", "Henry", "Walter", "Dennis", "Jerry", "Alexander", "Peter", "Tyler", "Douglas", "Harold", "Aaron", "Jose", "Adam", "Arthur", "Zachary", "Carl", "Nathan", "Albert", "Kyle", "Lawrence", "Joe", "Willie", "Gerald", "Roger", "Keith", "Jeremy", "Terry", "Harry", "Ralph", "Sean", "Jesse", "Roy", "Louis", "Billy", "Austin", "Bruce", "Eugene", "Christian", "Bryan", "Wayne", "Russell", "Howard", "Fred", "Ethan", "Jordan", "Philip", "Alan", "Juan", "Randy", "Vincent", "Bobby", "Dylan", "Johnny", "Phillip", "Victor", "Clarence", "Ernest", "Martin", "Craig", "Stanley", "Shawn", "Travis", "Bradley", "Leonard", "Earl", "Gabriel", "Jimmy", "Francis", "Todd", "Noah", "Danny", "Dale", "Cody", "Carlos", "Allen", "Frederick", "Logan", "Curtis", "Alex", "Joel", "Luis", "Norman", "Marvin", "Glenn", "Tony", "Nathaniel", "Rodney", "Melvin", "Alfred", "Steve", "Cameron", "Chad", "Edwin", "Caleb", "Evan", "Antonio", "Lee", "Herbert", "Jeffery", "Isaac", "Derek", "Ricky", "Marcus", "Theodore", "Elijah", "Luke", "Jesus", "Eddie", "Troy", "Mike", "Dustin", "Ray", "Adrian", "Bernard", "Leroy", "Angel", "Randall", "Wesley", "Ian", "Jared", "Mason", "Hunter", "Calvin", "Oscar", "Clifford", "Jay", "Shane", "Ronnie", "Barry", "Lucas", "Corey", "Manuel", "Leo", "Tommy", "Warren", "Jackson", "Isaiah", "Connor", "Don", "Dean", "Jon", "Julian", "Miguel", "Bill", "Lloyd", "Charlie", "Mitchell", "Leon", "Jerome", "Darrell", "Jeremiah", "Alvin", "Brett", "Seth", "Floyd", "Jim", "Blake", "Micheal", "Gordon", "Trevor", "Lewis", "Erik", "Edgar", "Vernon", "Devin", "Gavin", "Jayden", "Chris", "Clyde", "Tom", "Derrick", "Mario", "Brent", "Marc", "Herman", "Chase", "Dominic", "Ricardo", "Franklin", "Maurice", "Max", "Aiden", "Owen", "Lester", "Gilbert", "Elmer", "Gene", "Francisco", "Glen", "Cory", "Garrett", "Clayton", "Sam", "Jorge", "Chester", "Alejandro", "Jeff", "Harvey", "Milton", "Cole", "Ivan", "Andre", "Duane", "Landon"],
2501 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163
2502 "it": ["Adolfo", "Alberto", "Aldo", "Alessandro", "Alessio", "Alfredo", "Alvaro", "Andrea", "Angelo", "Angiolo", "Antonino", "Antonio", "Attilio", "Benito", "Bernardo", "Bruno", "Carlo", "Cesare", "Christian", "Claudio", "Corrado", "Cosimo", "Cristian", "Cristiano", "Daniele", "Dario", "David", "Davide", "Diego", "Dino", "Domenico", "Duccio", "Edoardo", "Elia", "Elio", "Emanuele", "Emiliano", "Emilio", "Enrico", "Enzo", "Ettore", "Fabio", "Fabrizio", "Federico", "Ferdinando", "Fernando", "Filippo", "Francesco", "Franco", "Gabriele", "Giacomo", "Giampaolo", "Giampiero", "Giancarlo", "Gianfranco", "Gianluca", "Gianmarco", "Gianni", "Gino", "Giorgio", "Giovanni", "Giuliano", "Giulio", "Giuseppe", "Graziano", "Gregorio", "Guido", "Iacopo", "Jacopo", "Lapo", "Leonardo", "Lorenzo", "Luca", "Luciano", "Luigi", "Manuel", "Marcello", "Marco", "Marino", "Mario", "Massimiliano", "Massimo", "Matteo", "Mattia", "Maurizio", "Mauro", "Michele", "Mirko", "Mohamed", "Nello", "Neri", "Niccolò", "Nicola", "Osvaldo", "Otello", "Paolo", "Pier Luigi", "Piero", "Pietro", "Raffaele", "Remo", "Renato", "Renzo", "Riccardo", "Roberto", "Rolando", "Romano", "Salvatore", "Samuele", "Sandro", "Sergio", "Silvano", "Simone", "Stefano", "Thomas", "Tommaso", "Ubaldo", "Ugo", "Umberto", "Valerio", "Valter", "Vasco", "Vincenzo", "Vittorio"],
2503 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2504 "nl": ["Aaron","Abel","Adam","Adriaan","Albert","Alexander","Ali","Arjen","Arno","Bart","Bas","Bastiaan","Benjamin","Bob", "Boris","Bram","Brent","Cas","Casper","Chris","Christiaan","Cornelis","Daan","Daley","Damian","Dani","Daniel","Daniël","David","Dean","Dirk","Dylan","Egbert","Elijah","Erik","Erwin","Evert","Ezra","Fabian","Fedde","Finn","Florian","Floris","Frank","Frans","Frederik","Freek","Geert","Gerard","Gerben","Gerrit","Gijs","Guus","Hans","Hendrik","Henk","Herman","Hidde","Hugo","Jaap","Jan Jaap","Jan-Willem","Jack","Jacob","Jan","Jason","Jasper","Jayden","Jelle","Jelte","Jens","Jeroen","Jesse","Jim","Job","Joep","Johannes","John","Jonathan","Joris","Joshua","Joël","Julian","Kees","Kevin","Koen","Lars","Laurens","Leendert","Lennard","Lodewijk","Luc","Luca","Lucas","Lukas","Luuk","Maarten","Marcus","Martijn","Martin","Matthijs","Maurits","Max","Mees","Melle","Mick","Mika","Milan","Mohamed","Mohammed","Morris","Muhammed","Nathan","Nick","Nico","Niek","Niels","Noah","Noud","Olivier","Oscar","Owen","Paul","Pepijn","Peter","Pieter","Pim","Quinten","Reinier","Rens","Robin","Ruben","Sam","Samuel","Sander","Sebastiaan","Sem","Sep","Sepp","Siem","Simon","Stan","Stef","Steven","Stijn","Sven","Teun","Thijmen","Thijs","Thomas","Tijn","Tim","Timo","Tobias","Tom","Victor","Vince","Willem","Wim","Wouter","Yusuf"],
2505 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2506 "fr": ["Aaron","Abdon","Abel","Abélard","Abelin","Abondance","Abraham","Absalon","Acace","Achaire","Achille","Adalard","Adalbald","Adalbéron","Adalbert","Adalric","Adam","Adegrin","Adel","Adelin","Andelin","Adelphe","Adam","Adéodat","Adhémar","Adjutor","Adolphe","Adonis","Adon","Adrien","Agapet","Agathange","Agathon","Agilbert","Agénor","Agnan","Aignan","Agrippin","Aimable","Aimé","Alain","Alban","Albin","Aubin","Albéric","Albert","Albertet","Alcibiade","Alcide","Alcée","Alcime","Aldonce","Aldric","Aldéric","Aleaume","Alexandre","Alexis","Alix","Alliaume","Aleaume","Almine","Almire","Aloïs","Alphée","Alphonse","Alpinien","Alverède","Amalric","Amaury","Amandin","Amant","Ambroise","Amédée","Amélien","Amiel","Amour","Anaël","Anastase","Anatole","Ancelin","Andéol","Andoche","André","Andoche","Ange","Angelin","Angilbe","Anglebert","Angoustan","Anicet","Anne","Annibal","Ansbert","Anselme","Anthelme","Antheaume","Anthime","Antide","Antoine","Antonius","Antonin","Apollinaire","Apollon","Aquilin","Arcade","Archambaud","Archambeau","Archange","Archibald","Arian","Ariel","Ariste","Aristide","Armand","Armel","Armin","Arnould","Arnaud","Arolde","Arsène","Arsinoé","Arthaud","Arthème","Arthur","Ascelin","Athanase","Aubry","Audebert","Audouin","Audran","Audric","Auguste","Augustin","Aurèle","Aurélien","Aurian","Auxence","Axel","Aymard","Aymeric","Aymon","Aymond","Balthazar","Baptiste","Barnabé","Barthélemy","Bartimée","Basile","Bastien","Baudouin","Bénigne","Benjamin","Benoît","Bérenger","Bérard","Bernard","Bertrand","Blaise","Bon","Boniface","Bouchard","Brice","Brieuc","Bruno","Brunon","Calixte","Calliste","Camélien","Camille","Camillien","Candide","Caribert","Carloman","Cassandre","Cassien","Cédric","Céleste","Célestin","Célien","Césaire","César","Charles","Charlemagne","Childebert","Chilpéric","Chrétien","Christian","Christodule","Christophe","Chrysostome","Clarence","Claude","Claudien","Cléandre","Clément","Clotaire","Côme","Constance","Constant","Constantin","Corentin","Cyprien","Cyriaque","Cyrille","Cyril","Damien","Daniel","David","Delphin","Denis","Désiré","Didier","Dieudonné","Dimitri","Dominique","Dorian","Dorothée","Edgard","Edmond","Édouard","Éleuthère","Élie","Élisée","Émeric","Émile","Émilien","Emmanuel","Enguerrand","Épiphane","Éric","Esprit","Ernest","Étienne","Eubert","Eudes","Eudoxe","Eugène","Eusèbe","Eustache","Évariste","Évrard","Fabien","Fabrice","Falba","Félicité","Félix","Ferdinand","Fiacre","Fidèle","Firmin","Flavien","Flodoard","Florent","Florentin","Florestan","Florian","Fortuné","Foulques","Francisque","François","Français","Franciscus","Francs","Frédéric","Fulbert","Fulcran","Fulgence","Gabin","Gabriel","Gaël","Garnier","Gaston","Gaspard","Gatien","Gaud","Gautier","Gédéon","Geoffroy","Georges","Géraud","Gérard","Gerbert","Germain","Gervais","Ghislain","Gilbert","Gilles","Girart","Gislebert","Gondebaud","Gonthier","Gontran","Gonzague","Grégoire","Guérin","Gui","Guillaume","Gustave","Guy","Guyot","Hardouin","Hector","Hédelin","Hélier","Henri","Herbert","Herluin","Hervé","Hilaire","Hildebert","Hincmar","Hippolyte","Honoré","Hubert","Hugues","Innocent","Isabeau","Isidore","Jacques","Japhet","Jason","Jean","Jeannel","Jeannot","Jérémie","Jérôme","Joachim","Joanny","Job","Jocelyn","Joël","Johan","Jonas","Jonathan","Joseph","Josse","Josselin","Jourdain","Jude","Judicaël","Jules","Julien","Juste","Justin","Lambert","Landry","Laurent","Lazare","Léandre","Léon","Léonard","Léopold","Leu","Loup","Leufroy","Libère","Liétald","Lionel","Loïc","Longin","Lorrain","Lorraine","Lothaire","Louis","Loup","Luc","Lucas","Lucien","Ludolphe","Ludovic","Macaire","Malo","Mamert","Manassé","Marc","Marceau","Marcel","Marcelin","Marius","Marseille","Martial","Martin","Mathurin","Matthias","Mathias","Matthieu","Maugis","Maurice","Mauricet","Maxence","Maxime","Maximilien","Mayeul","Médéric","Melchior","Mence","Merlin","Mérovée","Michaël","Michel","Moïse","Morgan","Nathan","Nathanaël","Narcisse","Néhémie","Nestor","Nestor","Nicéphore","Nicolas","Noé","Noël","Norbert","Normand","Normands","Octave","Odilon","Odon","Oger","Olivier","Oury","Pacôme","Palémon","Parfait","Pascal","Paterne","Patrice","Paul","Pépin","Perceval","Philémon","Philibert","Philippe","Philothée","Pie","Pierre","Pierrick","Prosper","Quentin","Raoul","Raphaël","Raymond","Régis","Réjean","Rémi","Renaud","René","Reybaud","Richard","Robert","Roch","Rodolphe","Rodrigue","Roger","Roland","Romain","Romuald","Roméo","Rome","Ronan","Roselin","Salomon","Samuel","Savin","Savinien","Scholastique","Sébastien","Séraphin","Serge","Séverin","Sidoine","Sigebert","Sigismond","Silvère","Simon","Siméon","Sixte","Stanislas","Stéphane","Stephan","Sylvain","Sylvestre","Tancrède","Tanguy","Taurin","Théodore","Théodose","Théophile","Théophraste","Thibault","Thibert","Thierry","Thomas","Timoléon","Timothée","Titien","Tonnin","Toussaint","Trajan","Tristan","Turold","Tim","Ulysse","Urbain","Valentin","Valère","Valéry","Venance","Venant","Venceslas","Vianney","Victor","Victorien","Victorin","Vigile","Vincent","Vital","Vitalien","Vivien","Waleran","Wandrille","Xavier","Xénophon","Yves","Zacharie","Zaché","Zéphirin"]
2507 },
2508
2509 "female": {
2510 "en": ["Mary", "Emma", "Elizabeth", "Minnie", "Margaret", "Ida", "Alice", "Bertha", "Sarah", "Annie", "Clara", "Ella", "Florence", "Cora", "Martha", "Laura", "Nellie", "Grace", "Carrie", "Maude", "Mabel", "Bessie", "Jennie", "Gertrude", "Julia", "Hattie", "Edith", "Mattie", "Rose", "Catherine", "Lillian", "Ada", "Lillie", "Helen", "Jessie", "Louise", "Ethel", "Lula", "Myrtle", "Eva", "Frances", "Lena", "Lucy", "Edna", "Maggie", "Pearl", "Daisy", "Fannie", "Josephine", "Dora", "Rosa", "Katherine", "Agnes", "Marie", "Nora", "May", "Mamie", "Blanche", "Stella", "Ellen", "Nancy", "Effie", "Sallie", "Nettie", "Della", "Lizzie", "Flora", "Susie", "Maud", "Mae", "Etta", "Harriet", "Sadie", "Caroline", "Katie", "Lydia", "Elsie", "Kate", "Susan", "Mollie", "Alma", "Addie", "Georgia", "Eliza", "Lulu", "Nannie", "Lottie", "Amanda", "Belle", "Charlotte", "Rebecca", "Ruth", "Viola", "Olive", "Amelia", "Hannah", "Jane", "Virginia", "Emily", "Matilda", "Irene", "Kathryn", "Esther", "Willie", "Henrietta", "Ollie", "Amy", "Rachel", "Sara", "Estella", "Theresa", "Augusta", "Ora", "Pauline", "Josie", "Lola", "Sophia", "Leona", "Anne", "Mildred", "Ann", "Beulah", "Callie", "Lou", "Delia", "Eleanor", "Barbara", "Iva", "Louisa", "Maria", "Mayme", "Evelyn", "Estelle", "Nina", "Betty", "Marion", "Bettie", "Dorothy", "Luella", "Inez", "Lela", "Rosie", "Allie", "Millie", "Janie", "Cornelia", "Victoria", "Ruby", "Winifred", "Alta", "Celia", "Christine", "Beatrice", "Birdie", "Harriett", "Mable", "Myra", "Sophie", "Tillie", "Isabel", "Sylvia", "Carolyn", "Isabelle", "Leila", "Sally", "Ina", "Essie", "Bertie", "Nell", "Alberta", "Katharine", "Lora", "Rena", "Mina", "Rhoda", "Mathilda", "Abbie", "Eula", "Dollie", "Hettie", "Eunice", "Fanny", "Ola", "Lenora", "Adelaide", "Christina", "Lelia", "Nelle", "Sue", "Johanna", "Lilly", "Lucinda", "Minerva", "Lettie", "Roxie", "Cynthia", "Helena", "Hilda", "Hulda", "Bernice", "Genevieve", "Jean", "Cordelia", "Marian", "Francis", "Jeanette", "Adeline", "Gussie", "Leah", "Lois", "Lura", "Mittie", "Hallie", "Isabella", "Olga", "Phoebe", "Teresa", "Hester", "Lida", "Lina", "Winnie", "Claudia", "Marguerite", "Vera", "Cecelia", "Bess", "Emilie", "Rosetta", "Verna", "Myrtie", "Cecilia", "Elva", "Olivia", "Ophelia", "Georgie", "Elnora", "Violet", "Adele", "Lily", "Linnie", "Loretta", "Madge", "Polly", "Virgie", "Eugenia", "Lucile", "Lucille", "Mabelle", "Rosalie"],
2511 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162
2512 "it": ["Ada", "Adriana", "Alessandra", "Alessia", "Alice", "Angela", "Anna", "Anna Maria", "Annalisa", "Annita", "Annunziata", "Antonella", "Arianna", "Asia", "Assunta", "Aurora", "Barbara", "Beatrice", "Benedetta", "Bianca", "Bruna", "Camilla", "Carla", "Carlotta", "Carmela", "Carolina", "Caterina", "Catia", "Cecilia", "Chiara", "Cinzia", "Clara", "Claudia", "Costanza", "Cristina", "Daniela", "Debora", "Diletta", "Dina", "Donatella", "Elena", "Eleonora", "Elisa", "Elisabetta", "Emanuela", "Emma", "Eva", "Federica", "Fernanda", "Fiorella", "Fiorenza", "Flora", "Franca", "Francesca", "Gabriella", "Gaia", "Gemma", "Giada", "Gianna", "Gina", "Ginevra", "Giorgia", "Giovanna", "Giulia", "Giuliana", "Giuseppa", "Giuseppina", "Grazia", "Graziella", "Greta", "Ida", "Ilaria", "Ines", "Iolanda", "Irene", "Irma", "Isabella", "Jessica", "Laura", "Lea", "Letizia", "Licia", "Lidia", "Liliana", "Lina", "Linda", "Lisa", "Livia", "Loretta", "Luana", "Lucia", "Luciana", "Lucrezia", "Luisa", "Manuela", "Mara", "Marcella", "Margherita", "Maria", "Maria Cristina", "Maria Grazia", "Maria Luisa", "Maria Pia", "Maria Teresa", "Marina", "Marisa", "Marta", "Martina", "Marzia", "Matilde", "Melissa", "Michela", "Milena", "Mirella", "Monica", "Natalina", "Nella", "Nicoletta", "Noemi", "Olga", "Paola", "Patrizia", "Piera", "Pierina", "Raffaella", "Rebecca", "Renata", "Rina", "Rita", "Roberta", "Rosa", "Rosanna", "Rossana", "Rossella", "Sabrina", "Sandra", "Sara", "Serena", "Silvana", "Silvia", "Simona", "Simonetta", "Sofia", "Sonia", "Stefania", "Susanna", "Teresa", "Tina", "Tiziana", "Tosca", "Valentina", "Valeria", "Vanda", "Vanessa", "Vanna", "Vera", "Veronica", "Vilma", "Viola", "Virginia", "Vittoria"],
2513 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2514 "nl": ["Ada", "Arianne", "Afke", "Amanda", "Amber", "Amy", "Aniek", "Anita", "Anja", "Anna", "Anne", "Annelies", "Annemarie", "Annette", "Anouk", "Astrid", "Aukje", "Barbara", "Bianca", "Carla", "Carlijn", "Carolien", "Chantal", "Charlotte", "Claudia", "Daniëlle", "Debora", "Diane", "Dora", "Eline", "Elise", "Ella", "Ellen", "Emma", "Esmee", "Evelien", "Esther", "Erica", "Eva", "Femke", "Fleur", "Floor", "Froukje", "Gea", "Gerda", "Hanna", "Hanneke", "Heleen", "Hilde", "Ilona", "Ina", "Inge", "Ingrid", "Iris", "Isabel", "Isabelle", "Janneke", "Jasmijn", "Jeanine", "Jennifer", "Jessica", "Johanna", "Joke", "Julia", "Julie", "Karen", "Karin", "Katja", "Kim", "Lara", "Laura", "Lena", "Lianne", "Lieke", "Lilian", "Linda", "Lisa", "Lisanne", "Lotte", "Louise", "Maaike", "Manon", "Marga", "Maria", "Marissa", "Marit", "Marjolein", "Martine", "Marleen", "Melissa", "Merel", "Miranda", "Michelle", "Mirjam", "Mirthe", "Naomi", "Natalie", 'Nienke', "Nina", "Noortje", "Olivia", "Patricia", "Paula", "Paulien", "Ramona", "Ria", "Rianne", "Roos", "Rosanne", "Ruth", "Sabrina", "Sandra", "Sanne", "Sara", "Saskia", "Silvia", "Sofia", "Sophie", "Sonja", "Suzanne", "Tamara", "Tess", "Tessa", "Tineke", "Valerie", "Vanessa", "Veerle", "Vera", "Victoria", "Wendy", "Willeke", "Yvonne", "Zoë"],
2515 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2516 "fr": ["Abdon","Abel","Abigaëlle","Abigaïl","Acacius","Acanthe","Adalbert","Adalsinde","Adegrine","Adélaïde","Adèle","Adélie","Adeline","Adeltrude","Adolphe","Adonis","Adrastée","Adrehilde","Adrienne","Agathe","Agilbert","Aglaé","Aignan","Agneflète","Agnès","Agrippine","Aimé","Alaine","Alaïs","Albane","Albérade","Alberte","Alcide","Alcine","Alcyone","Aldegonde","Aleth","Alexandrine","Alexine","Alice","Aliénor","Aliette","Aline","Alix","Alizé","Aloïse","Aloyse","Alphonsine","Althée","Amaliane","Amalthée","Amande","Amandine","Amant","Amarande","Amaranthe","Amaryllis","Ambre","Ambroisie","Amélie","Améthyste","Aminte","Anaël","Anaïs","Anastasie","Anatole","Ancelin","Andrée","Anémone","Angadrême","Angèle","Angeline","Angélique","Angilbert","Anicet","Annabelle","Anne","Annette","Annick","Annie","Annonciade","Ansbert","Anstrudie","Anthelme","Antigone","Antoinette","Antonine","Aphélie","Apolline","Apollonie","Aquiline","Arabelle","Arcadie","Archange","Argine","Ariane","Aricie","Ariel","Arielle","Arlette","Armance","Armande","Armandine","Armelle","Armide","Armelle","Armin","Arnaud","Arsène","Arsinoé","Artémis","Arthur","Ascelin","Ascension","Assomption","Astarté","Astérie","Astrée","Astrid","Athalie","Athanasie","Athina","Aube","Albert","Aude","Audrey","Augustine","Aure","Aurélie","Aurélien","Aurèle","Aurore","Auxence","Aveline","Abigaëlle","Avoye","Axelle","Aymard","Azalée","Adèle","Adeline","Barbe","Basilisse","Bathilde","Béatrice","Béatrix","Bénédicte","Bérengère","Bernadette","Berthe","Bertille","Beuve","Blanche","Blanc","Blandine","Brigitte","Brune","Brunehilde","Callista","Camille","Capucine","Carine","Caroline","Cassandre","Catherine","Cécile","Céleste","Célestine","Céline","Chantal","Charlène","Charline","Charlotte","Chloé","Christelle","Christiane","Christine","Claire","Clara","Claude","Claudine","Clarisse","Clémence","Clémentine","Cléo","Clio","Clotilde","Coline","Conception","Constance","Coralie","Coraline","Corentine","Corinne","Cyrielle","Daniel","Daniel","Daphné","Débora","Delphine","Denise","Diane","Dieudonné","Dominique","Doriane","Dorothée","Douce","Édith","Edmée","Éléonore","Éliane","Élia","Éliette","Élisabeth","Élise","Ella","Élodie","Éloïse","Elsa","Émeline","Émérance","Émérentienne","Émérencie","Émilie","Emma","Emmanuelle","Emmelie","Ernestine","Esther","Estelle","Eudoxie","Eugénie","Eulalie","Euphrasie","Eusébie","Évangéline","Eva","Ève","Évelyne","Fanny","Fantine","Faustine","Félicie","Fernande","Flavie","Fleur","Flore","Florence","Florie","Fortuné","France","Francia","Françoise","Francine","Gabrielle","Gaëlle","Garance","Geneviève","Georgette","Gerberge","Germaine","Gertrude","Gisèle","Guenièvre","Guilhemine","Guillemette","Gustave","Gwenael","Hélène","Héloïse","Henriette","Hermine","Hermione","Hippolyte","Honorine","Hortense","Huguette","Ines","Irène","Irina","Iris","Isabeau","Isabelle","Iseult","Isolde","Ismérie","Jacinthe","Jacqueline","Jade","Janine","Jeanne","Jocelyne","Joëlle","Joséphine","Judith","Julia","Julie","Jules","Juliette","Justine","Katy","Kathy","Katie","Laura","Laure","Laureline","Laurence","Laurene","Lauriane","Laurianne","Laurine","Léa","Léna","Léonie","Léon","Léontine","Lorraine","Lucie","Lucienne","Lucille","Ludivine","Lydie","Lydie","Megane","Madeleine","Magali","Maguelone","Mallaury","Manon","Marceline","Margot","Marguerite","Marianne","Marie","Myriam","Marie","Marine","Marion","Marlène","Marthe","Martine","Mathilde","Maud","Maureen","Mauricette","Maxime","Mélanie","Melissa","Mélissandre","Mélisande","Mélodie","Michel","Micheline","Mireille","Miriam","Moïse","Monique","Morgane","Muriel","Mylène","Nadège","Nadine","Nathalie","Nicole","Nicolette","Nine","Noël","Noémie","Océane","Odette","Odile","Olive","Olivia","Olympe","Ombline","Ombeline","Ophélie","Oriande","Oriane","Ozanne","Pascale","Pascaline","Paule","Paulette","Pauline","Priscille","Prisca","Prisque","Pécine","Pélagie","Pénélope","Perrine","Pétronille","Philippine","Philomène","Philothée","Primerose","Prudence","Pulchérie","Quentine","Quiéta","Quintia","Quintilla","Rachel","Raphaëlle","Raymonde","Rebecca","Régine","Réjeanne","René","Rita","Rita","Rolande","Romane","Rosalie","Rose","Roseline","Sabine","Salomé","Sandra","Sandrine","Sarah","Ségolène","Séverine","Sibylle","Simone","Sixt","Solange","Soline","Solène","Sophie","Stéphanie","Suzanne","Sylvain","Sylvie","Tatiana","Thaïs","Théodora","Thérèse","Tiphaine","Ursule","Valentine","Valérie","Véronique","Victoire","Victorine","Vinciane","Violette","Virginie","Viviane","Xavière","Yolande","Ysaline","Yvette","Yvonne","Zélie","Zita","Zoé"]
2517 }
2518 },
2519
2520 lastNames: {
2521 "en": ['Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor', 'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson', 'Clark', 'Rodriguez', 'Lewis', 'Lee', 'Walker', 'Hall', 'Allen', 'Young', 'Hernandez', 'King', 'Wright', 'Lopez', 'Hill', 'Scott', 'Green', 'Adams', 'Baker', 'Gonzalez', 'Nelson', 'Carter', 'Mitchell', 'Perez', 'Roberts', 'Turner', 'Phillips', 'Campbell', 'Parker', 'Evans', 'Edwards', 'Collins', 'Stewart', 'Sanchez', 'Morris', 'Rogers', 'Reed', 'Cook', 'Morgan', 'Bell', 'Murphy', 'Bailey', 'Rivera', 'Cooper', 'Richardson', 'Cox', 'Howard', 'Ward', 'Torres', 'Peterson', 'Gray', 'Ramirez', 'James', 'Watson', 'Brooks', 'Kelly', 'Sanders', 'Price', 'Bennett', 'Wood', 'Barnes', 'Ross', 'Henderson', 'Coleman', 'Jenkins', 'Perry', 'Powell', 'Long', 'Patterson', 'Hughes', 'Flores', 'Washington', 'Butler', 'Simmons', 'Foster', 'Gonzales', 'Bryant', 'Alexander', 'Russell', 'Griffin', 'Diaz', 'Hayes', 'Myers', 'Ford', 'Hamilton', 'Graham', 'Sullivan', 'Wallace', 'Woods', 'Cole', 'West', 'Jordan', 'Owens', 'Reynolds', 'Fisher', 'Ellis', 'Harrison', 'Gibson', 'McDonald', 'Cruz', 'Marshall', 'Ortiz', 'Gomez', 'Murray', 'Freeman', 'Wells', 'Webb', 'Simpson', 'Stevens', 'Tucker', 'Porter', 'Hunter', 'Hicks', 'Crawford', 'Henry', 'Boyd', 'Mason', 'Morales', 'Kennedy', 'Warren', 'Dixon', 'Ramos', 'Reyes', 'Burns', 'Gordon', 'Shaw', 'Holmes', 'Rice', 'Robertson', 'Hunt', 'Black', 'Daniels', 'Palmer', 'Mills', 'Nichols', 'Grant', 'Knight', 'Ferguson', 'Rose', 'Stone', 'Hawkins', 'Dunn', 'Perkins', 'Hudson', 'Spencer', 'Gardner', 'Stephens', 'Payne', 'Pierce', 'Berry', 'Matthews', 'Arnold', 'Wagner', 'Willis', 'Ray', 'Watkins', 'Olson', 'Carroll', 'Duncan', 'Snyder', 'Hart', 'Cunningham', 'Bradley', 'Lane', 'Andrews', 'Ruiz', 'Harper', 'Fox', 'Riley', 'Armstrong', 'Carpenter', 'Weaver', 'Greene', 'Lawrence', 'Elliott', 'Chavez', 'Sims', 'Austin', 'Peters', 'Kelley', 'Franklin', 'Lawson', 'Fields', 'Gutierrez', 'Ryan', 'Schmidt', 'Carr', 'Vasquez', 'Castillo', 'Wheeler', 'Chapman', 'Oliver', 'Montgomery', 'Richards', 'Williamson', 'Johnston', 'Banks', 'Meyer', 'Bishop', 'McCoy', 'Howell', 'Alvarez', 'Morrison', 'Hansen', 'Fernandez', 'Garza', 'Harvey', 'Little', 'Burton', 'Stanley', 'Nguyen', 'George', 'Jacobs', 'Reid', 'Kim', 'Fuller', 'Lynch', 'Dean', 'Gilbert', 'Garrett', 'Romero', 'Welch', 'Larson', 'Frazier', 'Burke', 'Hanson', 'Day', 'Mendoza', 'Moreno', 'Bowman', 'Medina', 'Fowler', 'Brewer', 'Hoffman', 'Carlson', 'Silva', 'Pearson', 'Holland', 'Douglas', 'Fleming', 'Jensen', 'Vargas', 'Byrd', 'Davidson', 'Hopkins', 'May', 'Terry', 'Herrera', 'Wade', 'Soto', 'Walters', 'Curtis', 'Neal', 'Caldwell', 'Lowe', 'Jennings', 'Barnett', 'Graves', 'Jimenez', 'Horton', 'Shelton', 'Barrett', 'Obrien', 'Castro', 'Sutton', 'Gregory', 'McKinney', 'Lucas', 'Miles', 'Craig', 'Rodriquez', 'Chambers', 'Holt', 'Lambert', 'Fletcher', 'Watts', 'Bates', 'Hale', 'Rhodes', 'Pena', 'Beck', 'Newman', 'Haynes', 'McDaniel', 'Mendez', 'Bush', 'Vaughn', 'Parks', 'Dawson', 'Santiago', 'Norris', 'Hardy', 'Love', 'Steele', 'Curry', 'Powers', 'Schultz', 'Barker', 'Guzman', 'Page', 'Munoz', 'Ball', 'Keller', 'Chandler', 'Weber', 'Leonard', 'Walsh', 'Lyons', 'Ramsey', 'Wolfe', 'Schneider', 'Mullins', 'Benson', 'Sharp', 'Bowen', 'Daniel', 'Barber', 'Cummings', 'Hines', 'Baldwin', 'Griffith', 'Valdez', 'Hubbard', 'Salazar', 'Reeves', 'Warner', 'Stevenson', 'Burgess', 'Santos', 'Tate', 'Cross', 'Garner', 'Mann', 'Mack', 'Moss', 'Thornton', 'Dennis', 'McGee', 'Farmer', 'Delgado', 'Aguilar', 'Vega', 'Glover', 'Manning', 'Cohen', 'Harmon', 'Rodgers', 'Robbins', 'Newton', 'Todd', 'Blair', 'Higgins', 'Ingram', 'Reese', 'Cannon', 'Strickland', 'Townsend', 'Potter', 'Goodwin', 'Walton', 'Rowe', 'Hampton', 'Ortega', 'Patton', 'Swanson', 'Joseph', 'Francis', 'Goodman', 'Maldonado', 'Yates', 'Becker', 'Erickson', 'Hodges', 'Rios', 'Conner', 'Adkins', 'Webster', 'Norman', 'Malone', 'Hammond', 'Flowers', 'Cobb', 'Moody', 'Quinn', 'Blake', 'Maxwell', 'Pope', 'Floyd', 'Osborne', 'Paul', 'McCarthy', 'Guerrero', 'Lindsey', 'Estrada', 'Sandoval', 'Gibbs', 'Tyler', 'Gross', 'Fitzgerald', 'Stokes', 'Doyle', 'Sherman', 'Saunders', 'Wise', 'Colon', 'Gill', 'Alvarado', 'Greer', 'Padilla', 'Simon', 'Waters', 'Nunez', 'Ballard', 'Schwartz', 'McBride', 'Houston', 'Christensen', 'Klein', 'Pratt', 'Briggs', 'Parsons', 'McLaughlin', 'Zimmerman', 'French', 'Buchanan', 'Moran', 'Copeland', 'Roy', 'Pittman', 'Brady', 'McCormick', 'Holloway', 'Brock', 'Poole', 'Frank', 'Logan', 'Owen', 'Bass', 'Marsh', 'Drake', 'Wong', 'Jefferson', 'Park', 'Morton', 'Abbott', 'Sparks', 'Patrick', 'Norton', 'Huff', 'Clayton', 'Massey', 'Lloyd', 'Figueroa', 'Carson', 'Bowers', 'Roberson', 'Barton', 'Tran', 'Lamb', 'Harrington', 'Casey', 'Boone', 'Cortez', 'Clarke', 'Mathis', 'Singleton', 'Wilkins', 'Cain', 'Bryan', 'Underwood', 'Hogan', 'McKenzie', 'Collier', 'Luna', 'Phelps', 'McGuire', 'Allison', 'Bridges', 'Wilkerson', 'Nash', 'Summers', 'Atkins'],
2522 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)
2523 "it": ["Acciai", "Aglietti", "Agostini", "Agresti", "Ahmed", "Aiazzi", "Albanese", "Alberti", "Alessi", "Alfani", "Alinari", "Alterini", "Amato", "Ammannati", "Ancillotti", "Andrei", "Andreini", "Andreoni", "Angeli", "Anichini", "Antonelli", "Antonini", "Arena", "Ariani", "Arnetoli", "Arrighi", "Baccani", "Baccetti", "Bacci", "Bacherini", "Badii", "Baggiani", "Baglioni", "Bagni", "Bagnoli", "Baldassini", "Baldi", "Baldini", "Ballerini", "Balli", "Ballini", "Balloni", "Bambi", "Banchi", "Bandinelli", "Bandini", "Bani", "Barbetti", "Barbieri", "Barchielli", "Bardazzi", "Bardelli", "Bardi", "Barducci", "Bargellini", "Bargiacchi", "Barni", "Baroncelli", "Baroncini", "Barone", "Baroni", "Baronti", "Bartalesi", "Bartoletti", "Bartoli", "Bartolini", "Bartoloni", "Bartolozzi", "Basagni", "Basile", "Bassi", "Batacchi", "Battaglia", "Battaglini", "Bausi", "Becagli", "Becattini", "Becchi", "Becucci", "Bellandi", "Bellesi", "Belli", "Bellini", "Bellucci", "Bencini", "Benedetti", "Benelli", "Beni", "Benini", "Bensi", "Benucci", "Benvenuti", "Berlincioni", "Bernacchioni", "Bernardi", "Bernardini", "Berni", "Bernini", "Bertelli", "Berti", "Bertini", "Bessi", "Betti", "Bettini", "Biagi", "Biagini", "Biagioni", "Biagiotti", "Biancalani", "Bianchi", "Bianchini", "Bianco", "Biffoli", "Bigazzi", "Bigi", "Biliotti", "Billi", "Binazzi", "Bindi", "Bini", "Biondi", "Bizzarri", "Bocci", "Bogani", "Bolognesi", "Bonaiuti", "Bonanni", "Bonciani", "Boncinelli", "Bondi", "Bonechi", "Bongini", "Boni", "Bonini", "Borchi", "Boretti", "Borghi", "Borghini", "Borgioli", "Borri", "Borselli", "Boschi", "Bottai", "Bracci", "Braccini", "Brandi", "Braschi", "Bravi", "Brazzini", "Breschi", "Brilli", "Brizzi", "Brogelli", "Brogi", "Brogioni", "Brunelli", "Brunetti", "Bruni", "Bruno", "Brunori", "Bruschi", "Bucci", "Bucciarelli", "Buccioni", "Bucelli", "Bulli", "Burberi", "Burchi", "Burgassi", "Burroni", "Bussotti", "Buti", "Caciolli", "Caiani", "Calabrese", "Calamai", "Calamandrei", "Caldini", "Calo'", "Calonaci", "Calosi", "Calvelli", "Cambi", "Camiciottoli", "Cammelli", "Cammilli", "Campolmi", "Cantini", "Capanni", "Capecchi", "Caponi", "Cappelletti", "Cappelli", "Cappellini", "Cappugi", "Capretti", "Caputo", "Carbone", "Carboni", "Cardini", "Carlesi", "Carletti", "Carli", "Caroti", "Carotti", "Carrai", "Carraresi", "Carta", "Caruso", "Casalini", "Casati", "Caselli", "Casini", "Castagnoli", "Castellani", "Castelli", "Castellucci", "Catalano", "Catarzi", "Catelani", "Cavaciocchi", "Cavallaro", "Cavallini", "Cavicchi", "Cavini", "Ceccarelli", "Ceccatelli", "Ceccherelli", "Ceccherini", "Cecchi", "Cecchini", "Cecconi", "Cei", "Cellai", "Celli", "Cellini", "Cencetti", "Ceni", "Cenni", "Cerbai", "Cesari", "Ceseri", "Checcacci", "Checchi", "Checcucci", "Cheli", "Chellini", "Chen", "Cheng", "Cherici", "Cherubini", "Chiaramonti", "Chiarantini", "Chiarelli", "Chiari", "Chiarini", "Chiarugi", "Chiavacci", "Chiesi", "Chimenti", "Chini", "Chirici", "Chiti", "Ciabatti", "Ciampi", "Cianchi", "Cianfanelli", "Cianferoni", "Ciani", "Ciapetti", "Ciappi", "Ciardi", "Ciatti", "Cicali", "Ciccone", "Cinelli", "Cini", "Ciobanu", "Ciolli", "Cioni", "Cipriani", "Cirillo", "Cirri", "Ciucchi", "Ciuffi", "Ciulli", "Ciullini", "Clemente", "Cocchi", "Cognome", "Coli", "Collini", "Colombo", "Colzi", "Comparini", "Conforti", "Consigli", "Conte", "Conti", "Contini", "Coppini", "Coppola", "Corsi", "Corsini", "Corti", "Cortini", "Cosi", "Costa", "Costantini", "Costantino", "Cozzi", "Cresci", "Crescioli", "Cresti", "Crini", "Curradi", "D'Agostino", "D'Alessandro", "D'Amico", "D'Angelo", "Daddi", "Dainelli", "Dallai", "Danti", "Davitti", "De Angelis", "De Luca", "De Marco", "De Rosa", "De Santis", "De Simone", "De Vita", "Degl'Innocenti", "Degli Innocenti", "Dei", "Del Lungo", "Del Re", "Di Marco", "Di Stefano", "Dini", "Diop", "Dobre", "Dolfi", "Donati", "Dondoli", "Dong", "Donnini", "Ducci", "Dumitru", "Ermini", "Esposito", "Evangelisti", "Fabbri", "Fabbrini", "Fabbrizzi", "Fabbroni", "Fabbrucci", "Fabiani", "Facchini", "Faggi", "Fagioli", "Failli", "Faini", "Falciani", "Falcini", "Falcone", "Fallani", "Falorni", "Falsini", "Falugiani", "Fancelli", "Fanelli", "Fanetti", "Fanfani", "Fani", "Fantappie'", "Fantechi", "Fanti", "Fantini", "Fantoni", "Farina", "Fattori", "Favilli", "Fedi", "Fei", "Ferrante", "Ferrara", "Ferrari", "Ferraro", "Ferretti", "Ferri", "Ferrini", "Ferroni", "Fiaschi", "Fibbi", "Fiesoli", "Filippi", "Filippini", "Fini", "Fioravanti", "Fiore", "Fiorentini", "Fiorini", "Fissi", "Focardi", "Foggi", "Fontana", "Fontanelli", "Fontani", "Forconi", "Formigli", "Forte", "Forti", "Fortini", "Fossati", "Fossi", "Francalanci", "Franceschi", "Franceschini", "Franchi", "Franchini", "Franci", "Francini", "Francioni", "Franco", "Frassineti", "Frati", "Fratini", "Frilli", "Frizzi", "Frosali", "Frosini", "Frullini", "Fusco", "Fusi", "Gabbrielli", "Gabellini", "Gagliardi", "Galanti", "Galardi", "Galeotti", "Galletti", "Galli", "Gallo", "Gallori", "Gambacciani", "Gargani", "Garofalo", "Garuglieri", "Gashi", "Gasperini", "Gatti", "Gelli", "Gensini", "Gentile", "Gentili", "Geri", "Gerini", "Gheri", "Ghini", "Giachetti", "Giachi", "Giacomelli", "Gianassi", "Giani", "Giannelli", "Giannetti", "Gianni", "Giannini", "Giannoni", "Giannotti", "Giannozzi", "Gigli", "Giordano", "Giorgetti", "Giorgi", "Giovacchini", "Giovannelli", "Giovannetti", "Giovannini", "Giovannoni", "Giuliani", "Giunti", "Giuntini", "Giusti", "Gonnelli", "Goretti", "Gori", "Gradi", "Gramigni", "Grassi", "Grasso", "Graziani", "Grazzini", "Greco", "Grifoni", "Grillo", "Grimaldi", "Grossi", "Gualtieri", "Guarducci", "Guarino", "Guarnieri", "Guasti", "Guerra", "Guerri", "Guerrini", "Guidi", "Guidotti", "He", "Hoxha", "Hu", "Huang", "Iandelli", "Ignesti", "Innocenti", "Jin", "La Rosa", "Lai", "Landi", "Landini", "Lanini", "Lapi", "Lapini", "Lari", "Lascialfari", "Lastrucci", "Latini", "Lazzeri", "Lazzerini", "Lelli", "Lenzi", "Leonardi", "Leoncini", "Leone", "Leoni", "Lepri", "Li", "Liao", "Lin", "Linari", "Lippi", "Lisi", "Livi", "Lombardi", "Lombardini", "Lombardo", "Longo", "Lopez", "Lorenzi", "Lorenzini", "Lorini", "Lotti", "Lu", "Lucchesi", "Lucherini", "Lunghi", "Lupi", "Madiai", "Maestrini", "Maffei", "Maggi", "Maggini", "Magherini", "Magini", "Magnani", "Magnelli", "Magni", "Magnolfi", "Magrini", "Malavolti", "Malevolti", "Manca", "Mancini", "Manetti", "Manfredi", "Mangani", "Mannelli", "Manni", "Mannini", "Mannucci", "Manuelli", "Manzini", "Marcelli", "Marchese", "Marchetti", "Marchi", "Marchiani", "Marchionni", "Marconi", "Marcucci", "Margheri", "Mari", "Mariani", "Marilli", "Marinai", "Marinari", "Marinelli", "Marini", "Marino", "Mariotti", "Marsili", "Martelli", "Martinelli", "Martini", "Martino", "Marzi", "Masi", "Masini", "Masoni", "Massai", "Materassi", "Mattei", "Matteini", "Matteucci", "Matteuzzi", "Mattioli", "Mattolini", "Matucci", "Mauro", "Mazzanti", "Mazzei", "Mazzetti", "Mazzi", "Mazzini", "Mazzocchi", "Mazzoli", "Mazzoni", "Mazzuoli", "Meacci", "Mecocci", "Meini", "Melani", "Mele", "Meli", "Mengoni", "Menichetti", "Meoni", "Merlini", "Messeri", "Messina", "Meucci", "Miccinesi", "Miceli", "Micheli", "Michelini", "Michelozzi", "Migliori", "Migliorini", "Milani", "Miniati", "Misuri", "Monaco", "Montagnani", "Montagni", "Montanari", "Montelatici", "Monti", "Montigiani", "Montini", "Morandi", "Morandini", "Morelli", "Moretti", "Morganti", "Mori", "Morini", "Moroni", "Morozzi", "Mugnai", "Mugnaini", "Mustafa", "Naldi", "Naldini", "Nannelli", "Nanni", "Nannini", "Nannucci", "Nardi", "Nardini", "Nardoni", "Natali", "Ndiaye", "Nencetti", "Nencini", "Nencioni", "Neri", "Nesi", "Nesti", "Niccolai", "Niccoli", "Niccolini", "Nigi", "Nistri", "Nocentini", "Noferini", "Novelli", "Nucci", "Nuti", "Nutini", "Oliva", "Olivieri", "Olmi", "Orlandi", "Orlandini", "Orlando", "Orsini", "Ortolani", "Ottanelli", "Pacciani", "Pace", "Paci", "Pacini", "Pagani", "Pagano", "Paggetti", "Pagliai", "Pagni", "Pagnini", "Paladini", "Palagi", "Palchetti", "Palloni", "Palmieri", "Palumbo", "Pampaloni", "Pancani", "Pandolfi", "Pandolfini", "Panerai", "Panichi", "Paoletti", "Paoli", "Paolini", "Papi", "Papini", "Papucci", "Parenti", "Parigi", "Parisi", "Parri", "Parrini", "Pasquini", "Passeri", "Pecchioli", "Pecorini", "Pellegrini", "Pepi", "Perini", "Perrone", "Peruzzi", "Pesci", "Pestelli", "Petri", "Petrini", "Petrucci", "Pettini", "Pezzati", "Pezzatini", "Piani", "Piazza", "Piazzesi", "Piazzini", "Piccardi", "Picchi", "Piccini", "Piccioli", "Pieraccini", "Pieraccioni", "Pieralli", "Pierattini", "Pieri", "Pierini", "Pieroni", "Pietrini", "Pini", "Pinna", "Pinto", "Pinzani", "Pinzauti", "Piras", "Pisani", "Pistolesi", "Poggesi", "Poggi", "Poggiali", "Poggiolini", "Poli", "Pollastri", "Porciani", "Pozzi", "Pratellesi", "Pratesi", "Prosperi", "Pruneti", "Pucci", "Puccini", "Puccioni", "Pugi", "Pugliese", "Puliti", "Querci", "Quercioli", "Raddi", "Radu", "Raffaelli", "Ragazzini", "Ranfagni", "Ranieri", "Rastrelli", "Raugei", "Raveggi", "Renai", "Renzi", "Rettori", "Ricci", "Ricciardi", "Ridi", "Ridolfi", "Rigacci", "Righi", "Righini", "Rinaldi", "Risaliti", "Ristori", "Rizzo", "Rocchi", "Rocchini", "Rogai", "Romagnoli", "Romanelli", "Romani", "Romano", "Romei", "Romeo", "Romiti", "Romoli", "Romolini", "Rontini", "Rosati", "Roselli", "Rosi", "Rossetti", "Rossi", "Rossini", "Rovai", "Ruggeri", "Ruggiero", "Russo", "Sabatini", "Saccardi", "Sacchetti", "Sacchi", "Sacco", "Salerno", "Salimbeni", "Salucci", "Salvadori", "Salvestrini", "Salvi", "Salvini", "Sanesi", "Sani", "Sanna", "Santi", "Santini", "Santoni", "Santoro", "Santucci", "Sardi", "Sarri", "Sarti", "Sassi", "Sbolci", "Scali", "Scarpelli", "Scarselli", "Scopetani", "Secci", "Selvi", "Senatori", "Senesi", "Serafini", "Sereni", "Serra", "Sestini", "Sguanci", "Sieni", "Signorini", "Silvestri", "Simoncini", "Simonetti", "Simoni", "Singh", "Sodi", "Soldi", "Somigli", "Sorbi", "Sorelli", "Sorrentino", "Sottili", "Spina", "Spinelli", "Staccioli", "Staderini", "Stefanelli", "Stefani", "Stefanini", "Stella", "Susini", "Tacchi", "Tacconi", "Taddei", "Tagliaferri", "Tamburini", "Tanganelli", "Tani", "Tanini", "Tapinassi", "Tarchi", "Tarchiani", "Targioni", "Tassi", "Tassini", "Tempesti", "Terzani", "Tesi", "Testa", "Testi", "Tilli", "Tinti", "Tirinnanzi", "Toccafondi", "Tofanari", "Tofani", "Tognaccini", "Tonelli", "Tonini", "Torelli", "Torrini", "Tosi", "Toti", "Tozzi", "Trambusti", "Trapani", "Tucci", "Turchi", "Ugolini", "Ulivi", "Valente", "Valenti", "Valentini", "Vangelisti", "Vanni", "Vannini", "Vannoni", "Vannozzi", "Vannucchi", "Vannucci", "Ventura", "Venturi", "Venturini", "Vestri", "Vettori", "Vichi", "Viciani", "Vieri", "Vigiani", "Vignoli", "Vignolini", "Vignozzi", "Villani", "Vinci", "Visani", "Vitale", "Vitali", "Viti", "Viviani", "Vivoli", "Volpe", "Volpi", "Wang", "Wu", "Xu", "Yang", "Ye", "Zagli", "Zani", "Zanieri", "Zanobini", "Zecchi", "Zetti", "Zhang", "Zheng", "Zhou", "Zhu", "Zingoni", "Zini", "Zoppi"],
2524 // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/
2525 "nl":["Albers", "Alblas", "Appelman", "Baars", "Baas", "Bakker", "Blank", "Bleeker", "Blok", "Blom", "Boer", "Boers", "Boldewijn", "Boon", "Boot", "Bos", "Bosch", "Bosma", "Bosman", "Bouma", "Bouman", "Bouwman", "Brands", "Brouwer", "Burger", "Buijs", "Buitenhuis", "Ceder", "Cohen", "Dekker", "Dekkers", "Dijkman", "Dijkstra", "Driessen", "Drost", "Engel", "Evers", "Faber", "Franke", "Gerritsen", "Goedhart", "Goossens", "Groen", "Groenenberg", "Groot", "Haan", "Hart", "Heemskerk", "Hendriks", "Hermans", "Hoekstra", "Hofman", "Hopman", "Huisman", "Jacobs", "Jansen", "Janssen", "Jonker", "Jaspers", "Keijzer", "Klaassen", "Klein", "Koek", "Koenders", "Kok", "Kool", "Koopman", "Koopmans", "Koning", "Koster", "Kramer", "Kroon", "Kuijpers", "Kuiper", "Kuipers", "Kurt", "Koster", "Kwakman", "Los", "Lubbers", "Maas", "Markus", "Martens", "Meijer", "Mol", "Molenaar", "Mulder", "Nieuwenhuis", "Peeters", "Peters", "Pengel", "Pieters", "Pool", "Post", "Postma", "Prins", "Pronk", "Reijnders", "Rietveld", "Roest", "Roos", "Sanders", "Schaap", "Scheffer", "Schenk", "Schilder", "Schipper", "Schmidt", "Scholten", "Schouten", "Schut", "Schutte", "Schuurman", "Simons", "Smeets", "Smit", "Smits", "Snel", "Swinkels", "Tas", "Terpstra", "Timmermans", "Tol", "Tromp", "Troost", "Valk", "Veenstra", "Veldkamp", "Verbeek", "Verheul", "Verhoeven", "Vermeer", "Vermeulen", "Verweij", "Vink", "Visser", "Voorn", "Vos", "Wagenaar", "Wiersema", "Willems", "Willemsen", "Witteveen", "Wolff", "Wolters", "Zijlstra", "Zwart", "de Beer", "de Boer", "de Bruijn", "de Bruin", "de Graaf", "de Groot", "de Haan", "de Haas", "de Jager", "de Jong", "de Jonge", "de Koning", "de Lange", "de Leeuw", "de Ridder", "de Rooij", "de Ruiter", "de Vos", "de Vries", "de Waal", "de Wit", "de Zwart", "van Beek", "van Boven", "van Dam", "van Dijk", "van Dongen", "van Doorn", "van Egmond", "van Eijk", "van Es", "van Gelder", "van Gelderen", "van Houten", "van Hulst", "van Kempen", "van Kesteren", "van Leeuwen", "van Loon", "van Mill", "van Noord", "van Ommen", "van Ommeren", "van Oosten", "van Oostveen", "van Rijn", "van Schaik", "van Veen", "van Vliet", "van Wijk", "van Wijngaarden", "van den Poel", "van de Pol", "van den Ploeg", "van de Ven", "van den Berg", "van den Bosch", "van den Brink", "van den Broek", "van den Heuvel", "van der Heijden", "van der Horst", "van der Hulst", "van der Kroon", "van der Laan", "van der Linden", "van der Meer", "van der Meij", "van der Meulen", "van der Molen", "van der Sluis", "van der Spek", "van der Veen", "van der Velde", "van der Velden", "van der Vliet", "van der Wal"],
2526 // https://surnames.behindthename.com/top/lists/england-wales/1991
2527 "uk":["Smith","Jones","Williams","Taylor","Brown","Davies","Evans","Wilson","Thomas","Johnson","Roberts","Robinson","Thompson","Wright","Walker","White","Edwards","Hughes","Green","Hall","Lewis","Harris","Clarke","Patel","Jackson","Wood","Turner","Martin","Cooper","Hill","Ward","Morris","Moore","Clark","Lee","King","Baker","Harrison","Morgan","Allen","James","Scott","Phillips","Watson","Davis","Parker","Price","Bennett","Young","Griffiths","Mitchell","Kelly","Cook","Carter","Richardson","Bailey","Collins","Bell","Shaw","Murphy","Miller","Cox","Richards","Khan","Marshall","Anderson","Simpson","Ellis","Adams","Singh","Begum","Wilkinson","Foster","Chapman","Powell","Webb","Rogers","Gray","Mason","Ali","Hunt","Hussain","Campbell","Matthews","Owen","Palmer","Holmes","Mills","Barnes","Knight","Lloyd","Butler","Russell","Barker","Fisher","Stevens","Jenkins","Murray","Dixon","Harvey","Graham","Pearson","Ahmed","Fletcher","Walsh","Kaur","Gibson","Howard","Andrews","Stewart","Elliott","Reynolds","Saunders","Payne","Fox","Ford","Pearce","Day","Brooks","West","Lawrence","Cole","Atkinson","Bradley","Spencer","Gill","Dawson","Ball","Burton","O'brien","Watts","Rose","Booth","Perry","Ryan","Grant","Wells","Armstrong","Francis","Rees","Hayes","Hart","Hudson","Newman","Barrett","Webster","Hunter","Gregory","Carr","Lowe","Page","Marsh","Riley","Dunn","Woods","Parsons","Berry","Stone","Reid","Holland","Hawkins","Harding","Porter","Robertson","Newton","Oliver","Reed","Kennedy","Williamson","Bird","Gardner","Shah","Dean","Lane","Cooke","Bates","Henderson","Parry","Burgess","Bishop","Walton","Burns","Nicholson","Shepherd","Ross","Cross","Long","Freeman","Warren","Nicholls","Hamilton","Byrne","Sutton","Mcdonald","Yates","Hodgson","Robson","Curtis","Hopkins","O'connor","Harper","Coleman","Watkins","Moss","Mccarthy","Chambers","O'neill","Griffin","Sharp","Hardy","Wheeler","Potter","Osborne","Johnston","Gordon","Doyle","Wallace","George","Jordan","Hutchinson","Rowe","Burke","May","Pritchard","Gilbert","Willis","Higgins","Read","Miles","Stevenson","Stephenson","Hammond","Arnold","Buckley","Walters","Hewitt","Barber","Nelson","Slater","Austin","Sullivan","Whitehead","Mann","Frost","Lambert","Stephens","Blake","Akhtar","Lynch","Goodwin","Barton","Woodward","Thomson","Cunningham","Quinn","Barnett","Baxter","Bibi","Clayton","Nash","Greenwood","Jennings","Holt","Kemp","Poole","Gallagher","Bond","Stokes","Tucker","Davidson","Fowler","Heath","Norman","Middleton","Lawson","Banks","French","Stanley","Jarvis","Gibbs","Ferguson","Hayward","Carroll","Douglas","Dickinson","Todd","Barlow","Peters","Lucas","Knowles","Hartley","Miah","Simmons","Morton","Alexander","Field","Morrison","Norris","Townsend","Preston","Hancock","Thornton","Baldwin","Burrows","Briggs","Parkinson","Reeves","Macdonald","Lamb","Black","Abbott","Sanders","Thorpe","Holden","Tomlinson","Perkins","Ashton","Rhodes","Fuller","Howe","Bryant","Vaughan","Dale","Davey","Weston","Bartlett","Whittaker","Davison","Kent","Skinner","Birch","Morley","Daniels","Glover","Howell","Cartwright","Pugh","Humphreys","Goddard","Brennan","Wall","Kirby","Bowen","Savage","Bull","Wong","Dobson","Smart","Wilkins","Kirk","Fraser","Duffy","Hicks","Patterson","Bradshaw","Little","Archer","Warner","Waters","O'sullivan","Farrell","Brookes","Atkins","Kay","Dodd","Bentley","Flynn","John","Schofield","Short","Haynes","Wade","Butcher","Henry","Sanderson","Crawford","Sheppard","Bolton","Coates","Giles","Gould","Houghton","Gibbons","Pratt","Manning","Law","Hooper","Noble","Dyer","Rahman","Clements","Moran","Sykes","Chan","Doherty","Connolly","Joyce","Franklin","Hobbs","Coles","Herbert","Steele","Kerr","Leach","Winter","Owens","Duncan","Naylor","Fleming","Horton","Finch","Fitzgerald","Randall","Carpenter","Marsden","Browne","Garner","Pickering","Hale","Dennis","Vincent","Chadwick","Chandler","Sharpe","Nolan","Lyons","Hurst","Collier","Peacock","Howarth","Faulkner","Rice","Pollard","Welch","Norton","Gough","Sinclair","Blackburn","Bryan","Conway","Power","Cameron","Daly","Allan","Hanson","Gardiner","Boyle","Myers","Turnbull","Wallis","Mahmood","Sims","Swift","Iqbal","Pope","Brady","Chamberlain","Rowley","Tyler","Farmer","Metcalfe","Hilton","Godfrey","Holloway","Parkin","Bray","Talbot","Donnelly","Nixon","Charlton","Benson","Whitehouse","Barry","Hope","Lord","North","Storey","Connor","Potts","Bevan","Hargreaves","Mclean","Mistry","Bruce","Howells","Hyde","Parkes","Wyatt","Fry","Lees","O'donnell","Craig","Forster","Mckenzie","Humphries","Mellor","Carey","Ingram","Summers","Leonard"],
2528 // https://surnames.behindthename.com/top/lists/germany/2017
2529 "de": ["Müller","Schmidt","Schneider","Fischer","Weber","Meyer","Wagner","Becker","Schulz","Hoffmann","Schäfer","Koch","Bauer","Richter","Klein","Wolf","Schröder","Neumann","Schwarz","Zimmermann","Braun","Krüger","Hofmann","Hartmann","Lange","Schmitt","Werner","Schmitz","Krause","Meier","Lehmann","Schmid","Schulze","Maier","Köhler","Herrmann","König","Walter","Mayer","Huber","Kaiser","Fuchs","Peters","Lang","Scholz","Möller","Weiß","Jung","Hahn","Schubert","Vogel","Friedrich","Keller","Günther","Frank","Berger","Winkler","Roth","Beck","Lorenz","Baumann","Franke","Albrecht","Schuster","Simon","Ludwig","Böhm","Winter","Kraus","Martin","Schumacher","Krämer","Vogt","Stein","Jäger","Otto","Sommer","Groß","Seidel","Heinrich","Brandt","Haas","Schreiber","Graf","Schulte","Dietrich","Ziegler","Kuhn","Kühn","Pohl","Engel","Horn","Busch","Bergmann","Thomas","Voigt","Sauer","Arnold","Wolff","Pfeiffer"],
2530 // http://www.japantimes.co.jp/life/2009/10/11/lifestyle/japans-top-100-most-common-family-names/
2531 "jp": ["Sato","Suzuki","Takahashi","Tanaka","Watanabe","Ito","Yamamoto","Nakamura","Kobayashi","Kato","Yoshida","Yamada","Sasaki","Yamaguchi","Saito","Matsumoto","Inoue","Kimura","Hayashi","Shimizu","Yamazaki","Mori","Abe","Ikeda","Hashimoto","Yamashita","Ishikawa","Nakajima","Maeda","Fujita","Ogawa","Goto","Okada","Hasegawa","Murakami","Kondo","Ishii","Saito","Sakamoto","Endo","Aoki","Fujii","Nishimura","Fukuda","Ota","Miura","Fujiwara","Okamoto","Matsuda","Nakagawa","Nakano","Harada","Ono","Tamura","Takeuchi","Kaneko","Wada","Nakayama","Ishida","Ueda","Morita","Hara","Shibata","Sakai","Kudo","Yokoyama","Miyazaki","Miyamoto","Uchida","Takagi","Ando","Taniguchi","Ohno","Maruyama","Imai","Takada","Fujimoto","Takeda","Murata","Ueno","Sugiyama","Masuda","Sugawara","Hirano","Kojima","Otsuka","Chiba","Kubo","Matsui","Iwasaki","Sakurai","Kinoshita","Noguchi","Matsuo","Nomura","Kikuchi","Sano","Onishi","Sugimoto","Arai"],
2532 // http://www.lowchensaustralia.com/names/popular-spanish-names.htm
2533 "es": ["Garcia","Fernandez","Lopez","Martinez","Gonzalez","Rodriguez","Sanchez","Perez","Martin","Gomez","Ruiz","Diaz","Hernandez","Alvarez","Jimenez","Moreno","Munoz","Alonso","Romero","Navarro","Gutierrez","Torres","Dominguez","Gil","Vazquez","Blanco","Serrano","Ramos","Castro","Suarez","Sanz","Rubio","Ortega","Molina","Delgado","Ortiz","Morales","Ramirez","Marin","Iglesias","Santos","Castillo","Garrido","Calvo","Pena","Cruz","Cano","Nunez","Prieto","Diez","Lozano","Vidal","Pascual","Ferrer","Medina","Vega","Leon","Herrero","Vicente","Mendez","Guerrero","Fuentes","Campos","Nieto","Cortes","Caballero","Ibanez","Lorenzo","Pastor","Gimenez","Saez","Soler","Marquez","Carrasco","Herrera","Montero","Arias","Crespo","Flores","Andres","Aguilar","Hidalgo","Cabrera","Mora","Duran","Velasco","Rey","Pardo","Roman","Vila","Bravo","Merino","Moya","Soto","Izquierdo","Reyes","Redondo","Marcos","Carmona","Menendez"],
2534 // Data taken from https://fr.wikipedia.org/wiki/Liste_des_noms_de_famille_les_plus_courants_en_France
2535 "fr": ["Martin","Bernard","Thomas","Petit","Robert","Richard","Durand","Dubois","Moreau","Laurent","Simon","Michel","Lefèvre","Leroy","Roux","David","Bertrand","Morel","Fournier","Girard","Bonnet","Dupont","Lambert","Fontaine","Rousseau","Vincent","Müller","Lefèvre","Faure","André","Mercier","Blanc","Guérin","Boyer","Garnier","Chevalier","François","Legrand","Gauthier","Garcia","Perrin","Robin","Clément","Morin","Nicolas","Henry","Roussel","Matthieu","Gautier","Masson","Marchand","Duval","Denis","Dumont","Marie","Lemaire","Noël","Meyer","Dufour","Meunier","Brun","Blanchard","Giraud","Joly","Rivière","Lucas","Brunet","Gaillard","Barbier","Arnaud","Martínez","Gérard","Roche","Renard","Schmitt","Roy","Leroux","Colin","Vidal","Caron","Picard","Roger","Fabre","Aubert","Lemoine","Renaud","Dumas","Lacroix","Olivier","Philippe","Bourgeois","Pierre","Benoît","Rey","Leclerc","Payet","Rolland","Leclercq","Guillaume","Lecomte","López","Jean","Dupuy","Guillot","Hubert","Berger","Carpentier","Sánchez","Dupuis","Moulin","Louis","Deschamps","Huet","Vasseur","Perez","Boucher","Fleury","Royer","Klein","Jacquet","Adam","Paris","Poirier","Marty","Aubry","Guyot","Carré","Charles","Renault","Charpentier","Ménard","Maillard","Baron","Bertin","Bailly","Hervé","Schneider","Fernández","Le GallGall","Collet","Léger","Bouvier","Julien","Prévost","Millet","Perrot","Daniel","Le RouxRoux","Cousin","Germain","Breton","Besson","Langlois","Rémi","Le GoffGoff","Pelletier","Lévêque","Perrier","Leblanc","Barré","Lebrun","Marchal","Weber","Mallet","Hamon","Boulanger","Jacob","Monnier","Michaud","Rodríguez","Guichard","Gillet","Étienne","Grondin","Poulain","Tessier","Chevallier","Collin","Chauvin","Da SilvaSilva","Bouchet","Gay","Lemaître","Bénard","Maréchal","Humbert","Reynaud","Antoine","Hoarau","Perret","Barthélemy","Cordier","Pichon","Lejeune","Gilbert","Lamy","Delaunay","Pasquier","Carlier","LaporteLaporte"]
2536 },
2537
2538 // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json
2539 countries: [{"name":"Afghanistan","abbreviation":"AF"},{"name":"Åland Islands","abbreviation":"AX"},{"name":"Albania","abbreviation":"AL"},{"name":"Algeria","abbreviation":"DZ"},{"name":"American Samoa","abbreviation":"AS"},{"name":"Andorra","abbreviation":"AD"},{"name":"Angola","abbreviation":"AO"},{"name":"Anguilla","abbreviation":"AI"},{"name":"Antarctica","abbreviation":"AQ"},{"name":"Antigua & Barbuda","abbreviation":"AG"},{"name":"Argentina","abbreviation":"AR"},{"name":"Armenia","abbreviation":"AM"},{"name":"Aruba","abbreviation":"AW"},{"name":"Ascension Island","abbreviation":"AC"},{"name":"Australia","abbreviation":"AU"},{"name":"Austria","abbreviation":"AT"},{"name":"Azerbaijan","abbreviation":"AZ"},{"name":"Bahamas","abbreviation":"BS"},{"name":"Bahrain","abbreviation":"BH"},{"name":"Bangladesh","abbreviation":"BD"},{"name":"Barbados","abbreviation":"BB"},{"name":"Belarus","abbreviation":"BY"},{"name":"Belgium","abbreviation":"BE"},{"name":"Belize","abbreviation":"BZ"},{"name":"Benin","abbreviation":"BJ"},{"name":"Bermuda","abbreviation":"BM"},{"name":"Bhutan","abbreviation":"BT"},{"name":"Bolivia","abbreviation":"BO"},{"name":"Bosnia & Herzegovina","abbreviation":"BA"},{"name":"Botswana","abbreviation":"BW"},{"name":"Brazil","abbreviation":"BR"},{"name":"British Indian Ocean Territory","abbreviation":"IO"},{"name":"British Virgin Islands","abbreviation":"VG"},{"name":"Brunei","abbreviation":"BN"},{"name":"Bulgaria","abbreviation":"BG"},{"name":"Burkina Faso","abbreviation":"BF"},{"name":"Burundi","abbreviation":"BI"},{"name":"Cambodia","abbreviation":"KH"},{"name":"Cameroon","abbreviation":"CM"},{"name":"Canada","abbreviation":"CA"},{"name":"Canary Islands","abbreviation":"IC"},{"name":"Cape Verde","abbreviation":"CV"},{"name":"Caribbean Netherlands","abbreviation":"BQ"},{"name":"Cayman Islands","abbreviation":"KY"},{"name":"Central African Republic","abbreviation":"CF"},{"name":"Ceuta & Melilla","abbreviation":"EA"},{"name":"Chad","abbreviation":"TD"},{"name":"Chile","abbreviation":"CL"},{"name":"China","abbreviation":"CN"},{"name":"Christmas Island","abbreviation":"CX"},{"name":"Cocos (Keeling) Islands","abbreviation":"CC"},{"name":"Colombia","abbreviation":"CO"},{"name":"Comoros","abbreviation":"KM"},{"name":"Congo - Brazzaville","abbreviation":"CG"},{"name":"Congo - Kinshasa","abbreviation":"CD"},{"name":"Cook Islands","abbreviation":"CK"},{"name":"Costa Rica","abbreviation":"CR"},{"name":"Côte d'Ivoire","abbreviation":"CI"},{"name":"Croatia","abbreviation":"HR"},{"name":"Cuba","abbreviation":"CU"},{"name":"Curaçao","abbreviation":"CW"},{"name":"Cyprus","abbreviation":"CY"},{"name":"Czech Republic","abbreviation":"CZ"},{"name":"Denmark","abbreviation":"DK"},{"name":"Diego Garcia","abbreviation":"DG"},{"name":"Djibouti","abbreviation":"DJ"},{"name":"Dominica","abbreviation":"DM"},{"name":"Dominican Republic","abbreviation":"DO"},{"name":"Ecuador","abbreviation":"EC"},{"name":"Egypt","abbreviation":"EG"},{"name":"El Salvador","abbreviation":"SV"},{"name":"Equatorial Guinea","abbreviation":"GQ"},{"name":"Eritrea","abbreviation":"ER"},{"name":"Estonia","abbreviation":"EE"},{"name":"Ethiopia","abbreviation":"ET"},{"name":"Falkland Islands","abbreviation":"FK"},{"name":"Faroe Islands","abbreviation":"FO"},{"name":"Fiji","abbreviation":"FJ"},{"name":"Finland","abbreviation":"FI"},{"name":"France","abbreviation":"FR"},{"name":"French Guiana","abbreviation":"GF"},{"name":"French Polynesia","abbreviation":"PF"},{"name":"French Southern Territories","abbreviation":"TF"},{"name":"Gabon","abbreviation":"GA"},{"name":"Gambia","abbreviation":"GM"},{"name":"Georgia","abbreviation":"GE"},{"name":"Germany","abbreviation":"DE"},{"name":"Ghana","abbreviation":"GH"},{"name":"Gibraltar","abbreviation":"GI"},{"name":"Greece","abbreviation":"GR"},{"name":"Greenland","abbreviation":"GL"},{"name":"Grenada","abbreviation":"GD"},{"name":"Guadeloupe","abbreviation":"GP"},{"name":"Guam","abbreviation":"GU"},{"name":"Guatemala","abbreviation":"GT"},{"name":"Guernsey","abbreviation":"GG"},{"name":"Guinea","abbreviation":"GN"},{"name":"Guinea-Bissau","abbreviation":"GW"},{"name":"Guyana","abbreviation":"GY"},{"name":"Haiti","abbreviation":"HT"},{"name":"Honduras","abbreviation":"HN"},{"name":"Hong Kong SAR China","abbreviation":"HK"},{"name":"Hungary","abbreviation":"HU"},{"name":"Iceland","abbreviation":"IS"},{"name":"India","abbreviation":"IN"},{"name":"Indonesia","abbreviation":"ID"},{"name":"Iran","abbreviation":"IR"},{"name":"Iraq","abbreviation":"IQ"},{"name":"Ireland","abbreviation":"IE"},{"name":"Isle of Man","abbreviation":"IM"},{"name":"Israel","abbreviation":"IL"},{"name":"Italy","abbreviation":"IT"},{"name":"Jamaica","abbreviation":"JM"},{"name":"Japan","abbreviation":"JP"},{"name":"Jersey","abbreviation":"JE"},{"name":"Jordan","abbreviation":"JO"},{"name":"Kazakhstan","abbreviation":"KZ"},{"name":"Kenya","abbreviation":"KE"},{"name":"Kiribati","abbreviation":"KI"},{"name":"Kosovo","abbreviation":"XK"},{"name":"Kuwait","abbreviation":"KW"},{"name":"Kyrgyzstan","abbreviation":"KG"},{"name":"Laos","abbreviation":"LA"},{"name":"Latvia","abbreviation":"LV"},{"name":"Lebanon","abbreviation":"LB"},{"name":"Lesotho","abbreviation":"LS"},{"name":"Liberia","abbreviation":"LR"},{"name":"Libya","abbreviation":"LY"},{"name":"Liechtenstein","abbreviation":"LI"},{"name":"Lithuania","abbreviation":"LT"},{"name":"Luxembourg","abbreviation":"LU"},{"name":"Macau SAR China","abbreviation":"MO"},{"name":"Macedonia","abbreviation":"MK"},{"name":"Madagascar","abbreviation":"MG"},{"name":"Malawi","abbreviation":"MW"},{"name":"Malaysia","abbreviation":"MY"},{"name":"Maldives","abbreviation":"MV"},{"name":"Mali","abbreviation":"ML"},{"name":"Malta","abbreviation":"MT"},{"name":"Marshall Islands","abbreviation":"MH"},{"name":"Martinique","abbreviation":"MQ"},{"name":"Mauritania","abbreviation":"MR"},{"name":"Mauritius","abbreviation":"MU"},{"name":"Mayotte","abbreviation":"YT"},{"name":"Mexico","abbreviation":"MX"},{"name":"Micronesia","abbreviation":"FM"},{"name":"Moldova","abbreviation":"MD"},{"name":"Monaco","abbreviation":"MC"},{"name":"Mongolia","abbreviation":"MN"},{"name":"Montenegro","abbreviation":"ME"},{"name":"Montserrat","abbreviation":"MS"},{"name":"Morocco","abbreviation":"MA"},{"name":"Mozambique","abbreviation":"MZ"},{"name":"Myanmar (Burma)","abbreviation":"MM"},{"name":"Namibia","abbreviation":"NA"},{"name":"Nauru","abbreviation":"NR"},{"name":"Nepal","abbreviation":"NP"},{"name":"Netherlands","abbreviation":"NL"},{"name":"New Caledonia","abbreviation":"NC"},{"name":"New Zealand","abbreviation":"NZ"},{"name":"Nicaragua","abbreviation":"NI"},{"name":"Niger","abbreviation":"NE"},{"name":"Nigeria","abbreviation":"NG"},{"name":"Niue","abbreviation":"NU"},{"name":"Norfolk Island","abbreviation":"NF"},{"name":"North Korea","abbreviation":"KP"},{"name":"Northern Mariana Islands","abbreviation":"MP"},{"name":"Norway","abbreviation":"NO"},{"name":"Oman","abbreviation":"OM"},{"name":"Pakistan","abbreviation":"PK"},{"name":"Palau","abbreviation":"PW"},{"name":"Palestinian Territories","abbreviation":"PS"},{"name":"Panama","abbreviation":"PA"},{"name":"Papua New Guinea","abbreviation":"PG"},{"name":"Paraguay","abbreviation":"PY"},{"name":"Peru","abbreviation":"PE"},{"name":"Philippines","abbreviation":"PH"},{"name":"Pitcairn Islands","abbreviation":"PN"},{"name":"Poland","abbreviation":"PL"},{"name":"Portugal","abbreviation":"PT"},{"name":"Puerto Rico","abbreviation":"PR"},{"name":"Qatar","abbreviation":"QA"},{"name":"Réunion","abbreviation":"RE"},{"name":"Romania","abbreviation":"RO"},{"name":"Russia","abbreviation":"RU"},{"name":"Rwanda","abbreviation":"RW"},{"name":"Samoa","abbreviation":"WS"},{"name":"San Marino","abbreviation":"SM"},{"name":"São Tomé and Príncipe","abbreviation":"ST"},{"name":"Saudi Arabia","abbreviation":"SA"},{"name":"Senegal","abbreviation":"SN"},{"name":"Serbia","abbreviation":"RS"},{"name":"Seychelles","abbreviation":"SC"},{"name":"Sierra Leone","abbreviation":"SL"},{"name":"Singapore","abbreviation":"SG"},{"name":"Sint Maarten","abbreviation":"SX"},{"name":"Slovakia","abbreviation":"SK"},{"name":"Slovenia","abbreviation":"SI"},{"name":"Solomon Islands","abbreviation":"SB"},{"name":"Somalia","abbreviation":"SO"},{"name":"South Africa","abbreviation":"ZA"},{"name":"South Georgia & South Sandwich Islands","abbreviation":"GS"},{"name":"South Korea","abbreviation":"KR"},{"name":"South Sudan","abbreviation":"SS"},{"name":"Spain","abbreviation":"ES"},{"name":"Sri Lanka","abbreviation":"LK"},{"name":"St. Barthélemy","abbreviation":"BL"},{"name":"St. Helena","abbreviation":"SH"},{"name":"St. Kitts & Nevis","abbreviation":"KN"},{"name":"St. Lucia","abbreviation":"LC"},{"name":"St. Martin","abbreviation":"MF"},{"name":"St. Pierre & Miquelon","abbreviation":"PM"},{"name":"St. Vincent & Grenadines","abbreviation":"VC"},{"name":"Sudan","abbreviation":"SD"},{"name":"Suriname","abbreviation":"SR"},{"name":"Svalbard & Jan Mayen","abbreviation":"SJ"},{"name":"Swaziland","abbreviation":"SZ"},{"name":"Sweden","abbreviation":"SE"},{"name":"Switzerland","abbreviation":"CH"},{"name":"Syria","abbreviation":"SY"},{"name":"Taiwan","abbreviation":"TW"},{"name":"Tajikistan","abbreviation":"TJ"},{"name":"Tanzania","abbreviation":"TZ"},{"name":"Thailand","abbreviation":"TH"},{"name":"Timor-Leste","abbreviation":"TL"},{"name":"Togo","abbreviation":"TG"},{"name":"Tokelau","abbreviation":"TK"},{"name":"Tonga","abbreviation":"TO"},{"name":"Trinidad & Tobago","abbreviation":"TT"},{"name":"Tristan da Cunha","abbreviation":"TA"},{"name":"Tunisia","abbreviation":"TN"},{"name":"Turkey","abbreviation":"TR"},{"name":"Turkmenistan","abbreviation":"TM"},{"name":"Turks & Caicos Islands","abbreviation":"TC"},{"name":"Tuvalu","abbreviation":"TV"},{"name":"U.S. Outlying Islands","abbreviation":"UM"},{"name":"U.S. Virgin Islands","abbreviation":"VI"},{"name":"Uganda","abbreviation":"UG"},{"name":"Ukraine","abbreviation":"UA"},{"name":"United Arab Emirates","abbreviation":"AE"},{"name":"United Kingdom","abbreviation":"GB"},{"name":"United States","abbreviation":"US"},{"name":"Uruguay","abbreviation":"UY"},{"name":"Uzbekistan","abbreviation":"UZ"},{"name":"Vanuatu","abbreviation":"VU"},{"name":"Vatican City","abbreviation":"VA"},{"name":"Venezuela","abbreviation":"VE"},{"name":"Vietnam","abbreviation":"VN"},{"name":"Wallis & Futuna","abbreviation":"WF"},{"name":"Western Sahara","abbreviation":"EH"},{"name":"Yemen","abbreviation":"YE"},{"name":"Zambia","abbreviation":"ZM"},{"name":"Zimbabwe","abbreviation":"ZW"}],
2540
2541 counties: {
2542 // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk
2543 "uk": [
2544 {name: 'Bath and North East Somerset'},
2545 {name: 'Aberdeenshire'},
2546 {name: 'Anglesey'},
2547 {name: 'Angus'},
2548 {name: 'Bedford'},
2549 {name: 'Blackburn with Darwen'},
2550 {name: 'Blackpool'},
2551 {name: 'Bournemouth'},
2552 {name: 'Bracknell Forest'},
2553 {name: 'Brighton & Hove'},
2554 {name: 'Bristol'},
2555 {name: 'Buckinghamshire'},
2556 {name: 'Cambridgeshire'},
2557 {name: 'Carmarthenshire'},
2558 {name: 'Central Bedfordshire'},
2559 {name: 'Ceredigion'},
2560 {name: 'Cheshire East'},
2561 {name: 'Cheshire West and Chester'},
2562 {name: 'Clackmannanshire'},
2563 {name: 'Conwy'},
2564 {name: 'Cornwall'},
2565 {name: 'County Antrim'},
2566 {name: 'County Armagh'},
2567 {name: 'County Down'},
2568 {name: 'County Durham'},
2569 {name: 'County Fermanagh'},
2570 {name: 'County Londonderry'},
2571 {name: 'County Tyrone'},
2572 {name: 'Cumbria'},
2573 {name: 'Darlington'},
2574 {name: 'Denbighshire'},
2575 {name: 'Derby'},
2576 {name: 'Derbyshire'},
2577 {name: 'Devon'},
2578 {name: 'Dorset'},
2579 {name: 'Dumfries and Galloway'},
2580 {name: 'Dundee'},
2581 {name: 'East Lothian'},
2582 {name: 'East Riding of Yorkshire'},
2583 {name: 'East Sussex'},
2584 {name: 'Edinburgh?'},
2585 {name: 'Essex'},
2586 {name: 'Falkirk'},
2587 {name: 'Fife'},
2588 {name: 'Flintshire'},
2589 {name: 'Gloucestershire'},
2590 {name: 'Greater London'},
2591 {name: 'Greater Manchester'},
2592 {name: 'Gwent'},
2593 {name: 'Gwynedd'},
2594 {name: 'Halton'},
2595 {name: 'Hampshire'},
2596 {name: 'Hartlepool'},
2597 {name: 'Herefordshire'},
2598 {name: 'Hertfordshire'},
2599 {name: 'Highlands'},
2600 {name: 'Hull'},
2601 {name: 'Isle of Wight'},
2602 {name: 'Isles of Scilly'},
2603 {name: 'Kent'},
2604 {name: 'Lancashire'},
2605 {name: 'Leicester'},
2606 {name: 'Leicestershire'},
2607 {name: 'Lincolnshire'},
2608 {name: 'Lothian'},
2609 {name: 'Luton'},
2610 {name: 'Medway'},
2611 {name: 'Merseyside'},
2612 {name: 'Mid Glamorgan'},
2613 {name: 'Middlesbrough'},
2614 {name: 'Milton Keynes'},
2615 {name: 'Monmouthshire'},
2616 {name: 'Moray'},
2617 {name: 'Norfolk'},
2618 {name: 'North East Lincolnshire'},
2619 {name: 'North Lincolnshire'},
2620 {name: 'North Somerset'},
2621 {name: 'North Yorkshire'},
2622 {name: 'Northamptonshire'},
2623 {name: 'Northumberland'},
2624 {name: 'Nottingham'},
2625 {name: 'Nottinghamshire'},
2626 {name: 'Oxfordshire'},
2627 {name: 'Pembrokeshire'},
2628 {name: 'Perth and Kinross'},
2629 {name: 'Peterborough'},
2630 {name: 'Plymouth'},
2631 {name: 'Poole'},
2632 {name: 'Portsmouth'},
2633 {name: 'Powys'},
2634 {name: 'Reading'},
2635 {name: 'Redcar and Cleveland'},
2636 {name: 'Rutland'},
2637 {name: 'Scottish Borders'},
2638 {name: 'Shropshire'},
2639 {name: 'Slough'},
2640 {name: 'Somerset'},
2641 {name: 'South Glamorgan'},
2642 {name: 'South Gloucestershire'},
2643 {name: 'South Yorkshire'},
2644 {name: 'Southampton'},
2645 {name: 'Southend-on-Sea'},
2646 {name: 'Staffordshire'},
2647 {name: 'Stirlingshire'},
2648 {name: 'Stockton-on-Tees'},
2649 {name: 'Stoke-on-Trent'},
2650 {name: 'Strathclyde'},
2651 {name: 'Suffolk'},
2652 {name: 'Surrey'},
2653 {name: 'Swindon'},
2654 {name: 'Telford and Wrekin'},
2655 {name: 'Thurrock'},
2656 {name: 'Torbay'},
2657 {name: 'Tyne and Wear'},
2658 {name: 'Warrington'},
2659 {name: 'Warwickshire'},
2660 {name: 'West Berkshire'},
2661 {name: 'West Glamorgan'},
2662 {name: 'West Lothian'},
2663 {name: 'West Midlands'},
2664 {name: 'West Sussex'},
2665 {name: 'West Yorkshire'},
2666 {name: 'Western Isles'},
2667 {name: 'Wiltshire'},
2668 {name: 'Windsor and Maidenhead'},
2669 {name: 'Wokingham'},
2670 {name: 'Worcestershire'},
2671 {name: 'Wrexham'},
2672 {name: 'York'}]
2673 },
2674 provinces: {
2675 "ca": [
2676 {name: 'Alberta', abbreviation: 'AB'},
2677 {name: 'British Columbia', abbreviation: 'BC'},
2678 {name: 'Manitoba', abbreviation: 'MB'},
2679 {name: 'New Brunswick', abbreviation: 'NB'},
2680 {name: 'Newfoundland and Labrador', abbreviation: 'NL'},
2681 {name: 'Nova Scotia', abbreviation: 'NS'},
2682 {name: 'Ontario', abbreviation: 'ON'},
2683 {name: 'Prince Edward Island', abbreviation: 'PE'},
2684 {name: 'Quebec', abbreviation: 'QC'},
2685 {name: 'Saskatchewan', abbreviation: 'SK'},
2686
2687 // The case could be made that the following are not actually provinces
2688 // since they are technically considered "territories" however they all
2689 // look the same on an envelope!
2690 {name: 'Northwest Territories', abbreviation: 'NT'},
2691 {name: 'Nunavut', abbreviation: 'NU'},
2692 {name: 'Yukon', abbreviation: 'YT'}
2693 ],
2694 "it": [
2695 { name: "Agrigento", abbreviation: "AG", code: 84 },
2696 { name: "Alessandria", abbreviation: "AL", code: 6 },
2697 { name: "Ancona", abbreviation: "AN", code: 42 },
2698 { name: "Aosta", abbreviation: "AO", code: 7 },
2699 { name: "L'Aquila", abbreviation: "AQ", code: 66 },
2700 { name: "Arezzo", abbreviation: "AR", code: 51 },
2701 { name: "Ascoli-Piceno", abbreviation: "AP", code: 44 },
2702 { name: "Asti", abbreviation: "AT", code: 5 },
2703 { name: "Avellino", abbreviation: "AV", code: 64 },
2704 { name: "Bari", abbreviation: "BA", code: 72 },
2705 { name: "Barletta-Andria-Trani", abbreviation: "BT", code: 72 },
2706 { name: "Belluno", abbreviation: "BL", code: 25 },
2707 { name: "Benevento", abbreviation: "BN", code: 62 },
2708 { name: "Bergamo", abbreviation: "BG", code: 16 },
2709 { name: "Biella", abbreviation: "BI", code: 96 },
2710 { name: "Bologna", abbreviation: "BO", code: 37 },
2711 { name: "Bolzano", abbreviation: "BZ", code: 21 },
2712 { name: "Brescia", abbreviation: "BS", code: 17 },
2713 { name: "Brindisi", abbreviation: "BR", code: 74 },
2714 { name: "Cagliari", abbreviation: "CA", code: 92 },
2715 { name: "Caltanissetta", abbreviation: "CL", code: 85 },
2716 { name: "Campobasso", abbreviation: "CB", code: 70 },
2717 { name: "Carbonia Iglesias", abbreviation: "CI", code: 70 },
2718 { name: "Caserta", abbreviation: "CE", code: 61 },
2719 { name: "Catania", abbreviation: "CT", code: 87 },
2720 { name: "Catanzaro", abbreviation: "CZ", code: 79 },
2721 { name: "Chieti", abbreviation: "CH", code: 69 },
2722 { name: "Como", abbreviation: "CO", code: 13 },
2723 { name: "Cosenza", abbreviation: "CS", code: 78 },
2724 { name: "Cremona", abbreviation: "CR", code: 19 },
2725 { name: "Crotone", abbreviation: "KR", code: 101 },
2726 { name: "Cuneo", abbreviation: "CN", code: 4 },
2727 { name: "Enna", abbreviation: "EN", code: 86 },
2728 { name: "Fermo", abbreviation: "FM", code: 86 },
2729 { name: "Ferrara", abbreviation: "FE", code: 38 },
2730 { name: "Firenze", abbreviation: "FI", code: 48 },
2731 { name: "Foggia", abbreviation: "FG", code: 71 },
2732 { name: "Forli-Cesena", abbreviation: "FC", code: 71 },
2733 { name: "Frosinone", abbreviation: "FR", code: 60 },
2734 { name: "Genova", abbreviation: "GE", code: 10 },
2735 { name: "Gorizia", abbreviation: "GO", code: 31 },
2736 { name: "Grosseto", abbreviation: "GR", code: 53 },
2737 { name: "Imperia", abbreviation: "IM", code: 8 },
2738 { name: "Isernia", abbreviation: "IS", code: 94 },
2739 { name: "La-Spezia", abbreviation: "SP", code: 66 },
2740 { name: "Latina", abbreviation: "LT", code: 59 },
2741 { name: "Lecce", abbreviation: "LE", code: 75 },
2742 { name: "Lecco", abbreviation: "LC", code: 97 },
2743 { name: "Livorno", abbreviation: "LI", code: 49 },
2744 { name: "Lodi", abbreviation: "LO", code: 98 },
2745 { name: "Lucca", abbreviation: "LU", code: 46 },
2746 { name: "Macerata", abbreviation: "MC", code: 43 },
2747 { name: "Mantova", abbreviation: "MN", code: 20 },
2748 { name: "Massa-Carrara", abbreviation: "MS", code: 45 },
2749 { name: "Matera", abbreviation: "MT", code: 77 },
2750 { name: "Medio Campidano", abbreviation: "VS", code: 77 },
2751 { name: "Messina", abbreviation: "ME", code: 83 },
2752 { name: "Milano", abbreviation: "MI", code: 15 },
2753 { name: "Modena", abbreviation: "MO", code: 36 },
2754 { name: "Monza-Brianza", abbreviation: "MB", code: 36 },
2755 { name: "Napoli", abbreviation: "NA", code: 63 },
2756 { name: "Novara", abbreviation: "NO", code: 3 },
2757 { name: "Nuoro", abbreviation: "NU", code: 91 },
2758 { name: "Ogliastra", abbreviation: "OG", code: 91 },
2759 { name: "Olbia Tempio", abbreviation: "OT", code: 91 },
2760 { name: "Oristano", abbreviation: "OR", code: 95 },
2761 { name: "Padova", abbreviation: "PD", code: 28 },
2762 { name: "Palermo", abbreviation: "PA", code: 82 },
2763 { name: "Parma", abbreviation: "PR", code: 34 },
2764 { name: "Pavia", abbreviation: "PV", code: 18 },
2765 { name: "Perugia", abbreviation: "PG", code: 54 },
2766 { name: "Pesaro-Urbino", abbreviation: "PU", code: 41 },
2767 { name: "Pescara", abbreviation: "PE", code: 68 },
2768 { name: "Piacenza", abbreviation: "PC", code: 33 },
2769 { name: "Pisa", abbreviation: "PI", code: 50 },
2770 { name: "Pistoia", abbreviation: "PT", code: 47 },
2771 { name: "Pordenone", abbreviation: "PN", code: 93 },
2772 { name: "Potenza", abbreviation: "PZ", code: 76 },
2773 { name: "Prato", abbreviation: "PO", code: 100 },
2774 { name: "Ragusa", abbreviation: "RG", code: 88 },
2775 { name: "Ravenna", abbreviation: "RA", code: 39 },
2776 { name: "Reggio-Calabria", abbreviation: "RC", code: 35 },
2777 { name: "Reggio-Emilia", abbreviation: "RE", code: 35 },
2778 { name: "Rieti", abbreviation: "RI", code: 57 },
2779 { name: "Rimini", abbreviation: "RN", code: 99 },
2780 { name: "Roma", abbreviation: "Roma", code: 58 },
2781 { name: "Rovigo", abbreviation: "RO", code: 29 },
2782 { name: "Salerno", abbreviation: "SA", code: 65 },
2783 { name: "Sassari", abbreviation: "SS", code: 90 },
2784 { name: "Savona", abbreviation: "SV", code: 9 },
2785 { name: "Siena", abbreviation: "SI", code: 52 },
2786 { name: "Siracusa", abbreviation: "SR", code: 89 },
2787 { name: "Sondrio", abbreviation: "SO", code: 14 },
2788 { name: "Taranto", abbreviation: "TA", code: 73 },
2789 { name: "Teramo", abbreviation: "TE", code: 67 },
2790 { name: "Terni", abbreviation: "TR", code: 55 },
2791 { name: "Torino", abbreviation: "TO", code: 1 },
2792 { name: "Trapani", abbreviation: "TP", code: 81 },
2793 { name: "Trento", abbreviation: "TN", code: 22 },
2794 { name: "Treviso", abbreviation: "TV", code: 26 },
2795 { name: "Trieste", abbreviation: "TS", code: 32 },
2796 { name: "Udine", abbreviation: "UD", code: 30 },
2797 { name: "Varese", abbreviation: "VA", code: 12 },
2798 { name: "Venezia", abbreviation: "VE", code: 27 },
2799 { name: "Verbania", abbreviation: "VB", code: 27 },
2800 { name: "Vercelli", abbreviation: "VC", code: 2 },
2801 { name: "Verona", abbreviation: "VR", code: 23 },
2802 { name: "Vibo-Valentia", abbreviation: "VV", code: 102 },
2803 { name: "Vicenza", abbreviation: "VI", code: 24 },
2804 { name: "Viterbo", abbreviation: "VT", code: 56 }
2805 ]
2806 },
2807
2808 // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json
2809 nationalities: [
2810 {name: 'Afghan'},
2811 {name: 'Albanian'},
2812 {name: 'Algerian'},
2813 {name: 'American'},
2814 {name: 'Andorran'},
2815 {name: 'Angolan'},
2816 {name: 'Antiguans'},
2817 {name: 'Argentinean'},
2818 {name: 'Armenian'},
2819 {name: 'Australian'},
2820 {name: 'Austrian'},
2821 {name: 'Azerbaijani'},
2822 {name: 'Bahami'},
2823 {name: 'Bahraini'},
2824 {name: 'Bangladeshi'},
2825 {name: 'Barbadian'},
2826 {name: 'Barbudans'},
2827 {name: 'Batswana'},
2828 {name: 'Belarusian'},
2829 {name: 'Belgian'},
2830 {name: 'Belizean'},
2831 {name: 'Beninese'},
2832 {name: 'Bhutanese'},
2833 {name: 'Bolivian'},
2834 {name: 'Bosnian'},
2835 {name: 'Brazilian'},
2836 {name: 'British'},
2837 {name: 'Bruneian'},
2838 {name: 'Bulgarian'},
2839 {name: 'Burkinabe'},
2840 {name: 'Burmese'},
2841 {name: 'Burundian'},
2842 {name: 'Cambodian'},
2843 {name: 'Cameroonian'},
2844 {name: 'Canadian'},
2845 {name: 'Cape Verdean'},
2846 {name: 'Central African'},
2847 {name: 'Chadian'},
2848 {name: 'Chilean'},
2849 {name: 'Chinese'},
2850 {name: 'Colombian'},
2851 {name: 'Comoran'},
2852 {name: 'Congolese'},
2853 {name: 'Costa Rican'},
2854 {name: 'Croatian'},
2855 {name: 'Cuban'},
2856 {name: 'Cypriot'},
2857 {name: 'Czech'},
2858 {name: 'Danish'},
2859 {name: 'Djibouti'},
2860 {name: 'Dominican'},
2861 {name: 'Dutch'},
2862 {name: 'East Timorese'},
2863 {name: 'Ecuadorean'},
2864 {name: 'Egyptian'},
2865 {name: 'Emirian'},
2866 {name: 'Equatorial Guinean'},
2867 {name: 'Eritrean'},
2868 {name: 'Estonian'},
2869 {name: 'Ethiopian'},
2870 {name: 'Fijian'},
2871 {name: 'Filipino'},
2872 {name: 'Finnish'},
2873 {name: 'French'},
2874 {name: 'Gabonese'},
2875 {name: 'Gambian'},
2876 {name: 'Georgian'},
2877 {name: 'German'},
2878 {name: 'Ghanaian'},
2879 {name: 'Greek'},
2880 {name: 'Grenadian'},
2881 {name: 'Guatemalan'},
2882 {name: 'Guinea-Bissauan'},
2883 {name: 'Guinean'},
2884 {name: 'Guyanese'},
2885 {name: 'Haitian'},
2886 {name: 'Herzegovinian'},
2887 {name: 'Honduran'},
2888 {name: 'Hungarian'},
2889 {name: 'I-Kiribati'},
2890 {name: 'Icelander'},
2891 {name: 'Indian'},
2892 {name: 'Indonesian'},
2893 {name: 'Iranian'},
2894 {name: 'Iraqi'},
2895 {name: 'Irish'},
2896 {name: 'Israeli'},
2897 {name: 'Italian'},
2898 {name: 'Ivorian'},
2899 {name: 'Jamaican'},
2900 {name: 'Japanese'},
2901 {name: 'Jordanian'},
2902 {name: 'Kazakhstani'},
2903 {name: 'Kenyan'},
2904 {name: 'Kittian and Nevisian'},
2905 {name: 'Kuwaiti'},
2906 {name: 'Kyrgyz'},
2907 {name: 'Laotian'},
2908 {name: 'Latvian'},
2909 {name: 'Lebanese'},
2910 {name: 'Liberian'},
2911 {name: 'Libyan'},
2912 {name: 'Liechtensteiner'},
2913 {name: 'Lithuanian'},
2914 {name: 'Luxembourger'},
2915 {name: 'Macedonian'},
2916 {name: 'Malagasy'},
2917 {name: 'Malawian'},
2918 {name: 'Malaysian'},
2919 {name: 'Maldivan'},
2920 {name: 'Malian'},
2921 {name: 'Maltese'},
2922 {name: 'Marshallese'},
2923 {name: 'Mauritanian'},
2924 {name: 'Mauritian'},
2925 {name: 'Mexican'},
2926 {name: 'Micronesian'},
2927 {name: 'Moldovan'},
2928 {name: 'Monacan'},
2929 {name: 'Mongolian'},
2930 {name: 'Moroccan'},
2931 {name: 'Mosotho'},
2932 {name: 'Motswana'},
2933 {name: 'Mozambican'},
2934 {name: 'Namibian'},
2935 {name: 'Nauruan'},
2936 {name: 'Nepalese'},
2937 {name: 'New Zealander'},
2938 {name: 'Nicaraguan'},
2939 {name: 'Nigerian'},
2940 {name: 'Nigerien'},
2941 {name: 'North Korean'},
2942 {name: 'Northern Irish'},
2943 {name: 'Norwegian'},
2944 {name: 'Omani'},
2945 {name: 'Pakistani'},
2946 {name: 'Palauan'},
2947 {name: 'Panamanian'},
2948 {name: 'Papua New Guinean'},
2949 {name: 'Paraguayan'},
2950 {name: 'Peruvian'},
2951 {name: 'Polish'},
2952 {name: 'Portuguese'},
2953 {name: 'Qatari'},
2954 {name: 'Romani'},
2955 {name: 'Russian'},
2956 {name: 'Rwandan'},
2957 {name: 'Saint Lucian'},
2958 {name: 'Salvadoran'},
2959 {name: 'Samoan'},
2960 {name: 'San Marinese'},
2961 {name: 'Sao Tomean'},
2962 {name: 'Saudi'},
2963 {name: 'Scottish'},
2964 {name: 'Senegalese'},
2965 {name: 'Serbian'},
2966 {name: 'Seychellois'},
2967 {name: 'Sierra Leonean'},
2968 {name: 'Singaporean'},
2969 {name: 'Slovakian'},
2970 {name: 'Slovenian'},
2971 {name: 'Solomon Islander'},
2972 {name: 'Somali'},
2973 {name: 'South African'},
2974 {name: 'South Korean'},
2975 {name: 'Spanish'},
2976 {name: 'Sri Lankan'},
2977 {name: 'Sudanese'},
2978 {name: 'Surinamer'},
2979 {name: 'Swazi'},
2980 {name: 'Swedish'},
2981 {name: 'Swiss'},
2982 {name: 'Syrian'},
2983 {name: 'Taiwanese'},
2984 {name: 'Tajik'},
2985 {name: 'Tanzanian'},
2986 {name: 'Thai'},
2987 {name: 'Togolese'},
2988 {name: 'Tongan'},
2989 {name: 'Trinidadian or Tobagonian'},
2990 {name: 'Tunisian'},
2991 {name: 'Turkish'},
2992 {name: 'Tuvaluan'},
2993 {name: 'Ugandan'},
2994 {name: 'Ukrainian'},
2995 {name: 'Uruguaya'},
2996 {name: 'Uzbekistani'},
2997 {name: 'Venezuela'},
2998 {name: 'Vietnamese'},
2999 {name: 'Wels'},
3000 {name: 'Yemenit'},
3001 {name: 'Zambia'},
3002 {name: 'Zimbabwe'},
3003 ],
3004 // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)
3005 locale_languages: [
3006 "aa",
3007 "ab",
3008 "ae",
3009 "af",
3010 "ak",
3011 "am",
3012 "an",
3013 "ar",
3014 "as",
3015 "av",
3016 "ay",
3017 "az",
3018 "ba",
3019 "be",
3020 "bg",
3021 "bh",
3022 "bi",
3023 "bm",
3024 "bn",
3025 "bo",
3026 "br",
3027 "bs",
3028 "ca",
3029 "ce",
3030 "ch",
3031 "co",
3032 "cr",
3033 "cs",
3034 "cu",
3035 "cv",
3036 "cy",
3037 "da",
3038 "de",
3039 "dv",
3040 "dz",
3041 "ee",
3042 "el",
3043 "en",
3044 "eo",
3045 "es",
3046 "et",
3047 "eu",
3048 "fa",
3049 "ff",
3050 "fi",
3051 "fj",
3052 "fo",
3053 "fr",
3054 "fy",
3055 "ga",
3056 "gd",
3057 "gl",
3058 "gn",
3059 "gu",
3060 "gv",
3061 "ha",
3062 "he",
3063 "hi",
3064 "ho",
3065 "hr",
3066 "ht",
3067 "hu",
3068 "hy",
3069 "hz",
3070 "ia",
3071 "id",
3072 "ie",
3073 "ig",
3074 "ii",
3075 "ik",
3076 "io",
3077 "is",
3078 "it",
3079 "iu",
3080 "ja",
3081 "jv",
3082 "ka",
3083 "kg",
3084 "ki",
3085 "kj",
3086 "kk",
3087 "kl",
3088 "km",
3089 "kn",
3090 "ko",
3091 "kr",
3092 "ks",
3093 "ku",
3094 "kv",
3095 "kw",
3096 "ky",
3097 "la",
3098 "lb",
3099 "lg",
3100 "li",
3101 "ln",
3102 "lo",
3103 "lt",
3104 "lu",
3105 "lv",
3106 "mg",
3107 "mh",
3108 "mi",
3109 "mk",
3110 "ml",
3111 "mn",
3112 "mr",
3113 "ms",
3114 "mt",
3115 "my",
3116 "na",
3117 "nb",
3118 "nd",
3119 "ne",
3120 "ng",
3121 "nl",
3122 "nn",
3123 "no",
3124 "nr",
3125 "nv",
3126 "ny",
3127 "oc",
3128 "oj",
3129 "om",
3130 "or",
3131 "os",
3132 "pa",
3133 "pi",
3134 "pl",
3135 "ps",
3136 "pt",
3137 "qu",
3138 "rm",
3139 "rn",
3140 "ro",
3141 "ru",
3142 "rw",
3143 "sa",
3144 "sc",
3145 "sd",
3146 "se",
3147 "sg",
3148 "si",
3149 "sk",
3150 "sl",
3151 "sm",
3152 "sn",
3153 "so",
3154 "sq",
3155 "sr",
3156 "ss",
3157 "st",
3158 "su",
3159 "sv",
3160 "sw",
3161 "ta",
3162 "te",
3163 "tg",
3164 "th",
3165 "ti",
3166 "tk",
3167 "tl",
3168 "tn",
3169 "to",
3170 "tr",
3171 "ts",
3172 "tt",
3173 "tw",
3174 "ty",
3175 "ug",
3176 "uk",
3177 "ur",
3178 "uz",
3179 "ve",
3180 "vi",
3181 "vo",
3182 "wa",
3183 "wo",
3184 "xh",
3185 "yi",
3186 "yo",
3187 "za",
3188 "zh",
3189 "zu"
3190 ],
3191
3192 // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)
3193 locale_regions: [
3194 "agq-CM",
3195 "asa-TZ",
3196 "ast-ES",
3197 "bas-CM",
3198 "bem-ZM",
3199 "bez-TZ",
3200 "brx-IN",
3201 "cgg-UG",
3202 "chr-US",
3203 "dav-KE",
3204 "dje-NE",
3205 "dsb-DE",
3206 "dua-CM",
3207 "dyo-SN",
3208 "ebu-KE",
3209 "ewo-CM",
3210 "fil-PH",
3211 "fur-IT",
3212 "gsw-CH",
3213 "gsw-FR",
3214 "gsw-LI",
3215 "guz-KE",
3216 "haw-US",
3217 "hsb-DE",
3218 "jgo-CM",
3219 "jmc-TZ",
3220 "kab-DZ",
3221 "kam-KE",
3222 "kde-TZ",
3223 "kea-CV",
3224 "khq-ML",
3225 "kkj-CM",
3226 "kln-KE",
3227 "kok-IN",
3228 "ksb-TZ",
3229 "ksf-CM",
3230 "ksh-DE",
3231 "lag-TZ",
3232 "lkt-US",
3233 "luo-KE",
3234 "luy-KE",
3235 "mas-KE",
3236 "mas-TZ",
3237 "mer-KE",
3238 "mfe-MU",
3239 "mgh-MZ",
3240 "mgo-CM",
3241 "mua-CM",
3242 "naq-NA",
3243 "nmg-CM",
3244 "nnh-CM",
3245 "nus-SD",
3246 "nyn-UG",
3247 "rof-TZ",
3248 "rwk-TZ",
3249 "sah-RU",
3250 "saq-KE",
3251 "sbp-TZ",
3252 "seh-MZ",
3253 "ses-ML",
3254 "shi-Latn",
3255 "shi-Latn-MA",
3256 "shi-Tfng",
3257 "shi-Tfng-MA",
3258 "smn-FI",
3259 "teo-KE",
3260 "teo-UG",
3261 "twq-NE",
3262 "tzm-Latn",
3263 "tzm-Latn-MA",
3264 "vai-Latn",
3265 "vai-Latn-LR",
3266 "vai-Vaii",
3267 "vai-Vaii-LR",
3268 "vun-TZ",
3269 "wae-CH",
3270 "xog-UG",
3271 "yav-CM",
3272 "zgh-MA",
3273 "af-NA",
3274 "af-ZA",
3275 "ak-GH",
3276 "am-ET",
3277 "ar-001",
3278 "ar-AE",
3279 "ar-BH",
3280 "ar-DJ",
3281 "ar-DZ",
3282 "ar-EG",
3283 "ar-EH",
3284 "ar-ER",
3285 "ar-IL",
3286 "ar-IQ",
3287 "ar-JO",
3288 "ar-KM",
3289 "ar-KW",
3290 "ar-LB",
3291 "ar-LY",
3292 "ar-MA",
3293 "ar-MR",
3294 "ar-OM",
3295 "ar-PS",
3296 "ar-QA",
3297 "ar-SA",
3298 "ar-SD",
3299 "ar-SO",
3300 "ar-SS",
3301 "ar-SY",
3302 "ar-TD",
3303 "ar-TN",
3304 "ar-YE",
3305 "as-IN",
3306 "az-Cyrl",
3307 "az-Cyrl-AZ",
3308 "az-Latn",
3309 "az-Latn-AZ",
3310 "be-BY",
3311 "bg-BG",
3312 "bm-Latn",
3313 "bm-Latn-ML",
3314 "bn-BD",
3315 "bn-IN",
3316 "bo-CN",
3317 "bo-IN",
3318 "br-FR",
3319 "bs-Cyrl",
3320 "bs-Cyrl-BA",
3321 "bs-Latn",
3322 "bs-Latn-BA",
3323 "ca-AD",
3324 "ca-ES",
3325 "ca-ES-VALENCIA",
3326 "ca-FR",
3327 "ca-IT",
3328 "cs-CZ",
3329 "cy-GB",
3330 "da-DK",
3331 "da-GL",
3332 "de-AT",
3333 "de-BE",
3334 "de-CH",
3335 "de-DE",
3336 "de-LI",
3337 "de-LU",
3338 "dz-BT",
3339 "ee-GH",
3340 "ee-TG",
3341 "el-CY",
3342 "el-GR",
3343 "en-001",
3344 "en-150",
3345 "en-AG",
3346 "en-AI",
3347 "en-AS",
3348 "en-AU",
3349 "en-BB",
3350 "en-BE",
3351 "en-BM",
3352 "en-BS",
3353 "en-BW",
3354 "en-BZ",
3355 "en-CA",
3356 "en-CC",
3357 "en-CK",
3358 "en-CM",
3359 "en-CX",
3360 "en-DG",
3361 "en-DM",
3362 "en-ER",
3363 "en-FJ",
3364 "en-FK",
3365 "en-FM",
3366 "en-GB",
3367 "en-GD",
3368 "en-GG",
3369 "en-GH",
3370 "en-GI",
3371 "en-GM",
3372 "en-GU",
3373 "en-GY",
3374 "en-HK",
3375 "en-IE",
3376 "en-IM",
3377 "en-IN",
3378 "en-IO",
3379 "en-JE",
3380 "en-JM",
3381 "en-KE",
3382 "en-KI",
3383 "en-KN",
3384 "en-KY",
3385 "en-LC",
3386 "en-LR",
3387 "en-LS",
3388 "en-MG",
3389 "en-MH",
3390 "en-MO",
3391 "en-MP",
3392 "en-MS",
3393 "en-MT",
3394 "en-MU",
3395 "en-MW",
3396 "en-MY",
3397 "en-NA",
3398 "en-NF",
3399 "en-NG",
3400 "en-NR",
3401 "en-NU",
3402 "en-NZ",
3403 "en-PG",
3404 "en-PH",
3405 "en-PK",
3406 "en-PN",
3407 "en-PR",
3408 "en-PW",
3409 "en-RW",
3410 "en-SB",
3411 "en-SC",
3412 "en-SD",
3413 "en-SG",
3414 "en-SH",
3415 "en-SL",
3416 "en-SS",
3417 "en-SX",
3418 "en-SZ",
3419 "en-TC",
3420 "en-TK",
3421 "en-TO",
3422 "en-TT",
3423 "en-TV",
3424 "en-TZ",
3425 "en-UG",
3426 "en-UM",
3427 "en-US",
3428 "en-US-POSIX",
3429 "en-VC",
3430 "en-VG",
3431 "en-VI",
3432 "en-VU",
3433 "en-WS",
3434 "en-ZA",
3435 "en-ZM",
3436 "en-ZW",
3437 "eo-001",
3438 "es-419",
3439 "es-AR",
3440 "es-BO",
3441 "es-CL",
3442 "es-CO",
3443 "es-CR",
3444 "es-CU",
3445 "es-DO",
3446 "es-EA",
3447 "es-EC",
3448 "es-ES",
3449 "es-GQ",
3450 "es-GT",
3451 "es-HN",
3452 "es-IC",
3453 "es-MX",
3454 "es-NI",
3455 "es-PA",
3456 "es-PE",
3457 "es-PH",
3458 "es-PR",
3459 "es-PY",
3460 "es-SV",
3461 "es-US",
3462 "es-UY",
3463 "es-VE",
3464 "et-EE",
3465 "eu-ES",
3466 "fa-AF",
3467 "fa-IR",
3468 "ff-CM",
3469 "ff-GN",
3470 "ff-MR",
3471 "ff-SN",
3472 "fi-FI",
3473 "fo-FO",
3474 "fr-BE",
3475 "fr-BF",
3476 "fr-BI",
3477 "fr-BJ",
3478 "fr-BL",
3479 "fr-CA",
3480 "fr-CD",
3481 "fr-CF",
3482 "fr-CG",
3483 "fr-CH",
3484 "fr-CI",
3485 "fr-CM",
3486 "fr-DJ",
3487 "fr-DZ",
3488 "fr-FR",
3489 "fr-GA",
3490 "fr-GF",
3491 "fr-GN",
3492 "fr-GP",
3493 "fr-GQ",
3494 "fr-HT",
3495 "fr-KM",
3496 "fr-LU",
3497 "fr-MA",
3498 "fr-MC",
3499 "fr-MF",
3500 "fr-MG",
3501 "fr-ML",
3502 "fr-MQ",
3503 "fr-MR",
3504 "fr-MU",
3505 "fr-NC",
3506 "fr-NE",
3507 "fr-PF",
3508 "fr-PM",
3509 "fr-RE",
3510 "fr-RW",
3511 "fr-SC",
3512 "fr-SN",
3513 "fr-SY",
3514 "fr-TD",
3515 "fr-TG",
3516 "fr-TN",
3517 "fr-VU",
3518 "fr-WF",
3519 "fr-YT",
3520 "fy-NL",
3521 "ga-IE",
3522 "gd-GB",
3523 "gl-ES",
3524 "gu-IN",
3525 "gv-IM",
3526 "ha-Latn",
3527 "ha-Latn-GH",
3528 "ha-Latn-NE",
3529 "ha-Latn-NG",
3530 "he-IL",
3531 "hi-IN",
3532 "hr-BA",
3533 "hr-HR",
3534 "hu-HU",
3535 "hy-AM",
3536 "id-ID",
3537 "ig-NG",
3538 "ii-CN",
3539 "is-IS",
3540 "it-CH",
3541 "it-IT",
3542 "it-SM",
3543 "ja-JP",
3544 "ka-GE",
3545 "ki-KE",
3546 "kk-Cyrl",
3547 "kk-Cyrl-KZ",
3548 "kl-GL",
3549 "km-KH",
3550 "kn-IN",
3551 "ko-KP",
3552 "ko-KR",
3553 "ks-Arab",
3554 "ks-Arab-IN",
3555 "kw-GB",
3556 "ky-Cyrl",
3557 "ky-Cyrl-KG",
3558 "lb-LU",
3559 "lg-UG",
3560 "ln-AO",
3561 "ln-CD",
3562 "ln-CF",
3563 "ln-CG",
3564 "lo-LA",
3565 "lt-LT",
3566 "lu-CD",
3567 "lv-LV",
3568 "mg-MG",
3569 "mk-MK",
3570 "ml-IN",
3571 "mn-Cyrl",
3572 "mn-Cyrl-MN",
3573 "mr-IN",
3574 "ms-Latn",
3575 "ms-Latn-BN",
3576 "ms-Latn-MY",
3577 "ms-Latn-SG",
3578 "mt-MT",
3579 "my-MM",
3580 "nb-NO",
3581 "nb-SJ",
3582 "nd-ZW",
3583 "ne-IN",
3584 "ne-NP",
3585 "nl-AW",
3586 "nl-BE",
3587 "nl-BQ",
3588 "nl-CW",
3589 "nl-NL",
3590 "nl-SR",
3591 "nl-SX",
3592 "nn-NO",
3593 "om-ET",
3594 "om-KE",
3595 "or-IN",
3596 "os-GE",
3597 "os-RU",
3598 "pa-Arab",
3599 "pa-Arab-PK",
3600 "pa-Guru",
3601 "pa-Guru-IN",
3602 "pl-PL",
3603 "ps-AF",
3604 "pt-AO",
3605 "pt-BR",
3606 "pt-CV",
3607 "pt-GW",
3608 "pt-MO",
3609 "pt-MZ",
3610 "pt-PT",
3611 "pt-ST",
3612 "pt-TL",
3613 "qu-BO",
3614 "qu-EC",
3615 "qu-PE",
3616 "rm-CH",
3617 "rn-BI",
3618 "ro-MD",
3619 "ro-RO",
3620 "ru-BY",
3621 "ru-KG",
3622 "ru-KZ",
3623 "ru-MD",
3624 "ru-RU",
3625 "ru-UA",
3626 "rw-RW",
3627 "se-FI",
3628 "se-NO",
3629 "se-SE",
3630 "sg-CF",
3631 "si-LK",
3632 "sk-SK",
3633 "sl-SI",
3634 "sn-ZW",
3635 "so-DJ",
3636 "so-ET",
3637 "so-KE",
3638 "so-SO",
3639 "sq-AL",
3640 "sq-MK",
3641 "sq-XK",
3642 "sr-Cyrl",
3643 "sr-Cyrl-BA",
3644 "sr-Cyrl-ME",
3645 "sr-Cyrl-RS",
3646 "sr-Cyrl-XK",
3647 "sr-Latn",
3648 "sr-Latn-BA",
3649 "sr-Latn-ME",
3650 "sr-Latn-RS",
3651 "sr-Latn-XK",
3652 "sv-AX",
3653 "sv-FI",
3654 "sv-SE",
3655 "sw-CD",
3656 "sw-KE",
3657 "sw-TZ",
3658 "sw-UG",
3659 "ta-IN",
3660 "ta-LK",
3661 "ta-MY",
3662 "ta-SG",
3663 "te-IN",
3664 "th-TH",
3665 "ti-ER",
3666 "ti-ET",
3667 "to-TO",
3668 "tr-CY",
3669 "tr-TR",
3670 "ug-Arab",
3671 "ug-Arab-CN",
3672 "uk-UA",
3673 "ur-IN",
3674 "ur-PK",
3675 "uz-Arab",
3676 "uz-Arab-AF",
3677 "uz-Cyrl",
3678 "uz-Cyrl-UZ",
3679 "uz-Latn",
3680 "uz-Latn-UZ",
3681 "vi-VN",
3682 "yi-001",
3683 "yo-BJ",
3684 "yo-NG",
3685 "zh-Hans",
3686 "zh-Hans-CN",
3687 "zh-Hans-HK",
3688 "zh-Hans-MO",
3689 "zh-Hans-SG",
3690 "zh-Hant",
3691 "zh-Hant-HK",
3692 "zh-Hant-MO",
3693 "zh-Hant-TW",
3694 "zu-ZA"
3695 ],
3696
3697 us_states_and_dc: [
3698 {name: 'Alabama', abbreviation: 'AL'},
3699 {name: 'Alaska', abbreviation: 'AK'},
3700 {name: 'Arizona', abbreviation: 'AZ'},
3701 {name: 'Arkansas', abbreviation: 'AR'},
3702 {name: 'California', abbreviation: 'CA'},
3703 {name: 'Colorado', abbreviation: 'CO'},
3704 {name: 'Connecticut', abbreviation: 'CT'},
3705 {name: 'Delaware', abbreviation: 'DE'},
3706 {name: 'District of Columbia', abbreviation: 'DC'},
3707 {name: 'Florida', abbreviation: 'FL'},
3708 {name: 'Georgia', abbreviation: 'GA'},
3709 {name: 'Hawaii', abbreviation: 'HI'},
3710 {name: 'Idaho', abbreviation: 'ID'},
3711 {name: 'Illinois', abbreviation: 'IL'},
3712 {name: 'Indiana', abbreviation: 'IN'},
3713 {name: 'Iowa', abbreviation: 'IA'},
3714 {name: 'Kansas', abbreviation: 'KS'},
3715 {name: 'Kentucky', abbreviation: 'KY'},
3716 {name: 'Louisiana', abbreviation: 'LA'},
3717 {name: 'Maine', abbreviation: 'ME'},
3718 {name: 'Maryland', abbreviation: 'MD'},
3719 {name: 'Massachusetts', abbreviation: 'MA'},
3720 {name: 'Michigan', abbreviation: 'MI'},
3721 {name: 'Minnesota', abbreviation: 'MN'},
3722 {name: 'Mississippi', abbreviation: 'MS'},
3723 {name: 'Missouri', abbreviation: 'MO'},
3724 {name: 'Montana', abbreviation: 'MT'},
3725 {name: 'Nebraska', abbreviation: 'NE'},
3726 {name: 'Nevada', abbreviation: 'NV'},
3727 {name: 'New Hampshire', abbreviation: 'NH'},
3728 {name: 'New Jersey', abbreviation: 'NJ'},
3729 {name: 'New Mexico', abbreviation: 'NM'},
3730 {name: 'New York', abbreviation: 'NY'},
3731 {name: 'North Carolina', abbreviation: 'NC'},
3732 {name: 'North Dakota', abbreviation: 'ND'},
3733 {name: 'Ohio', abbreviation: 'OH'},
3734 {name: 'Oklahoma', abbreviation: 'OK'},
3735 {name: 'Oregon', abbreviation: 'OR'},
3736 {name: 'Pennsylvania', abbreviation: 'PA'},
3737 {name: 'Rhode Island', abbreviation: 'RI'},
3738 {name: 'South Carolina', abbreviation: 'SC'},
3739 {name: 'South Dakota', abbreviation: 'SD'},
3740 {name: 'Tennessee', abbreviation: 'TN'},
3741 {name: 'Texas', abbreviation: 'TX'},
3742 {name: 'Utah', abbreviation: 'UT'},
3743 {name: 'Vermont', abbreviation: 'VT'},
3744 {name: 'Virginia', abbreviation: 'VA'},
3745 {name: 'Washington', abbreviation: 'WA'},
3746 {name: 'West Virginia', abbreviation: 'WV'},
3747 {name: 'Wisconsin', abbreviation: 'WI'},
3748 {name: 'Wyoming', abbreviation: 'WY'}
3749 ],
3750
3751 territories: [
3752 {name: 'American Samoa', abbreviation: 'AS'},
3753 {name: 'Federated States of Micronesia', abbreviation: 'FM'},
3754 {name: 'Guam', abbreviation: 'GU'},
3755 {name: 'Marshall Islands', abbreviation: 'MH'},
3756 {name: 'Northern Mariana Islands', abbreviation: 'MP'},
3757 {name: 'Puerto Rico', abbreviation: 'PR'},
3758 {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}
3759 ],
3760
3761 armed_forces: [
3762 {name: 'Armed Forces Europe', abbreviation: 'AE'},
3763 {name: 'Armed Forces Pacific', abbreviation: 'AP'},
3764 {name: 'Armed Forces the Americas', abbreviation: 'AA'}
3765 ],
3766
3767 country_regions: {
3768 it: [
3769 { name: "Valle d'Aosta", abbreviation: "VDA" },
3770 { name: "Piemonte", abbreviation: "PIE" },
3771 { name: "Lombardia", abbreviation: "LOM" },
3772 { name: "Veneto", abbreviation: "VEN" },
3773 { name: "Trentino Alto Adige", abbreviation: "TAA" },
3774 { name: "Friuli Venezia Giulia", abbreviation: "FVG" },
3775 { name: "Liguria", abbreviation: "LIG" },
3776 { name: "Emilia Romagna", abbreviation: "EMR" },
3777 { name: "Toscana", abbreviation: "TOS" },
3778 { name: "Umbria", abbreviation: "UMB" },
3779 { name: "Marche", abbreviation: "MAR" },
3780 { name: "Abruzzo", abbreviation: "ABR" },
3781 { name: "Lazio", abbreviation: "LAZ" },
3782 { name: "Campania", abbreviation: "CAM" },
3783 { name: "Puglia", abbreviation: "PUG" },
3784 { name: "Basilicata", abbreviation: "BAS" },
3785 { name: "Molise", abbreviation: "MOL" },
3786 { name: "Calabria", abbreviation: "CAL" },
3787 { name: "Sicilia", abbreviation: "SIC" },
3788 { name: "Sardegna", abbreviation: "SAR" }
3789 ]
3790 },
3791
3792 street_suffixes: {
3793 'us': [
3794 {name: 'Avenue', abbreviation: 'Ave'},
3795 {name: 'Boulevard', abbreviation: 'Blvd'},
3796 {name: 'Center', abbreviation: 'Ctr'},
3797 {name: 'Circle', abbreviation: 'Cir'},
3798 {name: 'Court', abbreviation: 'Ct'},
3799 {name: 'Drive', abbreviation: 'Dr'},
3800 {name: 'Extension', abbreviation: 'Ext'},
3801 {name: 'Glen', abbreviation: 'Gln'},
3802 {name: 'Grove', abbreviation: 'Grv'},
3803 {name: 'Heights', abbreviation: 'Hts'},
3804 {name: 'Highway', abbreviation: 'Hwy'},
3805 {name: 'Junction', abbreviation: 'Jct'},
3806 {name: 'Key', abbreviation: 'Key'},
3807 {name: 'Lane', abbreviation: 'Ln'},
3808 {name: 'Loop', abbreviation: 'Loop'},
3809 {name: 'Manor', abbreviation: 'Mnr'},
3810 {name: 'Mill', abbreviation: 'Mill'},
3811 {name: 'Park', abbreviation: 'Park'},
3812 {name: 'Parkway', abbreviation: 'Pkwy'},
3813 {name: 'Pass', abbreviation: 'Pass'},
3814 {name: 'Path', abbreviation: 'Path'},
3815 {name: 'Pike', abbreviation: 'Pike'},
3816 {name: 'Place', abbreviation: 'Pl'},
3817 {name: 'Plaza', abbreviation: 'Plz'},
3818 {name: 'Point', abbreviation: 'Pt'},
3819 {name: 'Ridge', abbreviation: 'Rdg'},
3820 {name: 'River', abbreviation: 'Riv'},
3821 {name: 'Road', abbreviation: 'Rd'},
3822 {name: 'Square', abbreviation: 'Sq'},
3823 {name: 'Street', abbreviation: 'St'},
3824 {name: 'Terrace', abbreviation: 'Ter'},
3825 {name: 'Trail', abbreviation: 'Trl'},
3826 {name: 'Turnpike', abbreviation: 'Tpke'},
3827 {name: 'View', abbreviation: 'Vw'},
3828 {name: 'Way', abbreviation: 'Way'}
3829 ],
3830 'it': [
3831 { name: 'Accesso', abbreviation: 'Acc.' },
3832 { name: 'Alzaia', abbreviation: 'Alz.' },
3833 { name: 'Arco', abbreviation: 'Arco' },
3834 { name: 'Archivolto', abbreviation: 'Acv.' },
3835 { name: 'Arena', abbreviation: 'Arena' },
3836 { name: 'Argine', abbreviation: 'Argine' },
3837 { name: 'Bacino', abbreviation: 'Bacino' },
3838 { name: 'Banchi', abbreviation: 'Banchi' },
3839 { name: 'Banchina', abbreviation: 'Ban.' },
3840 { name: 'Bastioni', abbreviation: 'Bas.' },
3841 { name: 'Belvedere', abbreviation: 'Belv.' },
3842 { name: 'Borgata', abbreviation: 'B.ta' },
3843 { name: 'Borgo', abbreviation: 'B.go' },
3844 { name: 'Calata', abbreviation: 'Cal.' },
3845 { name: 'Calle', abbreviation: 'Calle' },
3846 { name: 'Campiello', abbreviation: 'Cam.' },
3847 { name: 'Campo', abbreviation: 'Cam.' },
3848 { name: 'Canale', abbreviation: 'Can.' },
3849 { name: 'Carraia', abbreviation: 'Carr.' },
3850 { name: 'Cascina', abbreviation: 'Cascina' },
3851 { name: 'Case sparse', abbreviation: 'c.s.' },
3852 { name: 'Cavalcavia', abbreviation: 'Cv.' },
3853 { name: 'Circonvallazione', abbreviation: 'Cv.' },
3854 { name: 'Complanare', abbreviation: 'C.re' },
3855 { name: 'Contrada', abbreviation: 'C.da' },
3856 { name: 'Corso', abbreviation: 'C.so' },
3857 { name: 'Corte', abbreviation: 'C.te' },
3858 { name: 'Cortile', abbreviation: 'C.le' },
3859 { name: 'Diramazione', abbreviation: 'Dir.' },
3860 { name: 'Fondaco', abbreviation: 'F.co' },
3861 { name: 'Fondamenta', abbreviation: 'F.ta' },
3862 { name: 'Fondo', abbreviation: 'F.do' },
3863 { name: 'Frazione', abbreviation: 'Fr.' },
3864 { name: 'Isola', abbreviation: 'Is.' },
3865 { name: 'Largo', abbreviation: 'L.go' },
3866 { name: 'Litoranea', abbreviation: 'Lit.' },
3867 { name: 'Lungolago', abbreviation: 'L.go lago' },
3868 { name: 'Lungo Po', abbreviation: 'l.go Po' },
3869 { name: 'Molo', abbreviation: 'Molo' },
3870 { name: 'Mura', abbreviation: 'Mura' },
3871 { name: 'Passaggio privato', abbreviation: 'pass. priv.' },
3872 { name: 'Passeggiata', abbreviation: 'Pass.' },
3873 { name: 'Piazza', abbreviation: 'P.zza' },
3874 { name: 'Piazzale', abbreviation: 'P.le' },
3875 { name: 'Ponte', abbreviation: 'P.te' },
3876 { name: 'Portico', abbreviation: 'P.co' },
3877 { name: 'Rampa', abbreviation: 'Rampa' },
3878 { name: 'Regione', abbreviation: 'Reg.' },
3879 { name: 'Rione', abbreviation: 'R.ne' },
3880 { name: 'Rio', abbreviation: 'Rio' },
3881 { name: 'Ripa', abbreviation: 'Ripa' },
3882 { name: 'Riva', abbreviation: 'Riva' },
3883 { name: 'Rondò', abbreviation: 'Rondò' },
3884 { name: 'Rotonda', abbreviation: 'Rot.' },
3885 { name: 'Sagrato', abbreviation: 'Sagr.' },
3886 { name: 'Salita', abbreviation: 'Sal.' },
3887 { name: 'Scalinata', abbreviation: 'Scal.' },
3888 { name: 'Scalone', abbreviation: 'Scal.' },
3889 { name: 'Slargo', abbreviation: 'Sl.' },
3890 { name: 'Sottoportico', abbreviation: 'Sott.' },
3891 { name: 'Strada', abbreviation: 'Str.' },
3892 { name: 'Stradale', abbreviation: 'Str.le' },
3893 { name: 'Strettoia', abbreviation: 'Strett.' },
3894 { name: 'Traversa', abbreviation: 'Trav.' },
3895 { name: 'Via', abbreviation: 'V.' },
3896 { name: 'Viale', abbreviation: 'V.le' },
3897 { name: 'Vicinale', abbreviation: 'Vic.le' },
3898 { name: 'Vicolo', abbreviation: 'Vic.' }
3899 ],
3900 'uk' : [
3901 {name: 'Avenue', abbreviation: 'Ave'},
3902 {name: 'Close', abbreviation: 'Cl'},
3903 {name: 'Court', abbreviation: 'Ct'},
3904 {name: 'Crescent', abbreviation: 'Cr'},
3905 {name: 'Drive', abbreviation: 'Dr'},
3906 {name: 'Garden', abbreviation: 'Gdn'},
3907 {name: 'Gardens', abbreviation: 'Gdns'},
3908 {name: 'Green', abbreviation: 'Gn'},
3909 {name: 'Grove', abbreviation: 'Gr'},
3910 {name: 'Lane', abbreviation: 'Ln'},
3911 {name: 'Mount', abbreviation: 'Mt'},
3912 {name: 'Place', abbreviation: 'Pl'},
3913 {name: 'Park', abbreviation: 'Pk'},
3914 {name: 'Ridge', abbreviation: 'Rdg'},
3915 {name: 'Road', abbreviation: 'Rd'},
3916 {name: 'Square', abbreviation: 'Sq'},
3917 {name: 'Street', abbreviation: 'St'},
3918 {name: 'Terrace', abbreviation: 'Ter'},
3919 {name: 'Valley', abbreviation: 'Val'}
3920 ]
3921 },
3922
3923 months: [
3924 {name: 'January', short_name: 'Jan', numeric: '01', days: 31},
3925 // Not messing with leap years...
3926 {name: 'February', short_name: 'Feb', numeric: '02', days: 28},
3927 {name: 'March', short_name: 'Mar', numeric: '03', days: 31},
3928 {name: 'April', short_name: 'Apr', numeric: '04', days: 30},
3929 {name: 'May', short_name: 'May', numeric: '05', days: 31},
3930 {name: 'June', short_name: 'Jun', numeric: '06', days: 30},
3931 {name: 'July', short_name: 'Jul', numeric: '07', days: 31},
3932 {name: 'August', short_name: 'Aug', numeric: '08', days: 31},
3933 {name: 'September', short_name: 'Sep', numeric: '09', days: 30},
3934 {name: 'October', short_name: 'Oct', numeric: '10', days: 31},
3935 {name: 'November', short_name: 'Nov', numeric: '11', days: 30},
3936 {name: 'December', short_name: 'Dec', numeric: '12', days: 31}
3937 ],
3938
3939 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
3940 cc_types: [
3941 {name: "American Express", short_name: 'amex', prefix: '34', length: 15},
3942 {name: "Bankcard", short_name: 'bankcard', prefix: '5610', length: 16},
3943 {name: "China UnionPay", short_name: 'chinaunion', prefix: '62', length: 16},
3944 {name: "Diners Club Carte Blanche", short_name: 'dccarte', prefix: '300', length: 14},
3945 {name: "Diners Club enRoute", short_name: 'dcenroute', prefix: '2014', length: 15},
3946 {name: "Diners Club International", short_name: 'dcintl', prefix: '36', length: 14},
3947 {name: "Diners Club United States & Canada", short_name: 'dcusc', prefix: '54', length: 16},
3948 {name: "Discover Card", short_name: 'discover', prefix: '6011', length: 16},
3949 {name: "InstaPayment", short_name: 'instapay', prefix: '637', length: 16},
3950 {name: "JCB", short_name: 'jcb', prefix: '3528', length: 16},
3951 {name: "Laser", short_name: 'laser', prefix: '6304', length: 16},
3952 {name: "Maestro", short_name: 'maestro', prefix: '5018', length: 16},
3953 {name: "Mastercard", short_name: 'mc', prefix: '51', length: 16},
3954 {name: "Solo", short_name: 'solo', prefix: '6334', length: 16},
3955 {name: "Switch", short_name: 'switch', prefix: '4903', length: 16},
3956 {name: "Visa", short_name: 'visa', prefix: '4', length: 16},
3957 {name: "Visa Electron", short_name: 'electron', prefix: '4026', length: 16}
3958 ],
3959
3960 //return all world currency by ISO 4217
3961 currency_types: [
3962 {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},
3963 {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},
3964 {'code' : 'ALL', 'name' : 'Albania Lek'},
3965 {'code' : 'AMD', 'name' : 'Armenia Dram'},
3966 {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},
3967 {'code' : 'AOA', 'name' : 'Angola Kwanza'},
3968 {'code' : 'ARS', 'name' : 'Argentina Peso'},
3969 {'code' : 'AUD', 'name' : 'Australia Dollar'},
3970 {'code' : 'AWG', 'name' : 'Aruba Guilder'},
3971 {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},
3972 {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},
3973 {'code' : 'BBD', 'name' : 'Barbados Dollar'},
3974 {'code' : 'BDT', 'name' : 'Bangladesh Taka'},
3975 {'code' : 'BGN', 'name' : 'Bulgaria Lev'},
3976 {'code' : 'BHD', 'name' : 'Bahrain Dinar'},
3977 {'code' : 'BIF', 'name' : 'Burundi Franc'},
3978 {'code' : 'BMD', 'name' : 'Bermuda Dollar'},
3979 {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},
3980 {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},
3981 {'code' : 'BRL', 'name' : 'Brazil Real'},
3982 {'code' : 'BSD', 'name' : 'Bahamas Dollar'},
3983 {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},
3984 {'code' : 'BWP', 'name' : 'Botswana Pula'},
3985 {'code' : 'BYR', 'name' : 'Belarus Ruble'},
3986 {'code' : 'BZD', 'name' : 'Belize Dollar'},
3987 {'code' : 'CAD', 'name' : 'Canada Dollar'},
3988 {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},
3989 {'code' : 'CHF', 'name' : 'Switzerland Franc'},
3990 {'code' : 'CLP', 'name' : 'Chile Peso'},
3991 {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},
3992 {'code' : 'COP', 'name' : 'Colombia Peso'},
3993 {'code' : 'CRC', 'name' : 'Costa Rica Colon'},
3994 {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},
3995 {'code' : 'CUP', 'name' : 'Cuba Peso'},
3996 {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},
3997 {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},
3998 {'code' : 'DJF', 'name' : 'Djibouti Franc'},
3999 {'code' : 'DKK', 'name' : 'Denmark Krone'},
4000 {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},
4001 {'code' : 'DZD', 'name' : 'Algeria Dinar'},
4002 {'code' : 'EGP', 'name' : 'Egypt Pound'},
4003 {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},
4004 {'code' : 'ETB', 'name' : 'Ethiopia Birr'},
4005 {'code' : 'EUR', 'name' : 'Euro Member Countries'},
4006 {'code' : 'FJD', 'name' : 'Fiji Dollar'},
4007 {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},
4008 {'code' : 'GBP', 'name' : 'United Kingdom Pound'},
4009 {'code' : 'GEL', 'name' : 'Georgia Lari'},
4010 {'code' : 'GGP', 'name' : 'Guernsey Pound'},
4011 {'code' : 'GHS', 'name' : 'Ghana Cedi'},
4012 {'code' : 'GIP', 'name' : 'Gibraltar Pound'},
4013 {'code' : 'GMD', 'name' : 'Gambia Dalasi'},
4014 {'code' : 'GNF', 'name' : 'Guinea Franc'},
4015 {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},
4016 {'code' : 'GYD', 'name' : 'Guyana Dollar'},
4017 {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},
4018 {'code' : 'HNL', 'name' : 'Honduras Lempira'},
4019 {'code' : 'HRK', 'name' : 'Croatia Kuna'},
4020 {'code' : 'HTG', 'name' : 'Haiti Gourde'},
4021 {'code' : 'HUF', 'name' : 'Hungary Forint'},
4022 {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},
4023 {'code' : 'ILS', 'name' : 'Israel Shekel'},
4024 {'code' : 'IMP', 'name' : 'Isle of Man Pound'},
4025 {'code' : 'INR', 'name' : 'India Rupee'},
4026 {'code' : 'IQD', 'name' : 'Iraq Dinar'},
4027 {'code' : 'IRR', 'name' : 'Iran Rial'},
4028 {'code' : 'ISK', 'name' : 'Iceland Krona'},
4029 {'code' : 'JEP', 'name' : 'Jersey Pound'},
4030 {'code' : 'JMD', 'name' : 'Jamaica Dollar'},
4031 {'code' : 'JOD', 'name' : 'Jordan Dinar'},
4032 {'code' : 'JPY', 'name' : 'Japan Yen'},
4033 {'code' : 'KES', 'name' : 'Kenya Shilling'},
4034 {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},
4035 {'code' : 'KHR', 'name' : 'Cambodia Riel'},
4036 {'code' : 'KMF', 'name' : 'Comoros Franc'},
4037 {'code' : 'KPW', 'name' : 'Korea (North) Won'},
4038 {'code' : 'KRW', 'name' : 'Korea (South) Won'},
4039 {'code' : 'KWD', 'name' : 'Kuwait Dinar'},
4040 {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},
4041 {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},
4042 {'code' : 'LAK', 'name' : 'Laos Kip'},
4043 {'code' : 'LBP', 'name' : 'Lebanon Pound'},
4044 {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},
4045 {'code' : 'LRD', 'name' : 'Liberia Dollar'},
4046 {'code' : 'LSL', 'name' : 'Lesotho Loti'},
4047 {'code' : 'LTL', 'name' : 'Lithuania Litas'},
4048 {'code' : 'LYD', 'name' : 'Libya Dinar'},
4049 {'code' : 'MAD', 'name' : 'Morocco Dirham'},
4050 {'code' : 'MDL', 'name' : 'Moldova Leu'},
4051 {'code' : 'MGA', 'name' : 'Madagascar Ariary'},
4052 {'code' : 'MKD', 'name' : 'Macedonia Denar'},
4053 {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},
4054 {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},
4055 {'code' : 'MOP', 'name' : 'Macau Pataca'},
4056 {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},
4057 {'code' : 'MUR', 'name' : 'Mauritius Rupee'},
4058 {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},
4059 {'code' : 'MWK', 'name' : 'Malawi Kwacha'},
4060 {'code' : 'MXN', 'name' : 'Mexico Peso'},
4061 {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},
4062 {'code' : 'MZN', 'name' : 'Mozambique Metical'},
4063 {'code' : 'NAD', 'name' : 'Namibia Dollar'},
4064 {'code' : 'NGN', 'name' : 'Nigeria Naira'},
4065 {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},
4066 {'code' : 'NOK', 'name' : 'Norway Krone'},
4067 {'code' : 'NPR', 'name' : 'Nepal Rupee'},
4068 {'code' : 'NZD', 'name' : 'New Zealand Dollar'},
4069 {'code' : 'OMR', 'name' : 'Oman Rial'},
4070 {'code' : 'PAB', 'name' : 'Panama Balboa'},
4071 {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},
4072 {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},
4073 {'code' : 'PHP', 'name' : 'Philippines Peso'},
4074 {'code' : 'PKR', 'name' : 'Pakistan Rupee'},
4075 {'code' : 'PLN', 'name' : 'Poland Zloty'},
4076 {'code' : 'PYG', 'name' : 'Paraguay Guarani'},
4077 {'code' : 'QAR', 'name' : 'Qatar Riyal'},
4078 {'code' : 'RON', 'name' : 'Romania New Leu'},
4079 {'code' : 'RSD', 'name' : 'Serbia Dinar'},
4080 {'code' : 'RUB', 'name' : 'Russia Ruble'},
4081 {'code' : 'RWF', 'name' : 'Rwanda Franc'},
4082 {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},
4083 {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},
4084 {'code' : 'SCR', 'name' : 'Seychelles Rupee'},
4085 {'code' : 'SDG', 'name' : 'Sudan Pound'},
4086 {'code' : 'SEK', 'name' : 'Sweden Krona'},
4087 {'code' : 'SGD', 'name' : 'Singapore Dollar'},
4088 {'code' : 'SHP', 'name' : 'Saint Helena Pound'},
4089 {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},
4090 {'code' : 'SOS', 'name' : 'Somalia Shilling'},
4091 {'code' : 'SPL', 'name' : 'Seborga Luigino'},
4092 {'code' : 'SRD', 'name' : 'Suriname Dollar'},
4093 {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},
4094 {'code' : 'SVC', 'name' : 'El Salvador Colon'},
4095 {'code' : 'SYP', 'name' : 'Syria Pound'},
4096 {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},
4097 {'code' : 'THB', 'name' : 'Thailand Baht'},
4098 {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},
4099 {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},
4100 {'code' : 'TND', 'name' : 'Tunisia Dinar'},
4101 {'code' : 'TOP', 'name' : 'Tonga Pa\'anga'},
4102 {'code' : 'TRY', 'name' : 'Turkey Lira'},
4103 {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},
4104 {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},
4105 {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},
4106 {'code' : 'TZS', 'name' : 'Tanzania Shilling'},
4107 {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},
4108 {'code' : 'UGX', 'name' : 'Uganda Shilling'},
4109 {'code' : 'USD', 'name' : 'United States Dollar'},
4110 {'code' : 'UYU', 'name' : 'Uruguay Peso'},
4111 {'code' : 'UZS', 'name' : 'Uzbekistan Som'},
4112 {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},
4113 {'code' : 'VND', 'name' : 'Viet Nam Dong'},
4114 {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},
4115 {'code' : 'WST', 'name' : 'Samoa Tala'},
4116 {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},
4117 {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},
4118 {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},
4119 {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},
4120 {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},
4121 {'code' : 'YER', 'name' : 'Yemen Rial'},
4122 {'code' : 'ZAR', 'name' : 'South Africa Rand'},
4123 {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},
4124 {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}
4125 ],
4126
4127 // return the names of all valide colors
4128 colorNames : [ "AliceBlue", "Black", "Navy", "DarkBlue", "MediumBlue", "Blue", "DarkGreen", "Green", "Teal", "DarkCyan", "DeepSkyBlue", "DarkTurquoise", "MediumSpringGreen", "Lime", "SpringGreen",
4129 "Aqua", "Cyan", "MidnightBlue", "DodgerBlue", "LightSeaGreen", "ForestGreen", "SeaGreen", "DarkSlateGray", "LimeGreen", "MediumSeaGreen", "Turquoise", "RoyalBlue", "SteelBlue", "DarkSlateBlue", "MediumTurquoise",
4130 "Indigo", "DarkOliveGreen", "CadetBlue", "CornflowerBlue", "RebeccaPurple", "MediumAquaMarine", "DimGray", "SlateBlue", "OliveDrab", "SlateGray", "LightSlateGray", "MediumSlateBlue", "LawnGreen", "Chartreuse",
4131 "Aquamarine", "Maroon", "Purple", "Olive", "Gray", "SkyBlue", "LightSkyBlue", "BlueViolet", "DarkRed", "DarkMagenta", "SaddleBrown", "Ivory", "White",
4132 "DarkSeaGreen", "LightGreen", "MediumPurple", "DarkViolet", "PaleGreen", "DarkOrchid", "YellowGreen", "Sienna", "Brown", "DarkGray", "LightBlue", "GreenYellow", "PaleTurquoise", "LightSteelBlue", "PowderBlue",
4133 "FireBrick", "DarkGoldenRod", "MediumOrchid", "RosyBrown", "DarkKhaki", "Silver", "MediumVioletRed", "IndianRed", "Peru", "Chocolate", "Tan", "LightGray", "Thistle", "Orchid", "GoldenRod", "PaleVioletRed",
4134 "Crimson", "Gainsboro", "Plum", "BurlyWood", "LightCyan", "Lavender", "DarkSalmon", "Violet", "PaleGoldenRod", "LightCoral", "Khaki", "AliceBlue", "HoneyDew", "Azure", "SandyBrown", "Wheat", "Beige", "WhiteSmoke",
4135 "MintCream", "GhostWhite", "Salmon", "AntiqueWhite", "Linen", "LightGoldenRodYellow", "OldLace", "Red", "Fuchsia", "Magenta", "DeepPink", "OrangeRed", "Tomato", "HotPink", "Coral", "DarkOrange", "LightSalmon", "Orange",
4136 "LightPink", "Pink", "Gold", "PeachPuff", "NavajoWhite", "Moccasin", "Bisque", "MistyRose", "BlanchedAlmond", "PapayaWhip", "LavenderBlush", "SeaShell", "Cornsilk", "LemonChiffon", "FloralWhite", "Snow", "Yellow", "LightYellow"
4137 ],
4138
4139 // Data taken from https://www.sec.gov/rules/other/4-460list.htm
4140 company: [ "3Com Corp",
4141 "3M Company",
4142 "A.G. Edwards Inc.",
4143 "Abbott Laboratories",
4144 "Abercrombie & Fitch Co.",
4145 "ABM Industries Incorporated",
4146 "Ace Hardware Corporation",
4147 "ACT Manufacturing Inc.",
4148 "Acterna Corp.",
4149 "Adams Resources & Energy, Inc.",
4150 "ADC Telecommunications, Inc.",
4151 "Adelphia Communications Corporation",
4152 "Administaff, Inc.",
4153 "Adobe Systems Incorporated",
4154 "Adolph Coors Company",
4155 "Advance Auto Parts, Inc.",
4156 "Advanced Micro Devices, Inc.",
4157 "AdvancePCS, Inc.",
4158 "Advantica Restaurant Group, Inc.",
4159 "The AES Corporation",
4160 "Aetna Inc.",
4161 "Affiliated Computer Services, Inc.",
4162 "AFLAC Incorporated",
4163 "AGCO Corporation",
4164 "Agilent Technologies, Inc.",
4165 "Agway Inc.",
4166 "Apartment Investment and Management Company",
4167 "Air Products and Chemicals, Inc.",
4168 "Airborne, Inc.",
4169 "Airgas, Inc.",
4170 "AK Steel Holding Corporation",
4171 "Alaska Air Group, Inc.",
4172 "Alberto-Culver Company",
4173 "Albertson's, Inc.",
4174 "Alcoa Inc.",
4175 "Alleghany Corporation",
4176 "Allegheny Energy, Inc.",
4177 "Allegheny Technologies Incorporated",
4178 "Allergan, Inc.",
4179 "ALLETE, Inc.",
4180 "Alliant Energy Corporation",
4181 "Allied Waste Industries, Inc.",
4182 "Allmerica Financial Corporation",
4183 "The Allstate Corporation",
4184 "ALLTEL Corporation",
4185 "The Alpine Group, Inc.",
4186 "Amazon.com, Inc.",
4187 "AMC Entertainment Inc.",
4188 "American Power Conversion Corporation",
4189 "Amerada Hess Corporation",
4190 "AMERCO",
4191 "Ameren Corporation",
4192 "America West Holdings Corporation",
4193 "American Axle & Manufacturing Holdings, Inc.",
4194 "American Eagle Outfitters, Inc.",
4195 "American Electric Power Company, Inc.",
4196 "American Express Company",
4197 "American Financial Group, Inc.",
4198 "American Greetings Corporation",
4199 "American International Group, Inc.",
4200 "American Standard Companies Inc.",
4201 "American Water Works Company, Inc.",
4202 "AmerisourceBergen Corporation",
4203 "Ames Department Stores, Inc.",
4204 "Amgen Inc.",
4205 "Amkor Technology, Inc.",
4206 "AMR Corporation",
4207 "AmSouth Bancorp.",
4208 "Amtran, Inc.",
4209 "Anadarko Petroleum Corporation",
4210 "Analog Devices, Inc.",
4211 "Anheuser-Busch Companies, Inc.",
4212 "Anixter International Inc.",
4213 "AnnTaylor Inc.",
4214 "Anthem, Inc.",
4215 "AOL Time Warner Inc.",
4216 "Aon Corporation",
4217 "Apache Corporation",
4218 "Apple Computer, Inc.",
4219 "Applera Corporation",
4220 "Applied Industrial Technologies, Inc.",
4221 "Applied Materials, Inc.",
4222 "Aquila, Inc.",
4223 "ARAMARK Corporation",
4224 "Arch Coal, Inc.",
4225 "Archer Daniels Midland Company",
4226 "Arkansas Best Corporation",
4227 "Armstrong Holdings, Inc.",
4228 "Arrow Electronics, Inc.",
4229 "ArvinMeritor, Inc.",
4230 "Ashland Inc.",
4231 "Astoria Financial Corporation",
4232 "AT&T Corp.",
4233 "Atmel Corporation",
4234 "Atmos Energy Corporation",
4235 "Audiovox Corporation",
4236 "Autoliv, Inc.",
4237 "Automatic Data Processing, Inc.",
4238 "AutoNation, Inc.",
4239 "AutoZone, Inc.",
4240 "Avaya Inc.",
4241 "Avery Dennison Corporation",
4242 "Avista Corporation",
4243 "Avnet, Inc.",
4244 "Avon Products, Inc.",
4245 "Baker Hughes Incorporated",
4246 "Ball Corporation",
4247 "Bank of America Corporation",
4248 "The Bank of New York Company, Inc.",
4249 "Bank One Corporation",
4250 "Banknorth Group, Inc.",
4251 "Banta Corporation",
4252 "Barnes & Noble, Inc.",
4253 "Bausch & Lomb Incorporated",
4254 "Baxter International Inc.",
4255 "BB&T Corporation",
4256 "The Bear Stearns Companies Inc.",
4257 "Beazer Homes USA, Inc.",
4258 "Beckman Coulter, Inc.",
4259 "Becton, Dickinson and Company",
4260 "Bed Bath & Beyond Inc.",
4261 "Belk, Inc.",
4262 "Bell Microproducts Inc.",
4263 "BellSouth Corporation",
4264 "Belo Corp.",
4265 "Bemis Company, Inc.",
4266 "Benchmark Electronics, Inc.",
4267 "Berkshire Hathaway Inc.",
4268 "Best Buy Co., Inc.",
4269 "Bethlehem Steel Corporation",
4270 "Beverly Enterprises, Inc.",
4271 "Big Lots, Inc.",
4272 "BJ Services Company",
4273 "BJ's Wholesale Club, Inc.",
4274 "The Black & Decker Corporation",
4275 "Black Hills Corporation",
4276 "BMC Software, Inc.",
4277 "The Boeing Company",
4278 "Boise Cascade Corporation",
4279 "Borders Group, Inc.",
4280 "BorgWarner Inc.",
4281 "Boston Scientific Corporation",
4282 "Bowater Incorporated",
4283 "Briggs & Stratton Corporation",
4284 "Brightpoint, Inc.",
4285 "Brinker International, Inc.",
4286 "Bristol-Myers Squibb Company",
4287 "Broadwing, Inc.",
4288 "Brown Shoe Company, Inc.",
4289 "Brown-Forman Corporation",
4290 "Brunswick Corporation",
4291 "Budget Group, Inc.",
4292 "Burlington Coat Factory Warehouse Corporation",
4293 "Burlington Industries, Inc.",
4294 "Burlington Northern Santa Fe Corporation",
4295 "Burlington Resources Inc.",
4296 "C. H. Robinson Worldwide Inc.",
4297 "Cablevision Systems Corp",
4298 "Cabot Corp",
4299 "Cadence Design Systems, Inc.",
4300 "Calpine Corp.",
4301 "Campbell Soup Co.",
4302 "Capital One Financial Corp.",
4303 "Cardinal Health Inc.",
4304 "Caremark Rx Inc.",
4305 "Carlisle Cos. Inc.",
4306 "Carpenter Technology Corp.",
4307 "Casey's General Stores Inc.",
4308 "Caterpillar Inc.",
4309 "CBRL Group Inc.",
4310 "CDI Corp.",
4311 "CDW Computer Centers Inc.",
4312 "CellStar Corp.",
4313 "Cendant Corp",
4314 "Cenex Harvest States Cooperatives",
4315 "Centex Corp.",
4316 "CenturyTel Inc.",
4317 "Ceridian Corp.",
4318 "CH2M Hill Cos. Ltd.",
4319 "Champion Enterprises Inc.",
4320 "Charles Schwab Corp.",
4321 "Charming Shoppes Inc.",
4322 "Charter Communications Inc.",
4323 "Charter One Financial Inc.",
4324 "ChevronTexaco Corp.",
4325 "Chiquita Brands International Inc.",
4326 "Chubb Corp",
4327 "Ciena Corp.",
4328 "Cigna Corp",
4329 "Cincinnati Financial Corp.",
4330 "Cinergy Corp.",
4331 "Cintas Corp.",
4332 "Circuit City Stores Inc.",
4333 "Cisco Systems Inc.",
4334 "Citigroup, Inc",
4335 "Citizens Communications Co.",
4336 "CKE Restaurants Inc.",
4337 "Clear Channel Communications Inc.",
4338 "The Clorox Co.",
4339 "CMGI Inc.",
4340 "CMS Energy Corp.",
4341 "CNF Inc.",
4342 "Coca-Cola Co.",
4343 "Coca-Cola Enterprises Inc.",
4344 "Colgate-Palmolive Co.",
4345 "Collins & Aikman Corp.",
4346 "Comcast Corp.",
4347 "Comdisco Inc.",
4348 "Comerica Inc.",
4349 "Comfort Systems USA Inc.",
4350 "Commercial Metals Co.",
4351 "Community Health Systems Inc.",
4352 "Compass Bancshares Inc",
4353 "Computer Associates International Inc.",
4354 "Computer Sciences Corp.",
4355 "Compuware Corp.",
4356 "Comverse Technology Inc.",
4357 "ConAgra Foods Inc.",
4358 "Concord EFS Inc.",
4359 "Conectiv, Inc",
4360 "Conoco Inc",
4361 "Conseco Inc.",
4362 "Consolidated Freightways Corp.",
4363 "Consolidated Edison Inc.",
4364 "Constellation Brands Inc.",
4365 "Constellation Emergy Group Inc.",
4366 "Continental Airlines Inc.",
4367 "Convergys Corp.",
4368 "Cooper Cameron Corp.",
4369 "Cooper Industries Ltd.",
4370 "Cooper Tire & Rubber Co.",
4371 "Corn Products International Inc.",
4372 "Corning Inc.",
4373 "Costco Wholesale Corp.",
4374 "Countrywide Credit Industries Inc.",
4375 "Coventry Health Care Inc.",
4376 "Cox Communications Inc.",
4377 "Crane Co.",
4378 "Crompton Corp.",
4379 "Crown Cork & Seal Co. Inc.",
4380 "CSK Auto Corp.",
4381 "CSX Corp.",
4382 "Cummins Inc.",
4383 "CVS Corp.",
4384 "Cytec Industries Inc.",
4385 "D&K Healthcare Resources, Inc.",
4386 "D.R. Horton Inc.",
4387 "Dana Corporation",
4388 "Danaher Corporation",
4389 "Darden Restaurants Inc.",
4390 "DaVita Inc.",
4391 "Dean Foods Company",
4392 "Deere & Company",
4393 "Del Monte Foods Co",
4394 "Dell Computer Corporation",
4395 "Delphi Corp.",
4396 "Delta Air Lines Inc.",
4397 "Deluxe Corporation",
4398 "Devon Energy Corporation",
4399 "Di Giorgio Corporation",
4400 "Dial Corporation",
4401 "Diebold Incorporated",
4402 "Dillard's Inc.",
4403 "DIMON Incorporated",
4404 "Dole Food Company, Inc.",
4405 "Dollar General Corporation",
4406 "Dollar Tree Stores, Inc.",
4407 "Dominion Resources, Inc.",
4408 "Domino's Pizza LLC",
4409 "Dover Corporation, Inc.",
4410 "Dow Chemical Company",
4411 "Dow Jones & Company, Inc.",
4412 "DPL Inc.",
4413 "DQE Inc.",
4414 "Dreyer's Grand Ice Cream, Inc.",
4415 "DST Systems, Inc.",
4416 "DTE Energy Co.",
4417 "E.I. Du Pont de Nemours and Company",
4418 "Duke Energy Corp",
4419 "Dun & Bradstreet Inc.",
4420 "DURA Automotive Systems Inc.",
4421 "DynCorp",
4422 "Dynegy Inc.",
4423 "E*Trade Group, Inc.",
4424 "E.W. Scripps Company",
4425 "Earthlink, Inc.",
4426 "Eastman Chemical Company",
4427 "Eastman Kodak Company",
4428 "Eaton Corporation",
4429 "Echostar Communications Corporation",
4430 "Ecolab Inc.",
4431 "Edison International",
4432 "EGL Inc.",
4433 "El Paso Corporation",
4434 "Electronic Arts Inc.",
4435 "Electronic Data Systems Corp.",
4436 "Eli Lilly and Company",
4437 "EMC Corporation",
4438 "Emcor Group Inc.",
4439 "Emerson Electric Co.",
4440 "Encompass Services Corporation",
4441 "Energizer Holdings Inc.",
4442 "Energy East Corporation",
4443 "Engelhard Corporation",
4444 "Enron Corp.",
4445 "Entergy Corporation",
4446 "Enterprise Products Partners L.P.",
4447 "EOG Resources, Inc.",
4448 "Equifax Inc.",
4449 "Equitable Resources Inc.",
4450 "Equity Office Properties Trust",
4451 "Equity Residential Properties Trust",
4452 "Estee Lauder Companies Inc.",
4453 "Exelon Corporation",
4454 "Exide Technologies",
4455 "Expeditors International of Washington Inc.",
4456 "Express Scripts Inc.",
4457 "ExxonMobil Corporation",
4458 "Fairchild Semiconductor International Inc.",
4459 "Family Dollar Stores Inc.",
4460 "Farmland Industries Inc.",
4461 "Federal Mogul Corp.",
4462 "Federated Department Stores Inc.",
4463 "Federal Express Corp.",
4464 "Felcor Lodging Trust Inc.",
4465 "Ferro Corp.",
4466 "Fidelity National Financial Inc.",
4467 "Fifth Third Bancorp",
4468 "First American Financial Corp.",
4469 "First Data Corp.",
4470 "First National of Nebraska Inc.",
4471 "First Tennessee National Corp.",
4472 "FirstEnergy Corp.",
4473 "Fiserv Inc.",
4474 "Fisher Scientific International Inc.",
4475 "FleetBoston Financial Co.",
4476 "Fleetwood Enterprises Inc.",
4477 "Fleming Companies Inc.",
4478 "Flowers Foods Inc.",
4479 "Flowserv Corp",
4480 "Fluor Corp",
4481 "FMC Corp",
4482 "Foamex International Inc",
4483 "Foot Locker Inc",
4484 "Footstar Inc.",
4485 "Ford Motor Co",
4486 "Forest Laboratories Inc.",
4487 "Fortune Brands Inc.",
4488 "Foster Wheeler Ltd.",
4489 "FPL Group Inc.",
4490 "Franklin Resources Inc.",
4491 "Freeport McMoran Copper & Gold Inc.",
4492 "Frontier Oil Corp",
4493 "Furniture Brands International Inc.",
4494 "Gannett Co., Inc.",
4495 "Gap Inc.",
4496 "Gateway Inc.",
4497 "GATX Corporation",
4498 "Gemstar-TV Guide International Inc.",
4499 "GenCorp Inc.",
4500 "General Cable Corporation",
4501 "General Dynamics Corporation",
4502 "General Electric Company",
4503 "General Mills Inc",
4504 "General Motors Corporation",
4505 "Genesis Health Ventures Inc.",
4506 "Gentek Inc.",
4507 "Gentiva Health Services Inc.",
4508 "Genuine Parts Company",
4509 "Genuity Inc.",
4510 "Genzyme Corporation",
4511 "Georgia Gulf Corporation",
4512 "Georgia-Pacific Corporation",
4513 "Gillette Company",
4514 "Gold Kist Inc.",
4515 "Golden State Bancorp Inc.",
4516 "Golden West Financial Corporation",
4517 "Goldman Sachs Group Inc.",
4518 "Goodrich Corporation",
4519 "The Goodyear Tire & Rubber Company",
4520 "Granite Construction Incorporated",
4521 "Graybar Electric Company Inc.",
4522 "Great Lakes Chemical Corporation",
4523 "Great Plains Energy Inc.",
4524 "GreenPoint Financial Corp.",
4525 "Greif Bros. Corporation",
4526 "Grey Global Group Inc.",
4527 "Group 1 Automotive Inc.",
4528 "Guidant Corporation",
4529 "H&R Block Inc.",
4530 "H.B. Fuller Company",
4531 "H.J. Heinz Company",
4532 "Halliburton Co.",
4533 "Harley-Davidson Inc.",
4534 "Harman International Industries Inc.",
4535 "Harrah's Entertainment Inc.",
4536 "Harris Corp.",
4537 "Harsco Corp.",
4538 "Hartford Financial Services Group Inc.",
4539 "Hasbro Inc.",
4540 "Hawaiian Electric Industries Inc.",
4541 "HCA Inc.",
4542 "Health Management Associates Inc.",
4543 "Health Net Inc.",
4544 "Healthsouth Corp",
4545 "Henry Schein Inc.",
4546 "Hercules Inc.",
4547 "Herman Miller Inc.",
4548 "Hershey Foods Corp.",
4549 "Hewlett-Packard Company",
4550 "Hibernia Corp.",
4551 "Hillenbrand Industries Inc.",
4552 "Hilton Hotels Corp.",
4553 "Hollywood Entertainment Corp.",
4554 "Home Depot Inc.",
4555 "Hon Industries Inc.",
4556 "Honeywell International Inc.",
4557 "Hormel Foods Corp.",
4558 "Host Marriott Corp.",
4559 "Household International Corp.",
4560 "Hovnanian Enterprises Inc.",
4561 "Hub Group Inc.",
4562 "Hubbell Inc.",
4563 "Hughes Supply Inc.",
4564 "Humana Inc.",
4565 "Huntington Bancshares Inc.",
4566 "Idacorp Inc.",
4567 "IDT Corporation",
4568 "IKON Office Solutions Inc.",
4569 "Illinois Tool Works Inc.",
4570 "IMC Global Inc.",
4571 "Imperial Sugar Company",
4572 "IMS Health Inc.",
4573 "Ingles Market Inc",
4574 "Ingram Micro Inc.",
4575 "Insight Enterprises Inc.",
4576 "Integrated Electrical Services Inc.",
4577 "Intel Corporation",
4578 "International Paper Co.",
4579 "Interpublic Group of Companies Inc.",
4580 "Interstate Bakeries Corporation",
4581 "International Business Machines Corp.",
4582 "International Flavors & Fragrances Inc.",
4583 "International Multifoods Corporation",
4584 "Intuit Inc.",
4585 "IT Group Inc.",
4586 "ITT Industries Inc.",
4587 "Ivax Corp.",
4588 "J.B. Hunt Transport Services Inc.",
4589 "J.C. Penny Co.",
4590 "J.P. Morgan Chase & Co.",
4591 "Jabil Circuit Inc.",
4592 "Jack In The Box Inc.",
4593 "Jacobs Engineering Group Inc.",
4594 "JDS Uniphase Corp.",
4595 "Jefferson-Pilot Co.",
4596 "John Hancock Financial Services Inc.",
4597 "Johnson & Johnson",
4598 "Johnson Controls Inc.",
4599 "Jones Apparel Group Inc.",
4600 "KB Home",
4601 "Kellogg Company",
4602 "Kellwood Company",
4603 "Kelly Services Inc.",
4604 "Kemet Corp.",
4605 "Kennametal Inc.",
4606 "Kerr-McGee Corporation",
4607 "KeyCorp",
4608 "KeySpan Corp.",
4609 "Kimball International Inc.",
4610 "Kimberly-Clark Corporation",
4611 "Kindred Healthcare Inc.",
4612 "KLA-Tencor Corporation",
4613 "K-Mart Corp.",
4614 "Knight-Ridder Inc.",
4615 "Kohl's Corp.",
4616 "KPMG Consulting Inc.",
4617 "Kroger Co.",
4618 "L-3 Communications Holdings Inc.",
4619 "Laboratory Corporation of America Holdings",
4620 "Lam Research Corporation",
4621 "LandAmerica Financial Group Inc.",
4622 "Lands' End Inc.",
4623 "Landstar System Inc.",
4624 "La-Z-Boy Inc.",
4625 "Lear Corporation",
4626 "Legg Mason Inc.",
4627 "Leggett & Platt Inc.",
4628 "Lehman Brothers Holdings Inc.",
4629 "Lennar Corporation",
4630 "Lennox International Inc.",
4631 "Level 3 Communications Inc.",
4632 "Levi Strauss & Co.",
4633 "Lexmark International Inc.",
4634 "Limited Inc.",
4635 "Lincoln National Corporation",
4636 "Linens 'n Things Inc.",
4637 "Lithia Motors Inc.",
4638 "Liz Claiborne Inc.",
4639 "Lockheed Martin Corporation",
4640 "Loews Corporation",
4641 "Longs Drug Stores Corporation",
4642 "Louisiana-Pacific Corporation",
4643 "Lowe's Companies Inc.",
4644 "LSI Logic Corporation",
4645 "The LTV Corporation",
4646 "The Lubrizol Corporation",
4647 "Lucent Technologies Inc.",
4648 "Lyondell Chemical Company",
4649 "M & T Bank Corporation",
4650 "Magellan Health Services Inc.",
4651 "Mail-Well Inc.",
4652 "Mandalay Resort Group",
4653 "Manor Care Inc.",
4654 "Manpower Inc.",
4655 "Marathon Oil Corporation",
4656 "Mariner Health Care Inc.",
4657 "Markel Corporation",
4658 "Marriott International Inc.",
4659 "Marsh & McLennan Companies Inc.",
4660 "Marsh Supermarkets Inc.",
4661 "Marshall & Ilsley Corporation",
4662 "Martin Marietta Materials Inc.",
4663 "Masco Corporation",
4664 "Massey Energy Company",
4665 "MasTec Inc.",
4666 "Mattel Inc.",
4667 "Maxim Integrated Products Inc.",
4668 "Maxtor Corporation",
4669 "Maxxam Inc.",
4670 "The May Department Stores Company",
4671 "Maytag Corporation",
4672 "MBNA Corporation",
4673 "McCormick & Company Incorporated",
4674 "McDonald's Corporation",
4675 "The McGraw-Hill Companies Inc.",
4676 "McKesson Corporation",
4677 "McLeodUSA Incorporated",
4678 "M.D.C. Holdings Inc.",
4679 "MDU Resources Group Inc.",
4680 "MeadWestvaco Corporation",
4681 "Medtronic Inc.",
4682 "Mellon Financial Corporation",
4683 "The Men's Wearhouse Inc.",
4684 "Merck & Co., Inc.",
4685 "Mercury General Corporation",
4686 "Merrill Lynch & Co. Inc.",
4687 "Metaldyne Corporation",
4688 "Metals USA Inc.",
4689 "MetLife Inc.",
4690 "Metris Companies Inc",
4691 "MGIC Investment Corporation",
4692 "MGM Mirage",
4693 "Michaels Stores Inc.",
4694 "Micron Technology Inc.",
4695 "Microsoft Corporation",
4696 "Milacron Inc.",
4697 "Millennium Chemicals Inc.",
4698 "Mirant Corporation",
4699 "Mohawk Industries Inc.",
4700 "Molex Incorporated",
4701 "The MONY Group Inc.",
4702 "Morgan Stanley Dean Witter & Co.",
4703 "Motorola Inc.",
4704 "MPS Group Inc.",
4705 "Murphy Oil Corporation",
4706 "Nabors Industries Inc",
4707 "Nacco Industries Inc",
4708 "Nash Finch Company",
4709 "National City Corp.",
4710 "National Commerce Financial Corporation",
4711 "National Fuel Gas Company",
4712 "National Oilwell Inc",
4713 "National Rural Utilities Cooperative Finance Corporation",
4714 "National Semiconductor Corporation",
4715 "National Service Industries Inc",
4716 "Navistar International Corporation",
4717 "NCR Corporation",
4718 "The Neiman Marcus Group Inc.",
4719 "New Jersey Resources Corporation",
4720 "New York Times Company",
4721 "Newell Rubbermaid Inc",
4722 "Newmont Mining Corporation",
4723 "Nextel Communications Inc",
4724 "Nicor Inc",
4725 "Nike Inc",
4726 "NiSource Inc",
4727 "Noble Energy Inc",
4728 "Nordstrom Inc",
4729 "Norfolk Southern Corporation",
4730 "Nortek Inc",
4731 "North Fork Bancorporation Inc",
4732 "Northeast Utilities System",
4733 "Northern Trust Corporation",
4734 "Northrop Grumman Corporation",
4735 "NorthWestern Corporation",
4736 "Novellus Systems Inc",
4737 "NSTAR",
4738 "NTL Incorporated",
4739 "Nucor Corp",
4740 "Nvidia Corp",
4741 "NVR Inc",
4742 "Northwest Airlines Corp",
4743 "Occidental Petroleum Corp",
4744 "Ocean Energy Inc",
4745 "Office Depot Inc.",
4746 "OfficeMax Inc",
4747 "OGE Energy Corp",
4748 "Oglethorpe Power Corp.",
4749 "Ohio Casualty Corp.",
4750 "Old Republic International Corp.",
4751 "Olin Corp.",
4752 "OM Group Inc",
4753 "Omnicare Inc",
4754 "Omnicom Group",
4755 "On Semiconductor Corp",
4756 "ONEOK Inc",
4757 "Oracle Corp",
4758 "Oshkosh Truck Corp",
4759 "Outback Steakhouse Inc.",
4760 "Owens & Minor Inc.",
4761 "Owens Corning",
4762 "Owens-Illinois Inc",
4763 "Oxford Health Plans Inc",
4764 "Paccar Inc",
4765 "PacifiCare Health Systems Inc",
4766 "Packaging Corp. of America",
4767 "Pactiv Corp",
4768 "Pall Corp",
4769 "Pantry Inc",
4770 "Park Place Entertainment Corp",
4771 "Parker Hannifin Corp.",
4772 "Pathmark Stores Inc.",
4773 "Paychex Inc",
4774 "Payless Shoesource Inc",
4775 "Penn Traffic Co.",
4776 "Pennzoil-Quaker State Company",
4777 "Pentair Inc",
4778 "Peoples Energy Corp.",
4779 "PeopleSoft Inc",
4780 "Pep Boys Manny, Moe & Jack",
4781 "Potomac Electric Power Co.",
4782 "Pepsi Bottling Group Inc.",
4783 "PepsiAmericas Inc.",
4784 "PepsiCo Inc.",
4785 "Performance Food Group Co.",
4786 "Perini Corp",
4787 "PerkinElmer Inc",
4788 "Perot Systems Corp",
4789 "Petco Animal Supplies Inc.",
4790 "Peter Kiewit Sons', Inc.",
4791 "PETsMART Inc",
4792 "Pfizer Inc",
4793 "Pacific Gas & Electric Corp.",
4794 "Pharmacia Corp",
4795 "Phar Mor Inc.",
4796 "Phelps Dodge Corp.",
4797 "Philip Morris Companies Inc.",
4798 "Phillips Petroleum Co",
4799 "Phillips Van Heusen Corp.",
4800 "Phoenix Companies Inc",
4801 "Pier 1 Imports Inc.",
4802 "Pilgrim's Pride Corporation",
4803 "Pinnacle West Capital Corp",
4804 "Pioneer-Standard Electronics Inc.",
4805 "Pitney Bowes Inc.",
4806 "Pittston Brinks Group",
4807 "Plains All American Pipeline LP",
4808 "PNC Financial Services Group Inc.",
4809 "PNM Resources Inc",
4810 "Polaris Industries Inc.",
4811 "Polo Ralph Lauren Corp",
4812 "PolyOne Corp",
4813 "Popular Inc",
4814 "Potlatch Corp",
4815 "PPG Industries Inc",
4816 "PPL Corp",
4817 "Praxair Inc",
4818 "Precision Castparts Corp",
4819 "Premcor Inc.",
4820 "Pride International Inc",
4821 "Primedia Inc",
4822 "Principal Financial Group Inc.",
4823 "Procter & Gamble Co.",
4824 "Pro-Fac Cooperative Inc.",
4825 "Progress Energy Inc",
4826 "Progressive Corporation",
4827 "Protective Life Corp",
4828 "Provident Financial Group",
4829 "Providian Financial Corp.",
4830 "Prudential Financial Inc.",
4831 "PSS World Medical Inc",
4832 "Public Service Enterprise Group Inc.",
4833 "Publix Super Markets Inc.",
4834 "Puget Energy Inc.",
4835 "Pulte Homes Inc",
4836 "Qualcomm Inc",
4837 "Quanta Services Inc.",
4838 "Quantum Corp",
4839 "Quest Diagnostics Inc.",
4840 "Questar Corp",
4841 "Quintiles Transnational",
4842 "Qwest Communications Intl Inc",
4843 "R.J. Reynolds Tobacco Company",
4844 "R.R. Donnelley & Sons Company",
4845 "Radio Shack Corporation",
4846 "Raymond James Financial Inc.",
4847 "Raytheon Company",
4848 "Reader's Digest Association Inc.",
4849 "Reebok International Ltd.",
4850 "Regions Financial Corp.",
4851 "Regis Corporation",
4852 "Reliance Steel & Aluminum Co.",
4853 "Reliant Energy Inc.",
4854 "Rent A Center Inc",
4855 "Republic Services Inc",
4856 "Revlon Inc",
4857 "RGS Energy Group Inc",
4858 "Rite Aid Corp",
4859 "Riverwood Holding Inc.",
4860 "RoadwayCorp",
4861 "Robert Half International Inc.",
4862 "Rock-Tenn Co",
4863 "Rockwell Automation Inc",
4864 "Rockwell Collins Inc",
4865 "Rohm & Haas Co.",
4866 "Ross Stores Inc",
4867 "RPM Inc.",
4868 "Ruddick Corp",
4869 "Ryder System Inc",
4870 "Ryerson Tull Inc",
4871 "Ryland Group Inc.",
4872 "Sabre Holdings Corp",
4873 "Safeco Corp",
4874 "Safeguard Scientifics Inc.",
4875 "Safeway Inc",
4876 "Saks Inc",
4877 "Sanmina-SCI Inc",
4878 "Sara Lee Corp",
4879 "SBC Communications Inc",
4880 "Scana Corp.",
4881 "Schering-Plough Corp",
4882 "Scholastic Corp",
4883 "SCI Systems Onc.",
4884 "Science Applications Intl. Inc.",
4885 "Scientific-Atlanta Inc",
4886 "Scotts Company",
4887 "Seaboard Corp",
4888 "Sealed Air Corp",
4889 "Sears Roebuck & Co",
4890 "Sempra Energy",
4891 "Sequa Corp",
4892 "Service Corp. International",
4893 "ServiceMaster Co",
4894 "Shaw Group Inc",
4895 "Sherwin-Williams Company",
4896 "Shopko Stores Inc",
4897 "Siebel Systems Inc",
4898 "Sierra Health Services Inc",
4899 "Sierra Pacific Resources",
4900 "Silgan Holdings Inc.",
4901 "Silicon Graphics Inc",
4902 "Simon Property Group Inc",
4903 "SLM Corporation",
4904 "Smith International Inc",
4905 "Smithfield Foods Inc",
4906 "Smurfit-Stone Container Corp",
4907 "Snap-On Inc",
4908 "Solectron Corp",
4909 "Solutia Inc",
4910 "Sonic Automotive Inc.",
4911 "Sonoco Products Co.",
4912 "Southern Company",
4913 "Southern Union Company",
4914 "SouthTrust Corp.",
4915 "Southwest Airlines Co",
4916 "Southwest Gas Corp",
4917 "Sovereign Bancorp Inc.",
4918 "Spartan Stores Inc",
4919 "Spherion Corp",
4920 "Sports Authority Inc",
4921 "Sprint Corp.",
4922 "SPX Corp",
4923 "St. Jude Medical Inc",
4924 "St. Paul Cos.",
4925 "Staff Leasing Inc.",
4926 "StanCorp Financial Group Inc",
4927 "Standard Pacific Corp.",
4928 "Stanley Works",
4929 "Staples Inc",
4930 "Starbucks Corp",
4931 "Starwood Hotels & Resorts Worldwide Inc",
4932 "State Street Corp.",
4933 "Stater Bros. Holdings Inc.",
4934 "Steelcase Inc",
4935 "Stein Mart Inc",
4936 "Stewart & Stevenson Services Inc",
4937 "Stewart Information Services Corp",
4938 "Stilwell Financial Inc",
4939 "Storage Technology Corporation",
4940 "Stryker Corp",
4941 "Sun Healthcare Group Inc.",
4942 "Sun Microsystems Inc.",
4943 "SunGard Data Systems Inc.",
4944 "Sunoco Inc.",
4945 "SunTrust Banks Inc",
4946 "Supervalu Inc",
4947 "Swift Transportation, Co., Inc",
4948 "Symbol Technologies Inc",
4949 "Synovus Financial Corp.",
4950 "Sysco Corp",
4951 "Systemax Inc.",
4952 "Target Corp.",
4953 "Tech Data Corporation",
4954 "TECO Energy Inc",
4955 "Tecumseh Products Company",
4956 "Tektronix Inc",
4957 "Teleflex Incorporated",
4958 "Telephone & Data Systems Inc",
4959 "Tellabs Inc.",
4960 "Temple-Inland Inc",
4961 "Tenet Healthcare Corporation",
4962 "Tenneco Automotive Inc.",
4963 "Teradyne Inc",
4964 "Terex Corp",
4965 "Tesoro Petroleum Corp.",
4966 "Texas Industries Inc.",
4967 "Texas Instruments Incorporated",
4968 "Textron Inc",
4969 "Thermo Electron Corporation",
4970 "Thomas & Betts Corporation",
4971 "Tiffany & Co",
4972 "Timken Company",
4973 "TJX Companies Inc",
4974 "TMP Worldwide Inc",
4975 "Toll Brothers Inc",
4976 "Torchmark Corporation",
4977 "Toro Company",
4978 "Tower Automotive Inc.",
4979 "Toys 'R' Us Inc",
4980 "Trans World Entertainment Corp.",
4981 "TransMontaigne Inc",
4982 "Transocean Inc",
4983 "TravelCenters of America Inc.",
4984 "Triad Hospitals Inc",
4985 "Tribune Company",
4986 "Trigon Healthcare Inc.",
4987 "Trinity Industries Inc",
4988 "Trump Hotels & Casino Resorts Inc.",
4989 "TruServ Corporation",
4990 "TRW Inc",
4991 "TXU Corp",
4992 "Tyson Foods Inc",
4993 "U.S. Bancorp",
4994 "U.S. Industries Inc.",
4995 "UAL Corporation",
4996 "UGI Corporation",
4997 "Unified Western Grocers Inc",
4998 "Union Pacific Corporation",
4999 "Union Planters Corp",
5000 "Unisource Energy Corp",
5001 "Unisys Corporation",
5002 "United Auto Group Inc",
5003 "United Defense Industries Inc.",
5004 "United Parcel Service Inc",
5005 "United Rentals Inc",
5006 "United Stationers Inc",
5007 "United Technologies Corporation",
5008 "UnitedHealth Group Incorporated",
5009 "Unitrin Inc",
5010 "Universal Corporation",
5011 "Universal Forest Products Inc",
5012 "Universal Health Services Inc",
5013 "Unocal Corporation",
5014 "Unova Inc",
5015 "UnumProvident Corporation",
5016 "URS Corporation",
5017 "US Airways Group Inc",
5018 "US Oncology Inc",
5019 "USA Interactive",
5020 "USFreighways Corporation",
5021 "USG Corporation",
5022 "UST Inc",
5023 "Valero Energy Corporation",
5024 "Valspar Corporation",
5025 "Value City Department Stores Inc",
5026 "Varco International Inc",
5027 "Vectren Corporation",
5028 "Veritas Software Corporation",
5029 "Verizon Communications Inc",
5030 "VF Corporation",
5031 "Viacom Inc",
5032 "Viad Corp",
5033 "Viasystems Group Inc",
5034 "Vishay Intertechnology Inc",
5035 "Visteon Corporation",
5036 "Volt Information Sciences Inc",
5037 "Vulcan Materials Company",
5038 "W.R. Berkley Corporation",
5039 "W.R. Grace & Co",
5040 "W.W. Grainger Inc",
5041 "Wachovia Corporation",
5042 "Wakenhut Corporation",
5043 "Walgreen Co",
5044 "Wallace Computer Services Inc",
5045 "Wal-Mart Stores Inc",
5046 "Walt Disney Co",
5047 "Walter Industries Inc",
5048 "Washington Mutual Inc",
5049 "Washington Post Co.",
5050 "Waste Management Inc",
5051 "Watsco Inc",
5052 "Weatherford International Inc",
5053 "Weis Markets Inc.",
5054 "Wellpoint Health Networks Inc",
5055 "Wells Fargo & Company",
5056 "Wendy's International Inc",
5057 "Werner Enterprises Inc",
5058 "WESCO International Inc",
5059 "Western Digital Inc",
5060 "Western Gas Resources Inc",
5061 "WestPoint Stevens Inc",
5062 "Weyerhauser Company",
5063 "WGL Holdings Inc",
5064 "Whirlpool Corporation",
5065 "Whole Foods Market Inc",
5066 "Willamette Industries Inc.",
5067 "Williams Companies Inc",
5068 "Williams Sonoma Inc",
5069 "Winn Dixie Stores Inc",
5070 "Wisconsin Energy Corporation",
5071 "Wm Wrigley Jr Company",
5072 "World Fuel Services Corporation",
5073 "WorldCom Inc",
5074 "Worthington Industries Inc",
5075 "WPS Resources Corporation",
5076 "Wyeth",
5077 "Wyndham International Inc",
5078 "Xcel Energy Inc",
5079 "Xerox Corp",
5080 "Xilinx Inc",
5081 "XO Communications Inc",
5082 "Yellow Corporation",
5083 "York International Corp",
5084 "Yum Brands Inc.",
5085 "Zale Corporation",
5086 "Zions Bancorporation"
5087 ],
5088
5089 fileExtension : {
5090 "raster" : ["bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw", "tiff"],
5091 "vector" : ["3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "odg", "svg", "xar"],
5092 "3d" : ["3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob", "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d"],
5093 "document" : ["doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv", "rtf", "tex", "xhtml", "xps"]
5094 },
5095
5096 // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json
5097 timezones: [
5098 {
5099 "name": "Dateline Standard Time",
5100 "abbr": "DST",
5101 "offset": -12,
5102 "isdst": false,
5103 "text": "(UTC-12:00) International Date Line West",
5104 "utc": [
5105 "Etc/GMT+12"
5106 ]
5107 },
5108 {
5109 "name": "UTC-11",
5110 "abbr": "U",
5111 "offset": -11,
5112 "isdst": false,
5113 "text": "(UTC-11:00) Coordinated Universal Time-11",
5114 "utc": [
5115 "Etc/GMT+11",
5116 "Pacific/Midway",
5117 "Pacific/Niue",
5118 "Pacific/Pago_Pago"
5119 ]
5120 },
5121 {
5122 "name": "Hawaiian Standard Time",
5123 "abbr": "HST",
5124 "offset": -10,
5125 "isdst": false,
5126 "text": "(UTC-10:00) Hawaii",
5127 "utc": [
5128 "Etc/GMT+10",
5129 "Pacific/Honolulu",
5130 "Pacific/Johnston",
5131 "Pacific/Rarotonga",
5132 "Pacific/Tahiti"
5133 ]
5134 },
5135 {
5136 "name": "Alaskan Standard Time",
5137 "abbr": "AKDT",
5138 "offset": -8,
5139 "isdst": true,
5140 "text": "(UTC-09:00) Alaska",
5141 "utc": [
5142 "America/Anchorage",
5143 "America/Juneau",
5144 "America/Nome",
5145 "America/Sitka",
5146 "America/Yakutat"
5147 ]
5148 },
5149 {
5150 "name": "Pacific Standard Time (Mexico)",
5151 "abbr": "PDT",
5152 "offset": -7,
5153 "isdst": true,
5154 "text": "(UTC-08:00) Baja California",
5155 "utc": [
5156 "America/Santa_Isabel"
5157 ]
5158 },
5159 {
5160 "name": "Pacific Standard Time",
5161 "abbr": "PDT",
5162 "offset": -7,
5163 "isdst": true,
5164 "text": "(UTC-08:00) Pacific Time (US & Canada)",
5165 "utc": [
5166 "America/Dawson",
5167 "America/Los_Angeles",
5168 "America/Tijuana",
5169 "America/Vancouver",
5170 "America/Whitehorse",
5171 "PST8PDT"
5172 ]
5173 },
5174 {
5175 "name": "US Mountain Standard Time",
5176 "abbr": "UMST",
5177 "offset": -7,
5178 "isdst": false,
5179 "text": "(UTC-07:00) Arizona",
5180 "utc": [
5181 "America/Creston",
5182 "America/Dawson_Creek",
5183 "America/Hermosillo",
5184 "America/Phoenix",
5185 "Etc/GMT+7"
5186 ]
5187 },
5188 {
5189 "name": "Mountain Standard Time (Mexico)",
5190 "abbr": "MDT",
5191 "offset": -6,
5192 "isdst": true,
5193 "text": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
5194 "utc": [
5195 "America/Chihuahua",
5196 "America/Mazatlan"
5197 ]
5198 },
5199 {
5200 "name": "Mountain Standard Time",
5201 "abbr": "MDT",
5202 "offset": -6,
5203 "isdst": true,
5204 "text": "(UTC-07:00) Mountain Time (US & Canada)",
5205 "utc": [
5206 "America/Boise",
5207 "America/Cambridge_Bay",
5208 "America/Denver",
5209 "America/Edmonton",
5210 "America/Inuvik",
5211 "America/Ojinaga",
5212 "America/Yellowknife",
5213 "MST7MDT"
5214 ]
5215 },
5216 {
5217 "name": "Central America Standard Time",
5218 "abbr": "CAST",
5219 "offset": -6,
5220 "isdst": false,
5221 "text": "(UTC-06:00) Central America",
5222 "utc": [
5223 "America/Belize",
5224 "America/Costa_Rica",
5225 "America/El_Salvador",
5226 "America/Guatemala",
5227 "America/Managua",
5228 "America/Tegucigalpa",
5229 "Etc/GMT+6",
5230 "Pacific/Galapagos"
5231 ]
5232 },
5233 {
5234 "name": "Central Standard Time",
5235 "abbr": "CDT",
5236 "offset": -5,
5237 "isdst": true,
5238 "text": "(UTC-06:00) Central Time (US & Canada)",
5239 "utc": [
5240 "America/Chicago",
5241 "America/Indiana/Knox",
5242 "America/Indiana/Tell_City",
5243 "America/Matamoros",
5244 "America/Menominee",
5245 "America/North_Dakota/Beulah",
5246 "America/North_Dakota/Center",
5247 "America/North_Dakota/New_Salem",
5248 "America/Rainy_River",
5249 "America/Rankin_Inlet",
5250 "America/Resolute",
5251 "America/Winnipeg",
5252 "CST6CDT"
5253 ]
5254 },
5255 {
5256 "name": "Central Standard Time (Mexico)",
5257 "abbr": "CDT",
5258 "offset": -5,
5259 "isdst": true,
5260 "text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
5261 "utc": [
5262 "America/Bahia_Banderas",
5263 "America/Cancun",
5264 "America/Merida",
5265 "America/Mexico_City",
5266 "America/Monterrey"
5267 ]
5268 },
5269 {
5270 "name": "Canada Central Standard Time",
5271 "abbr": "CCST",
5272 "offset": -6,
5273 "isdst": false,
5274 "text": "(UTC-06:00) Saskatchewan",
5275 "utc": [
5276 "America/Regina",
5277 "America/Swift_Current"
5278 ]
5279 },
5280 {
5281 "name": "SA Pacific Standard Time",
5282 "abbr": "SPST",
5283 "offset": -5,
5284 "isdst": false,
5285 "text": "(UTC-05:00) Bogota, Lima, Quito",
5286 "utc": [
5287 "America/Bogota",
5288 "America/Cayman",
5289 "America/Coral_Harbour",
5290 "America/Eirunepe",
5291 "America/Guayaquil",
5292 "America/Jamaica",
5293 "America/Lima",
5294 "America/Panama",
5295 "America/Rio_Branco",
5296 "Etc/GMT+5"
5297 ]
5298 },
5299 {
5300 "name": "Eastern Standard Time",
5301 "abbr": "EDT",
5302 "offset": -4,
5303 "isdst": true,
5304 "text": "(UTC-05:00) Eastern Time (US & Canada)",
5305 "utc": [
5306 "America/Detroit",
5307 "America/Havana",
5308 "America/Indiana/Petersburg",
5309 "America/Indiana/Vincennes",
5310 "America/Indiana/Winamac",
5311 "America/Iqaluit",
5312 "America/Kentucky/Monticello",
5313 "America/Louisville",
5314 "America/Montreal",
5315 "America/Nassau",
5316 "America/New_York",
5317 "America/Nipigon",
5318 "America/Pangnirtung",
5319 "America/Port-au-Prince",
5320 "America/Thunder_Bay",
5321 "America/Toronto",
5322 "EST5EDT"
5323 ]
5324 },
5325 {
5326 "name": "US Eastern Standard Time",
5327 "abbr": "UEDT",
5328 "offset": -4,
5329 "isdst": true,
5330 "text": "(UTC-05:00) Indiana (East)",
5331 "utc": [
5332 "America/Indiana/Marengo",
5333 "America/Indiana/Vevay",
5334 "America/Indianapolis"
5335 ]
5336 },
5337 {
5338 "name": "Venezuela Standard Time",
5339 "abbr": "VST",
5340 "offset": -4.5,
5341 "isdst": false,
5342 "text": "(UTC-04:30) Caracas",
5343 "utc": [
5344 "America/Caracas"
5345 ]
5346 },
5347 {
5348 "name": "Paraguay Standard Time",
5349 "abbr": "PST",
5350 "offset": -4,
5351 "isdst": false,
5352 "text": "(UTC-04:00) Asuncion",
5353 "utc": [
5354 "America/Asuncion"
5355 ]
5356 },
5357 {
5358 "name": "Atlantic Standard Time",
5359 "abbr": "ADT",
5360 "offset": -3,
5361 "isdst": true,
5362 "text": "(UTC-04:00) Atlantic Time (Canada)",
5363 "utc": [
5364 "America/Glace_Bay",
5365 "America/Goose_Bay",
5366 "America/Halifax",
5367 "America/Moncton",
5368 "America/Thule",
5369 "Atlantic/Bermuda"
5370 ]
5371 },
5372 {
5373 "name": "Central Brazilian Standard Time",
5374 "abbr": "CBST",
5375 "offset": -4,
5376 "isdst": false,
5377 "text": "(UTC-04:00) Cuiaba",
5378 "utc": [
5379 "America/Campo_Grande",
5380 "America/Cuiaba"
5381 ]
5382 },
5383 {
5384 "name": "SA Western Standard Time",
5385 "abbr": "SWST",
5386 "offset": -4,
5387 "isdst": false,
5388 "text": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
5389 "utc": [
5390 "America/Anguilla",
5391 "America/Antigua",
5392 "America/Aruba",
5393 "America/Barbados",
5394 "America/Blanc-Sablon",
5395 "America/Boa_Vista",
5396 "America/Curacao",
5397 "America/Dominica",
5398 "America/Grand_Turk",
5399 "America/Grenada",
5400 "America/Guadeloupe",
5401 "America/Guyana",
5402 "America/Kralendijk",
5403 "America/La_Paz",
5404 "America/Lower_Princes",
5405 "America/Manaus",
5406 "America/Marigot",
5407 "America/Martinique",
5408 "America/Montserrat",
5409 "America/Port_of_Spain",
5410 "America/Porto_Velho",
5411 "America/Puerto_Rico",
5412 "America/Santo_Domingo",
5413 "America/St_Barthelemy",
5414 "America/St_Kitts",
5415 "America/St_Lucia",
5416 "America/St_Thomas",
5417 "America/St_Vincent",
5418 "America/Tortola",
5419 "Etc/GMT+4"
5420 ]
5421 },
5422 {
5423 "name": "Pacific SA Standard Time",
5424 "abbr": "PSST",
5425 "offset": -4,
5426 "isdst": false,
5427 "text": "(UTC-04:00) Santiago",
5428 "utc": [
5429 "America/Santiago",
5430 "Antarctica/Palmer"
5431 ]
5432 },
5433 {
5434 "name": "Newfoundland Standard Time",
5435 "abbr": "NDT",
5436 "offset": -2.5,
5437 "isdst": true,
5438 "text": "(UTC-03:30) Newfoundland",
5439 "utc": [
5440 "America/St_Johns"
5441 ]
5442 },
5443 {
5444 "name": "E. South America Standard Time",
5445 "abbr": "ESAST",
5446 "offset": -3,
5447 "isdst": false,
5448 "text": "(UTC-03:00) Brasilia",
5449 "utc": [
5450 "America/Sao_Paulo"
5451 ]
5452 },
5453 {
5454 "name": "Argentina Standard Time",
5455 "abbr": "AST",
5456 "offset": -3,
5457 "isdst": false,
5458 "text": "(UTC-03:00) Buenos Aires",
5459 "utc": [
5460 "America/Argentina/La_Rioja",
5461 "America/Argentina/Rio_Gallegos",
5462 "America/Argentina/Salta",
5463 "America/Argentina/San_Juan",
5464 "America/Argentina/San_Luis",
5465 "America/Argentina/Tucuman",
5466 "America/Argentina/Ushuaia",
5467 "America/Buenos_Aires",
5468 "America/Catamarca",
5469 "America/Cordoba",
5470 "America/Jujuy",
5471 "America/Mendoza"
5472 ]
5473 },
5474 {
5475 "name": "SA Eastern Standard Time",
5476 "abbr": "SEST",
5477 "offset": -3,
5478 "isdst": false,
5479 "text": "(UTC-03:00) Cayenne, Fortaleza",
5480 "utc": [
5481 "America/Araguaina",
5482 "America/Belem",
5483 "America/Cayenne",
5484 "America/Fortaleza",
5485 "America/Maceio",
5486 "America/Paramaribo",
5487 "America/Recife",
5488 "America/Santarem",
5489 "Antarctica/Rothera",
5490 "Atlantic/Stanley",
5491 "Etc/GMT+3"
5492 ]
5493 },
5494 {
5495 "name": "Greenland Standard Time",
5496 "abbr": "GDT",
5497 "offset": -2,
5498 "isdst": true,
5499 "text": "(UTC-03:00) Greenland",
5500 "utc": [
5501 "America/Godthab"
5502 ]
5503 },
5504 {
5505 "name": "Montevideo Standard Time",
5506 "abbr": "MST",
5507 "offset": -3,
5508 "isdst": false,
5509 "text": "(UTC-03:00) Montevideo",
5510 "utc": [
5511 "America/Montevideo"
5512 ]
5513 },
5514 {
5515 "name": "Bahia Standard Time",
5516 "abbr": "BST",
5517 "offset": -3,
5518 "isdst": false,
5519 "text": "(UTC-03:00) Salvador",
5520 "utc": [
5521 "America/Bahia"
5522 ]
5523 },
5524 {
5525 "name": "UTC-02",
5526 "abbr": "U",
5527 "offset": -2,
5528 "isdst": false,
5529 "text": "(UTC-02:00) Coordinated Universal Time-02",
5530 "utc": [
5531 "America/Noronha",
5532 "Atlantic/South_Georgia",
5533 "Etc/GMT+2"
5534 ]
5535 },
5536 {
5537 "name": "Mid-Atlantic Standard Time",
5538 "abbr": "MDT",
5539 "offset": -1,
5540 "isdst": true,
5541 "text": "(UTC-02:00) Mid-Atlantic - Old"
5542 },
5543 {
5544 "name": "Azores Standard Time",
5545 "abbr": "ADT",
5546 "offset": 0,
5547 "isdst": true,
5548 "text": "(UTC-01:00) Azores",
5549 "utc": [
5550 "America/Scoresbysund",
5551 "Atlantic/Azores"
5552 ]
5553 },
5554 {
5555 "name": "Cape Verde Standard Time",
5556 "abbr": "CVST",
5557 "offset": -1,
5558 "isdst": false,
5559 "text": "(UTC-01:00) Cape Verde Is.",
5560 "utc": [
5561 "Atlantic/Cape_Verde",
5562 "Etc/GMT+1"
5563 ]
5564 },
5565 {
5566 "name": "Morocco Standard Time",
5567 "abbr": "MDT",
5568 "offset": 1,
5569 "isdst": true,
5570 "text": "(UTC) Casablanca",
5571 "utc": [
5572 "Africa/Casablanca",
5573 "Africa/El_Aaiun"
5574 ]
5575 },
5576 {
5577 "name": "UTC",
5578 "abbr": "CUT",
5579 "offset": 0,
5580 "isdst": false,
5581 "text": "(UTC) Coordinated Universal Time",
5582 "utc": [
5583 "America/Danmarkshavn",
5584 "Etc/GMT"
5585 ]
5586 },
5587 {
5588 "name": "GMT Standard Time",
5589 "abbr": "GDT",
5590 "offset": 1,
5591 "isdst": true,
5592 "text": "(UTC) Dublin, Edinburgh, Lisbon, London",
5593 "utc": [
5594 "Atlantic/Canary",
5595 "Atlantic/Faeroe",
5596 "Atlantic/Madeira",
5597 "Europe/Dublin",
5598 "Europe/Guernsey",
5599 "Europe/Isle_of_Man",
5600 "Europe/Jersey",
5601 "Europe/Lisbon",
5602 "Europe/London"
5603 ]
5604 },
5605 {
5606 "name": "Greenwich Standard Time",
5607 "abbr": "GST",
5608 "offset": 0,
5609 "isdst": false,
5610 "text": "(UTC) Monrovia, Reykjavik",
5611 "utc": [
5612 "Africa/Abidjan",
5613 "Africa/Accra",
5614 "Africa/Bamako",
5615 "Africa/Banjul",
5616 "Africa/Bissau",
5617 "Africa/Conakry",
5618 "Africa/Dakar",
5619 "Africa/Freetown",
5620 "Africa/Lome",
5621 "Africa/Monrovia",
5622 "Africa/Nouakchott",
5623 "Africa/Ouagadougou",
5624 "Africa/Sao_Tome",
5625 "Atlantic/Reykjavik",
5626 "Atlantic/St_Helena"
5627 ]
5628 },
5629 {
5630 "name": "W. Europe Standard Time",
5631 "abbr": "WEDT",
5632 "offset": 2,
5633 "isdst": true,
5634 "text": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
5635 "utc": [
5636 "Arctic/Longyearbyen",
5637 "Europe/Amsterdam",
5638 "Europe/Andorra",
5639 "Europe/Berlin",
5640 "Europe/Busingen",
5641 "Europe/Gibraltar",
5642 "Europe/Luxembourg",
5643 "Europe/Malta",
5644 "Europe/Monaco",
5645 "Europe/Oslo",
5646 "Europe/Rome",
5647 "Europe/San_Marino",
5648 "Europe/Stockholm",
5649 "Europe/Vaduz",
5650 "Europe/Vatican",
5651 "Europe/Vienna",
5652 "Europe/Zurich"
5653 ]
5654 },
5655 {
5656 "name": "Central Europe Standard Time",
5657 "abbr": "CEDT",
5658 "offset": 2,
5659 "isdst": true,
5660 "text": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
5661 "utc": [
5662 "Europe/Belgrade",
5663 "Europe/Bratislava",
5664 "Europe/Budapest",
5665 "Europe/Ljubljana",
5666 "Europe/Podgorica",
5667 "Europe/Prague",
5668 "Europe/Tirane"
5669 ]
5670 },
5671 {
5672 "name": "Romance Standard Time",
5673 "abbr": "RDT",
5674 "offset": 2,
5675 "isdst": true,
5676 "text": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
5677 "utc": [
5678 "Africa/Ceuta",
5679 "Europe/Brussels",
5680 "Europe/Copenhagen",
5681 "Europe/Madrid",
5682 "Europe/Paris"
5683 ]
5684 },
5685 {
5686 "name": "Central European Standard Time",
5687 "abbr": "CEDT",
5688 "offset": 2,
5689 "isdst": true,
5690 "text": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
5691 "utc": [
5692 "Europe/Sarajevo",
5693 "Europe/Skopje",
5694 "Europe/Warsaw",
5695 "Europe/Zagreb"
5696 ]
5697 },
5698 {
5699 "name": "W. Central Africa Standard Time",
5700 "abbr": "WCAST",
5701 "offset": 1,
5702 "isdst": false,
5703 "text": "(UTC+01:00) West Central Africa",
5704 "utc": [
5705 "Africa/Algiers",
5706 "Africa/Bangui",
5707 "Africa/Brazzaville",
5708 "Africa/Douala",
5709 "Africa/Kinshasa",
5710 "Africa/Lagos",
5711 "Africa/Libreville",
5712 "Africa/Luanda",
5713 "Africa/Malabo",
5714 "Africa/Ndjamena",
5715 "Africa/Niamey",
5716 "Africa/Porto-Novo",
5717 "Africa/Tunis",
5718 "Etc/GMT-1"
5719 ]
5720 },
5721 {
5722 "name": "Namibia Standard Time",
5723 "abbr": "NST",
5724 "offset": 1,
5725 "isdst": false,
5726 "text": "(UTC+01:00) Windhoek",
5727 "utc": [
5728 "Africa/Windhoek"
5729 ]
5730 },
5731 {
5732 "name": "GTB Standard Time",
5733 "abbr": "GDT",
5734 "offset": 3,
5735 "isdst": true,
5736 "text": "(UTC+02:00) Athens, Bucharest",
5737 "utc": [
5738 "Asia/Nicosia",
5739 "Europe/Athens",
5740 "Europe/Bucharest",
5741 "Europe/Chisinau"
5742 ]
5743 },
5744 {
5745 "name": "Middle East Standard Time",
5746 "abbr": "MEDT",
5747 "offset": 3,
5748 "isdst": true,
5749 "text": "(UTC+02:00) Beirut",
5750 "utc": [
5751 "Asia/Beirut"
5752 ]
5753 },
5754 {
5755 "name": "Egypt Standard Time",
5756 "abbr": "EST",
5757 "offset": 2,
5758 "isdst": false,
5759 "text": "(UTC+02:00) Cairo",
5760 "utc": [
5761 "Africa/Cairo"
5762 ]
5763 },
5764 {
5765 "name": "Syria Standard Time",
5766 "abbr": "SDT",
5767 "offset": 3,
5768 "isdst": true,
5769 "text": "(UTC+02:00) Damascus",
5770 "utc": [
5771 "Asia/Damascus"
5772 ]
5773 },
5774 {
5775 "name": "E. Europe Standard Time",
5776 "abbr": "EEDT",
5777 "offset": 3,
5778 "isdst": true,
5779 "text": "(UTC+02:00) E. Europe"
5780 },
5781 {
5782 "name": "South Africa Standard Time",
5783 "abbr": "SAST",
5784 "offset": 2,
5785 "isdst": false,
5786 "text": "(UTC+02:00) Harare, Pretoria",
5787 "utc": [
5788 "Africa/Blantyre",
5789 "Africa/Bujumbura",
5790 "Africa/Gaborone",
5791 "Africa/Harare",
5792 "Africa/Johannesburg",
5793 "Africa/Kigali",
5794 "Africa/Lubumbashi",
5795 "Africa/Lusaka",
5796 "Africa/Maputo",
5797 "Africa/Maseru",
5798 "Africa/Mbabane",
5799 "Etc/GMT-2"
5800 ]
5801 },
5802 {
5803 "name": "FLE Standard Time",
5804 "abbr": "FDT",
5805 "offset": 3,
5806 "isdst": true,
5807 "text": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
5808 "utc": [
5809 "Europe/Helsinki",
5810 "Europe/Kiev",
5811 "Europe/Mariehamn",
5812 "Europe/Riga",
5813 "Europe/Sofia",
5814 "Europe/Tallinn",
5815 "Europe/Uzhgorod",
5816 "Europe/Vilnius",
5817 "Europe/Zaporozhye"
5818 ]
5819 },
5820 {
5821 "name": "Turkey Standard Time",
5822 "abbr": "TDT",
5823 "offset": 3,
5824 "isdst": true,
5825 "text": "(UTC+02:00) Istanbul",
5826 "utc": [
5827 "Europe/Istanbul"
5828 ]
5829 },
5830 {
5831 "name": "Israel Standard Time",
5832 "abbr": "JDT",
5833 "offset": 3,
5834 "isdst": true,
5835 "text": "(UTC+02:00) Jerusalem",
5836 "utc": [
5837 "Asia/Jerusalem"
5838 ]
5839 },
5840 {
5841 "name": "Libya Standard Time",
5842 "abbr": "LST",
5843 "offset": 2,
5844 "isdst": false,
5845 "text": "(UTC+02:00) Tripoli",
5846 "utc": [
5847 "Africa/Tripoli"
5848 ]
5849 },
5850 {
5851 "name": "Jordan Standard Time",
5852 "abbr": "JST",
5853 "offset": 3,
5854 "isdst": false,
5855 "text": "(UTC+03:00) Amman",
5856 "utc": [
5857 "Asia/Amman"
5858 ]
5859 },
5860 {
5861 "name": "Arabic Standard Time",
5862 "abbr": "AST",
5863 "offset": 3,
5864 "isdst": false,
5865 "text": "(UTC+03:00) Baghdad",
5866 "utc": [
5867 "Asia/Baghdad"
5868 ]
5869 },
5870 {
5871 "name": "Kaliningrad Standard Time",
5872 "abbr": "KST",
5873 "offset": 3,
5874 "isdst": false,
5875 "text": "(UTC+03:00) Kaliningrad, Minsk",
5876 "utc": [
5877 "Europe/Kaliningrad",
5878 "Europe/Minsk"
5879 ]
5880 },
5881 {
5882 "name": "Arab Standard Time",
5883 "abbr": "AST",
5884 "offset": 3,
5885 "isdst": false,
5886 "text": "(UTC+03:00) Kuwait, Riyadh",
5887 "utc": [
5888 "Asia/Aden",
5889 "Asia/Bahrain",
5890 "Asia/Kuwait",
5891 "Asia/Qatar",
5892 "Asia/Riyadh"
5893 ]
5894 },
5895 {
5896 "name": "E. Africa Standard Time",
5897 "abbr": "EAST",
5898 "offset": 3,
5899 "isdst": false,
5900 "text": "(UTC+03:00) Nairobi",
5901 "utc": [
5902 "Africa/Addis_Ababa",
5903 "Africa/Asmera",
5904 "Africa/Dar_es_Salaam",
5905 "Africa/Djibouti",
5906 "Africa/Juba",
5907 "Africa/Kampala",
5908 "Africa/Khartoum",
5909 "Africa/Mogadishu",
5910 "Africa/Nairobi",
5911 "Antarctica/Syowa",
5912 "Etc/GMT-3",
5913 "Indian/Antananarivo",
5914 "Indian/Comoro",
5915 "Indian/Mayotte"
5916 ]
5917 },
5918 {
5919 "name": "Iran Standard Time",
5920 "abbr": "IDT",
5921 "offset": 4.5,
5922 "isdst": true,
5923 "text": "(UTC+03:30) Tehran",
5924 "utc": [
5925 "Asia/Tehran"
5926 ]
5927 },
5928 {
5929 "name": "Arabian Standard Time",
5930 "abbr": "AST",
5931 "offset": 4,
5932 "isdst": false,
5933 "text": "(UTC+04:00) Abu Dhabi, Muscat",
5934 "utc": [
5935 "Asia/Dubai",
5936 "Asia/Muscat",
5937 "Etc/GMT-4"
5938 ]
5939 },
5940 {
5941 "name": "Azerbaijan Standard Time",
5942 "abbr": "ADT",
5943 "offset": 5,
5944 "isdst": true,
5945 "text": "(UTC+04:00) Baku",
5946 "utc": [
5947 "Asia/Baku"
5948 ]
5949 },
5950 {
5951 "name": "Russian Standard Time",
5952 "abbr": "RST",
5953 "offset": 4,
5954 "isdst": false,
5955 "text": "(UTC+04:00) Moscow, St. Petersburg, Volgograd",
5956 "utc": [
5957 "Europe/Moscow",
5958 "Europe/Samara",
5959 "Europe/Simferopol",
5960 "Europe/Volgograd"
5961 ]
5962 },
5963 {
5964 "name": "Mauritius Standard Time",
5965 "abbr": "MST",
5966 "offset": 4,
5967 "isdst": false,
5968 "text": "(UTC+04:00) Port Louis",
5969 "utc": [
5970 "Indian/Mahe",
5971 "Indian/Mauritius",
5972 "Indian/Reunion"
5973 ]
5974 },
5975 {
5976 "name": "Georgian Standard Time",
5977 "abbr": "GST",
5978 "offset": 4,
5979 "isdst": false,
5980 "text": "(UTC+04:00) Tbilisi",
5981 "utc": [
5982 "Asia/Tbilisi"
5983 ]
5984 },
5985 {
5986 "name": "Caucasus Standard Time",
5987 "abbr": "CST",
5988 "offset": 4,
5989 "isdst": false,
5990 "text": "(UTC+04:00) Yerevan",
5991 "utc": [
5992 "Asia/Yerevan"
5993 ]
5994 },
5995 {
5996 "name": "Afghanistan Standard Time",
5997 "abbr": "AST",
5998 "offset": 4.5,
5999 "isdst": false,
6000 "text": "(UTC+04:30) Kabul",
6001 "utc": [
6002 "Asia/Kabul"
6003 ]
6004 },
6005 {
6006 "name": "West Asia Standard Time",
6007 "abbr": "WAST",
6008 "offset": 5,
6009 "isdst": false,
6010 "text": "(UTC+05:00) Ashgabat, Tashkent",
6011 "utc": [
6012 "Antarctica/Mawson",
6013 "Asia/Aqtau",
6014 "Asia/Aqtobe",
6015 "Asia/Ashgabat",
6016 "Asia/Dushanbe",
6017 "Asia/Oral",
6018 "Asia/Samarkand",
6019 "Asia/Tashkent",
6020 "Etc/GMT-5",
6021 "Indian/Kerguelen",
6022 "Indian/Maldives"
6023 ]
6024 },
6025 {
6026 "name": "Pakistan Standard Time",
6027 "abbr": "PST",
6028 "offset": 5,
6029 "isdst": false,
6030 "text": "(UTC+05:00) Islamabad, Karachi",
6031 "utc": [
6032 "Asia/Karachi"
6033 ]
6034 },
6035 {
6036 "name": "India Standard Time",
6037 "abbr": "IST",
6038 "offset": 5.5,
6039 "isdst": false,
6040 "text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
6041 "utc": [
6042 "Asia/Calcutta"
6043 ]
6044 },
6045 {
6046 "name": "Sri Lanka Standard Time",
6047 "abbr": "SLST",
6048 "offset": 5.5,
6049 "isdst": false,
6050 "text": "(UTC+05:30) Sri Jayawardenepura",
6051 "utc": [
6052 "Asia/Colombo"
6053 ]
6054 },
6055 {
6056 "name": "Nepal Standard Time",
6057 "abbr": "NST",
6058 "offset": 5.75,
6059 "isdst": false,
6060 "text": "(UTC+05:45) Kathmandu",
6061 "utc": [
6062 "Asia/Katmandu"
6063 ]
6064 },
6065 {
6066 "name": "Central Asia Standard Time",
6067 "abbr": "CAST",
6068 "offset": 6,
6069 "isdst": false,
6070 "text": "(UTC+06:00) Astana",
6071 "utc": [
6072 "Antarctica/Vostok",
6073 "Asia/Almaty",
6074 "Asia/Bishkek",
6075 "Asia/Qyzylorda",
6076 "Asia/Urumqi",
6077 "Etc/GMT-6",
6078 "Indian/Chagos"
6079 ]
6080 },
6081 {
6082 "name": "Bangladesh Standard Time",
6083 "abbr": "BST",
6084 "offset": 6,
6085 "isdst": false,
6086 "text": "(UTC+06:00) Dhaka",
6087 "utc": [
6088 "Asia/Dhaka",
6089 "Asia/Thimphu"
6090 ]
6091 },
6092 {
6093 "name": "Ekaterinburg Standard Time",
6094 "abbr": "EST",
6095 "offset": 6,
6096 "isdst": false,
6097 "text": "(UTC+06:00) Ekaterinburg",
6098 "utc": [
6099 "Asia/Yekaterinburg"
6100 ]
6101 },
6102 {
6103 "name": "Myanmar Standard Time",
6104 "abbr": "MST",
6105 "offset": 6.5,
6106 "isdst": false,
6107 "text": "(UTC+06:30) Yangon (Rangoon)",
6108 "utc": [
6109 "Asia/Rangoon",
6110 "Indian/Cocos"
6111 ]
6112 },
6113 {
6114 "name": "SE Asia Standard Time",
6115 "abbr": "SAST",
6116 "offset": 7,
6117 "isdst": false,
6118 "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
6119 "utc": [
6120 "Antarctica/Davis",
6121 "Asia/Bangkok",
6122 "Asia/Hovd",
6123 "Asia/Jakarta",
6124 "Asia/Phnom_Penh",
6125 "Asia/Pontianak",
6126 "Asia/Saigon",
6127 "Asia/Vientiane",
6128 "Etc/GMT-7",
6129 "Indian/Christmas"
6130 ]
6131 },
6132 {
6133 "name": "N. Central Asia Standard Time",
6134 "abbr": "NCAST",
6135 "offset": 7,
6136 "isdst": false,
6137 "text": "(UTC+07:00) Novosibirsk",
6138 "utc": [
6139 "Asia/Novokuznetsk",
6140 "Asia/Novosibirsk",
6141 "Asia/Omsk"
6142 ]
6143 },
6144 {
6145 "name": "China Standard Time",
6146 "abbr": "CST",
6147 "offset": 8,
6148 "isdst": false,
6149 "text": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
6150 "utc": [
6151 "Asia/Hong_Kong",
6152 "Asia/Macau",
6153 "Asia/Shanghai"
6154 ]
6155 },
6156 {
6157 "name": "North Asia Standard Time",
6158 "abbr": "NAST",
6159 "offset": 8,
6160 "isdst": false,
6161 "text": "(UTC+08:00) Krasnoyarsk",
6162 "utc": [
6163 "Asia/Krasnoyarsk"
6164 ]
6165 },
6166 {
6167 "name": "Singapore Standard Time",
6168 "abbr": "MPST",
6169 "offset": 8,
6170 "isdst": false,
6171 "text": "(UTC+08:00) Kuala Lumpur, Singapore",
6172 "utc": [
6173 "Asia/Brunei",
6174 "Asia/Kuala_Lumpur",
6175 "Asia/Kuching",
6176 "Asia/Makassar",
6177 "Asia/Manila",
6178 "Asia/Singapore",
6179 "Etc/GMT-8"
6180 ]
6181 },
6182 {
6183 "name": "W. Australia Standard Time",
6184 "abbr": "WAST",
6185 "offset": 8,
6186 "isdst": false,
6187 "text": "(UTC+08:00) Perth",
6188 "utc": [
6189 "Antarctica/Casey",
6190 "Australia/Perth"
6191 ]
6192 },
6193 {
6194 "name": "Taipei Standard Time",
6195 "abbr": "TST",
6196 "offset": 8,
6197 "isdst": false,
6198 "text": "(UTC+08:00) Taipei",
6199 "utc": [
6200 "Asia/Taipei"
6201 ]
6202 },
6203 {
6204 "name": "Ulaanbaatar Standard Time",
6205 "abbr": "UST",
6206 "offset": 8,
6207 "isdst": false,
6208 "text": "(UTC+08:00) Ulaanbaatar",
6209 "utc": [
6210 "Asia/Choibalsan",
6211 "Asia/Ulaanbaatar"
6212 ]
6213 },
6214 {
6215 "name": "North Asia East Standard Time",
6216 "abbr": "NAEST",
6217 "offset": 9,
6218 "isdst": false,
6219 "text": "(UTC+09:00) Irkutsk",
6220 "utc": [
6221 "Asia/Irkutsk"
6222 ]
6223 },
6224 {
6225 "name": "Tokyo Standard Time",
6226 "abbr": "TST",
6227 "offset": 9,
6228 "isdst": false,
6229 "text": "(UTC+09:00) Osaka, Sapporo, Tokyo",
6230 "utc": [
6231 "Asia/Dili",
6232 "Asia/Jayapura",
6233 "Asia/Tokyo",
6234 "Etc/GMT-9",
6235 "Pacific/Palau"
6236 ]
6237 },
6238 {
6239 "name": "Korea Standard Time",
6240 "abbr": "KST",
6241 "offset": 9,
6242 "isdst": false,
6243 "text": "(UTC+09:00) Seoul",
6244 "utc": [
6245 "Asia/Pyongyang",
6246 "Asia/Seoul"
6247 ]
6248 },
6249 {
6250 "name": "Cen. Australia Standard Time",
6251 "abbr": "CAST",
6252 "offset": 9.5,
6253 "isdst": false,
6254 "text": "(UTC+09:30) Adelaide",
6255 "utc": [
6256 "Australia/Adelaide",
6257 "Australia/Broken_Hill"
6258 ]
6259 },
6260 {
6261 "name": "AUS Central Standard Time",
6262 "abbr": "ACST",
6263 "offset": 9.5,
6264 "isdst": false,
6265 "text": "(UTC+09:30) Darwin",
6266 "utc": [
6267 "Australia/Darwin"
6268 ]
6269 },
6270 {
6271 "name": "E. Australia Standard Time",
6272 "abbr": "EAST",
6273 "offset": 10,
6274 "isdst": false,
6275 "text": "(UTC+10:00) Brisbane",
6276 "utc": [
6277 "Australia/Brisbane",
6278 "Australia/Lindeman"
6279 ]
6280 },
6281 {
6282 "name": "AUS Eastern Standard Time",
6283 "abbr": "AEST",
6284 "offset": 10,
6285 "isdst": false,
6286 "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
6287 "utc": [
6288 "Australia/Melbourne",
6289 "Australia/Sydney"
6290 ]
6291 },
6292 {
6293 "name": "West Pacific Standard Time",
6294 "abbr": "WPST",
6295 "offset": 10,
6296 "isdst": false,
6297 "text": "(UTC+10:00) Guam, Port Moresby",
6298 "utc": [
6299 "Antarctica/DumontDUrville",
6300 "Etc/GMT-10",
6301 "Pacific/Guam",
6302 "Pacific/Port_Moresby",
6303 "Pacific/Saipan",
6304 "Pacific/Truk"
6305 ]
6306 },
6307 {
6308 "name": "Tasmania Standard Time",
6309 "abbr": "TST",
6310 "offset": 10,
6311 "isdst": false,
6312 "text": "(UTC+10:00) Hobart",
6313 "utc": [
6314 "Australia/Currie",
6315 "Australia/Hobart"
6316 ]
6317 },
6318 {
6319 "name": "Yakutsk Standard Time",
6320 "abbr": "YST",
6321 "offset": 10,
6322 "isdst": false,
6323 "text": "(UTC+10:00) Yakutsk",
6324 "utc": [
6325 "Asia/Chita",
6326 "Asia/Khandyga",
6327 "Asia/Yakutsk"
6328 ]
6329 },
6330 {
6331 "name": "Central Pacific Standard Time",
6332 "abbr": "CPST",
6333 "offset": 11,
6334 "isdst": false,
6335 "text": "(UTC+11:00) Solomon Is., New Caledonia",
6336 "utc": [
6337 "Antarctica/Macquarie",
6338 "Etc/GMT-11",
6339 "Pacific/Efate",
6340 "Pacific/Guadalcanal",
6341 "Pacific/Kosrae",
6342 "Pacific/Noumea",
6343 "Pacific/Ponape"
6344 ]
6345 },
6346 {
6347 "name": "Vladivostok Standard Time",
6348 "abbr": "VST",
6349 "offset": 11,
6350 "isdst": false,
6351 "text": "(UTC+11:00) Vladivostok",
6352 "utc": [
6353 "Asia/Sakhalin",
6354 "Asia/Ust-Nera",
6355 "Asia/Vladivostok"
6356 ]
6357 },
6358 {
6359 "name": "New Zealand Standard Time",
6360 "abbr": "NZST",
6361 "offset": 12,
6362 "isdst": false,
6363 "text": "(UTC+12:00) Auckland, Wellington",
6364 "utc": [
6365 "Antarctica/McMurdo",
6366 "Pacific/Auckland"
6367 ]
6368 },
6369 {
6370 "name": "UTC+12",
6371 "abbr": "U",
6372 "offset": 12,
6373 "isdst": false,
6374 "text": "(UTC+12:00) Coordinated Universal Time+12",
6375 "utc": [
6376 "Etc/GMT-12",
6377 "Pacific/Funafuti",
6378 "Pacific/Kwajalein",
6379 "Pacific/Majuro",
6380 "Pacific/Nauru",
6381 "Pacific/Tarawa",
6382 "Pacific/Wake",
6383 "Pacific/Wallis"
6384 ]
6385 },
6386 {
6387 "name": "Fiji Standard Time",
6388 "abbr": "FST",
6389 "offset": 12,
6390 "isdst": false,
6391 "text": "(UTC+12:00) Fiji",
6392 "utc": [
6393 "Pacific/Fiji"
6394 ]
6395 },
6396 {
6397 "name": "Magadan Standard Time",
6398 "abbr": "MST",
6399 "offset": 12,
6400 "isdst": false,
6401 "text": "(UTC+12:00) Magadan",
6402 "utc": [
6403 "Asia/Anadyr",
6404 "Asia/Kamchatka",
6405 "Asia/Magadan",
6406 "Asia/Srednekolymsk"
6407 ]
6408 },
6409 {
6410 "name": "Kamchatka Standard Time",
6411 "abbr": "KDT",
6412 "offset": 13,
6413 "isdst": true,
6414 "text": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
6415 },
6416 {
6417 "name": "Tonga Standard Time",
6418 "abbr": "TST",
6419 "offset": 13,
6420 "isdst": false,
6421 "text": "(UTC+13:00) Nuku'alofa",
6422 "utc": [
6423 "Etc/GMT-13",
6424 "Pacific/Enderbury",
6425 "Pacific/Fakaofo",
6426 "Pacific/Tongatapu"
6427 ]
6428 },
6429 {
6430 "name": "Samoa Standard Time",
6431 "abbr": "SST",
6432 "offset": 13,
6433 "isdst": false,
6434 "text": "(UTC+13:00) Samoa",
6435 "utc": [
6436 "Pacific/Apia"
6437 ]
6438 }
6439 ],
6440 //List source: http://answers.google.com/answers/threadview/id/589312.html
6441 profession: [
6442 "Airline Pilot",
6443 "Academic Team",
6444 "Accountant",
6445 "Account Executive",
6446 "Actor",
6447 "Actuary",
6448 "Acquisition Analyst",
6449 "Administrative Asst.",
6450 "Administrative Analyst",
6451 "Administrator",
6452 "Advertising Director",
6453 "Aerospace Engineer",
6454 "Agent",
6455 "Agricultural Inspector",
6456 "Agricultural Scientist",
6457 "Air Traffic Controller",
6458 "Animal Trainer",
6459 "Anthropologist",
6460 "Appraiser",
6461 "Architect",
6462 "Art Director",
6463 "Artist",
6464 "Astronomer",
6465 "Athletic Coach",
6466 "Auditor",
6467 "Author",
6468 "Baker",
6469 "Banker",
6470 "Bankruptcy Attorney",
6471 "Benefits Manager",
6472 "Biologist",
6473 "Bio-feedback Specialist",
6474 "Biomedical Engineer",
6475 "Biotechnical Researcher",
6476 "Broadcaster",
6477 "Broker",
6478 "Building Manager",
6479 "Building Contractor",
6480 "Building Inspector",
6481 "Business Analyst",
6482 "Business Planner",
6483 "Business Manager",
6484 "Buyer",
6485 "Call Center Manager",
6486 "Career Counselor",
6487 "Cash Manager",
6488 "Ceramic Engineer",
6489 "Chief Executive Officer",
6490 "Chief Operation Officer",
6491 "Chef",
6492 "Chemical Engineer",
6493 "Chemist",
6494 "Child Care Manager",
6495 "Chief Medical Officer",
6496 "Chiropractor",
6497 "Cinematographer",
6498 "City Housing Manager",
6499 "City Manager",
6500 "Civil Engineer",
6501 "Claims Manager",
6502 "Clinical Research Assistant",
6503 "Collections Manager.",
6504 "Compliance Manager",
6505 "Comptroller",
6506 "Computer Manager",
6507 "Commercial Artist",
6508 "Communications Affairs Director",
6509 "Communications Director",
6510 "Communications Engineer",
6511 "Compensation Analyst",
6512 "Computer Programmer",
6513 "Computer Ops. Manager",
6514 "Computer Engineer",
6515 "Computer Operator",
6516 "Computer Graphics Specialist",
6517 "Construction Engineer",
6518 "Construction Manager",
6519 "Consultant",
6520 "Consumer Relations Manager",
6521 "Contract Administrator",
6522 "Copyright Attorney",
6523 "Copywriter",
6524 "Corporate Planner",
6525 "Corrections Officer",
6526 "Cosmetologist",
6527 "Credit Analyst",
6528 "Cruise Director",
6529 "Chief Information Officer",
6530 "Chief Technology Officer",
6531 "Customer Service Manager",
6532 "Cryptologist",
6533 "Dancer",
6534 "Data Security Manager",
6535 "Database Manager",
6536 "Day Care Instructor",
6537 "Dentist",
6538 "Designer",
6539 "Design Engineer",
6540 "Desktop Publisher",
6541 "Developer",
6542 "Development Officer",
6543 "Diamond Merchant",
6544 "Dietitian",
6545 "Direct Marketer",
6546 "Director",
6547 "Distribution Manager",
6548 "Diversity Manager",
6549 "Economist",
6550 "EEO Compliance Manager",
6551 "Editor",
6552 "Education Adminator",
6553 "Electrical Engineer",
6554 "Electro Optical Engineer",
6555 "Electronics Engineer",
6556 "Embassy Management",
6557 "Employment Agent",
6558 "Engineer Technician",
6559 "Entrepreneur",
6560 "Environmental Analyst",
6561 "Environmental Attorney",
6562 "Environmental Engineer",
6563 "Environmental Specialist",
6564 "Escrow Officer",
6565 "Estimator",
6566 "Executive Assistant",
6567 "Executive Director",
6568 "Executive Recruiter",
6569 "Facilities Manager",
6570 "Family Counselor",
6571 "Fashion Events Manager",
6572 "Fashion Merchandiser",
6573 "Fast Food Manager",
6574 "Film Producer",
6575 "Film Production Assistant",
6576 "Financial Analyst",
6577 "Financial Planner",
6578 "Financier",
6579 "Fine Artist",
6580 "Wildlife Specialist",
6581 "Fitness Consultant",
6582 "Flight Attendant",
6583 "Flight Engineer",
6584 "Floral Designer",
6585 "Food & Beverage Director",
6586 "Food Service Manager",
6587 "Forestry Technician",
6588 "Franchise Management",
6589 "Franchise Sales",
6590 "Fraud Investigator",
6591 "Freelance Writer",
6592 "Fund Raiser",
6593 "General Manager",
6594 "Geologist",
6595 "General Counsel",
6596 "Geriatric Specialist",
6597 "Gerontologist",
6598 "Glamour Photographer",
6599 "Golf Club Manager",
6600 "Gourmet Chef",
6601 "Graphic Designer",
6602 "Grounds Keeper",
6603 "Hazardous Waste Manager",
6604 "Health Care Manager",
6605 "Health Therapist",
6606 "Health Service Administrator",
6607 "Hearing Officer",
6608 "Home Economist",
6609 "Horticulturist",
6610 "Hospital Administrator",
6611 "Hotel Manager",
6612 "Human Resources Manager",
6613 "Importer",
6614 "Industrial Designer",
6615 "Industrial Engineer",
6616 "Information Director",
6617 "Inside Sales",
6618 "Insurance Adjuster",
6619 "Interior Decorator",
6620 "Internal Controls Director",
6621 "International Acct.",
6622 "International Courier",
6623 "International Lawyer",
6624 "Interpreter",
6625 "Investigator",
6626 "Investment Banker",
6627 "Investment Manager",
6628 "IT Architect",
6629 "IT Project Manager",
6630 "IT Systems Analyst",
6631 "Jeweler",
6632 "Joint Venture Manager",
6633 "Journalist",
6634 "Labor Negotiator",
6635 "Labor Organizer",
6636 "Labor Relations Manager",
6637 "Lab Services Director",
6638 "Lab Technician",
6639 "Land Developer",
6640 "Landscape Architect",
6641 "Law Enforcement Officer",
6642 "Lawyer",
6643 "Lead Software Engineer",
6644 "Lead Software Test Engineer",
6645 "Leasing Manager",
6646 "Legal Secretary",
6647 "Library Manager",
6648 "Litigation Attorney",
6649 "Loan Officer",
6650 "Lobbyist",
6651 "Logistics Manager",
6652 "Maintenance Manager",
6653 "Management Consultant",
6654 "Managed Care Director",
6655 "Managing Partner",
6656 "Manufacturing Director",
6657 "Manpower Planner",
6658 "Marine Biologist",
6659 "Market Res. Analyst",
6660 "Marketing Director",
6661 "Materials Manager",
6662 "Mathematician",
6663 "Membership Chairman",
6664 "Mechanic",
6665 "Mechanical Engineer",
6666 "Media Buyer",
6667 "Medical Investor",
6668 "Medical Secretary",
6669 "Medical Technician",
6670 "Mental Health Counselor",
6671 "Merchandiser",
6672 "Metallurgical Engineering",
6673 "Meteorologist",
6674 "Microbiologist",
6675 "MIS Manager",
6676 "Motion Picture Director",
6677 "Multimedia Director",
6678 "Musician",
6679 "Network Administrator",
6680 "Network Specialist",
6681 "Network Operator",
6682 "New Product Manager",
6683 "Novelist",
6684 "Nuclear Engineer",
6685 "Nuclear Specialist",
6686 "Nutritionist",
6687 "Nursing Administrator",
6688 "Occupational Therapist",
6689 "Oceanographer",
6690 "Office Manager",
6691 "Operations Manager",
6692 "Operations Research Director",
6693 "Optical Technician",
6694 "Optometrist",
6695 "Organizational Development Manager",
6696 "Outplacement Specialist",
6697 "Paralegal",
6698 "Park Ranger",
6699 "Patent Attorney",
6700 "Payroll Specialist",
6701 "Personnel Specialist",
6702 "Petroleum Engineer",
6703 "Pharmacist",
6704 "Photographer",
6705 "Physical Therapist",
6706 "Physician",
6707 "Physician Assistant",
6708 "Physicist",
6709 "Planning Director",
6710 "Podiatrist",
6711 "Political Analyst",
6712 "Political Scientist",
6713 "Politician",
6714 "Portfolio Manager",
6715 "Preschool Management",
6716 "Preschool Teacher",
6717 "Principal",
6718 "Private Banker",
6719 "Private Investigator",
6720 "Probation Officer",
6721 "Process Engineer",
6722 "Producer",
6723 "Product Manager",
6724 "Product Engineer",
6725 "Production Engineer",
6726 "Production Planner",
6727 "Professional Athlete",
6728 "Professional Coach",
6729 "Professor",
6730 "Project Engineer",
6731 "Project Manager",
6732 "Program Manager",
6733 "Property Manager",
6734 "Public Administrator",
6735 "Public Safety Director",
6736 "PR Specialist",
6737 "Publisher",
6738 "Purchasing Agent",
6739 "Publishing Director",
6740 "Quality Assurance Specialist",
6741 "Quality Control Engineer",
6742 "Quality Control Inspector",
6743 "Radiology Manager",
6744 "Railroad Engineer",
6745 "Real Estate Broker",
6746 "Recreational Director",
6747 "Recruiter",
6748 "Redevelopment Specialist",
6749 "Regulatory Affairs Manager",
6750 "Registered Nurse",
6751 "Rehabilitation Counselor",
6752 "Relocation Manager",
6753 "Reporter",
6754 "Research Specialist",
6755 "Restaurant Manager",
6756 "Retail Store Manager",
6757 "Risk Analyst",
6758 "Safety Engineer",
6759 "Sales Engineer",
6760 "Sales Trainer",
6761 "Sales Promotion Manager",
6762 "Sales Representative",
6763 "Sales Manager",
6764 "Service Manager",
6765 "Sanitation Engineer",
6766 "Scientific Programmer",
6767 "Scientific Writer",
6768 "Securities Analyst",
6769 "Security Consultant",
6770 "Security Director",
6771 "Seminar Presenter",
6772 "Ship's Officer",
6773 "Singer",
6774 "Social Director",
6775 "Social Program Planner",
6776 "Social Research",
6777 "Social Scientist",
6778 "Social Worker",
6779 "Sociologist",
6780 "Software Developer",
6781 "Software Engineer",
6782 "Software Test Engineer",
6783 "Soil Scientist",
6784 "Special Events Manager",
6785 "Special Education Teacher",
6786 "Special Projects Director",
6787 "Speech Pathologist",
6788 "Speech Writer",
6789 "Sports Event Manager",
6790 "Statistician",
6791 "Store Manager",
6792 "Strategic Alliance Director",
6793 "Strategic Planning Director",
6794 "Stress Reduction Specialist",
6795 "Stockbroker",
6796 "Surveyor",
6797 "Structural Engineer",
6798 "Superintendent",
6799 "Supply Chain Director",
6800 "System Engineer",
6801 "Systems Analyst",
6802 "Systems Programmer",
6803 "System Administrator",
6804 "Tax Specialist",
6805 "Teacher",
6806 "Technical Support Specialist",
6807 "Technical Illustrator",
6808 "Technical Writer",
6809 "Technology Director",
6810 "Telecom Analyst",
6811 "Telemarketer",
6812 "Theatrical Director",
6813 "Title Examiner",
6814 "Tour Escort",
6815 "Tour Guide Director",
6816 "Traffic Manager",
6817 "Trainer Translator",
6818 "Transportation Manager",
6819 "Travel Agent",
6820 "Treasurer",
6821 "TV Programmer",
6822 "Underwriter",
6823 "Union Representative",
6824 "University Administrator",
6825 "University Dean",
6826 "Urban Planner",
6827 "Veterinarian",
6828 "Vendor Relations Director",
6829 "Viticulturist",
6830 "Warehouse Manager"
6831 ],
6832 animals : {
6833 //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals
6834 "ocean" : ["Acantharea","Anemone","Angelfish King","Ahi Tuna","Albacore","American Oyster","Anchovy","Armored Snail","Arctic Char","Atlantic Bluefin Tuna","Atlantic Cod","Atlantic Goliath Grouper","Atlantic Trumpetfish","Atlantic Wolffish","Baleen Whale","Banded Butterflyfish","Banded Coral Shrimp","Banded Sea Krait","Barnacle","Barndoor Skate","Barracuda","Basking Shark","Bass","Beluga Whale","Bluebanded Goby","Bluehead Wrasse","Bluefish","Bluestreak Cleaner-Wrasse","Blue Marlin","Blue Shark","Blue Spiny Lobster","Blue Tang","Blue Whale","Broadclub Cuttlefish","Bull Shark","Chambered Nautilus","Chilean Basket Star","Chilean Jack Mackerel","Chinook Salmon","Christmas Tree Worm","Clam","Clown Anemonefish","Clown Triggerfish","Cod","Coelacanth","Cockscomb Cup Coral","Common Fangtooth","Conch","Cookiecutter Shark","Copepod","Coral","Corydoras","Cownose Ray","Crab","Crown-of-Thorns Starfish","Cushion Star","Cuttlefish","California Sea Otters","Dolphin","Dolphinfish","Dory","Devil Fish","Dugong","Dumbo Octopus","Dungeness Crab","Eccentric Sand Dollar","Edible Sea Cucumber","Eel","Elephant Seal","Elkhorn Coral","Emperor Shrimp","Estuarine Crocodile","Fathead Sculpin","Fiddler Crab","Fin Whale","Flameback","Flamingo Tongue Snail","Flashlight Fish","Flatback Turtle","Flatfish","Flying Fish","Flounder","Fluke","French Angelfish","Frilled Shark","Fugu (also called Pufferfish)","Gar","Geoduck","Giant Barrel Sponge","Giant Caribbean Sea Anemone","Giant Clam","Giant Isopod","Giant Kingfish","Giant Oarfish","Giant Pacific Octopus","Giant Pyrosome","Giant Sea Star","Giant Squid","Glowing Sucker Octopus","Giant Tube Worm","Goblin Shark","Goosefish","Great White Shark","Greenland Shark","Grey Atlantic Seal","Grouper","Grunion","Guineafowl Puffer","Haddock","Hake","Halibut","Hammerhead Shark","Hapuka","Harbor Porpoise","Harbor Seal","Hatchetfish","Hawaiian Monk Seal","Hawksbill Turtle","Hector's Dolphin","Hermit Crab","Herring","Hoki","Horn Shark","Horseshoe Crab","Humpback Anglerfish","Humpback Whale","Icefish","Imperator Angelfish","Irukandji Jellyfish","Isopod","Ivory Bush Coral","Japanese Spider Crab","Jellyfish","John Dory","Juan Fernandez Fur Seal","Killer Whale","Kiwa Hirsuta","Krill","Lagoon Triggerfish","Lamprey","Leafy Seadragon","Leopard Seal","Limpet","Ling","Lionfish","Lions Mane Jellyfish","Lobe Coral","Lobster","Loggerhead Turtle","Longnose Sawshark","Longsnout Seahorse","Lophelia Coral","Marrus Orthocanna","Manatee","Manta Ray","Marlin","Megamouth Shark","Mexican Lookdown","Mimic Octopus","Moon Jelly","Mollusk","Monkfish","Moray Eel","Mullet","Mussel","Megaladon","Napoleon Wrasse","Nassau Grouper","Narwhal","Nautilus","Needlefish","Northern Seahorse","North Atlantic Right Whale","Northern Red Snapper","Norway Lobster","Nudibranch","Nurse Shark","Oarfish","Ocean Sunfish","Oceanic Whitetip Shark","Octopus","Olive Sea Snake","Orange Roughy","Ostracod","Otter","Oyster","Pacific Angelshark","Pacific Blackdragon","Pacific Halibut","Pacific Sardine","Pacific Sea Nettle Jellyfish","Pacific White Sided Dolphin","Pantropical Spotted Dolphin","Patagonian Toothfish","Peacock Mantis Shrimp","Pelagic Thresher Shark","Penguin","Peruvian Anchoveta","Pilchard","Pink Salmon","Pinniped","Plankton","Porpoise","Polar Bear","Portuguese Man o' War","Pycnogonid Sea Spider","Quahog","Queen Angelfish","Queen Conch","Queen Parrotfish","Queensland Grouper","Ragfish","Ratfish","Rattail Fish","Ray","Red Drum","Red King Crab","Ringed Seal","Risso's Dolphin","Ross Seals","Sablefish","Salmon","Sand Dollar","Sandbar Shark","Sawfish","Sarcastic Fringehead","Scalloped Hammerhead Shark","Seahorse","Sea Cucumber","Sea Lion","Sea Urchin","Seal","Shark","Shortfin Mako Shark","Shovelnose Guitarfish","Shrimp","Silverside Fish","Skipjack Tuna","Slender Snipe Eel","Smalltooth Sawfish","Smelts","Sockeye Salmon","Southern Stingray","Sponge","Spotted Porcupinefish","Spotted Dolphin","Spotted Eagle Ray","Spotted Moray","Squid","Squidworm","Starfish","Stickleback","Stonefish","Stoplight Loosejaw","Sturgeon","Swordfish","Tan Bristlemouth","Tasseled Wobbegong","Terrible Claw Lobster","Threespot Damselfish","Tiger Prawn","Tiger Shark","Tilefish","Toadfish","Tropical Two-Wing Flyfish","Tuna","Umbrella Squid","Velvet Crab","Venus Flytrap Sea Anemone","Vigtorniella Worm","Viperfish","Vampire Squid","Vaquita","Wahoo","Walrus","West Indian Manatee","Whale","Whale Shark","Whiptail Gulper","White-Beaked Dolphin","White-Ring Garden Eel","White Shrimp","Wobbegong","Wrasse","Wreckfish","Xiphosura","Yellowtail Damselfish","Yelloweye Rockfish","Yellow Cup Black Coral","Yellow Tube Sponge","Yellowfin Tuna","Zebrashark","Zooplankton"],
6835 //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/
6836 "desert" : ["Aardwolf","Addax","African Wild Ass","Ant","Antelope","Armadillo","Baboon","Badger","Bat","Bearded Dragon","Beetle","Bird","Black-footed Cat","Boa","Brown Bear","Bustard","Butterfly","Camel","Caracal","Caracara","Caterpillar","Centipede","Cheetah","Chipmunk","Chuckwalla","Climbing Mouse","Coati","Cobra","Cotton Rat","Cougar","Courser","Crane Fly","Crow","Dassie Rat","Dove","Dunnart","Eagle","Echidna","Elephant","Emu","Falcon","Fly","Fox","Frogmouth","Gecko","Geoffroy's Cat","Gerbil","Grasshopper","Guanaco","Gundi","Hamster","Hawk","Hedgehog","Hyena","Hyrax","Jackal","Kangaroo","Kangaroo Rat","Kestrel","Kowari","Kultarr","Leopard","Lion","Macaw","Meerkat","Mouse","Oryx","Ostrich","Owl","Pronghorn","Python","Rabbit","Raccoon","Rattlesnake","Rhinoceros","Sand Cat","Spectacled Bear","Spiny Mouse","Starling","Stick Bug","Tarantula","Tit","Toad","Tortoise","Tyrant Flycatcher","Viper","Vulture","Waxwing","Xerus","Zebra"],
6837 "grassland" : ["Aardvark","Aardwolf","Accentor","African Buffalo","African Wild Dog","Alpaca","Anaconda","Ant","Anteater","Antelope","Armadillo","Baboon","Badger","Bandicoot","Barbet","Bat","Bee","Bee-eater","Beetle","Bird","Bison","Black-footed Cat","Black-footed Ferret","Bluebird","Boa","Bowerbird","Brown Bear","Bush Dog","Bushshrike","Bustard","Butterfly","Buzzard","Caracal","Caracara","Cardinal","Caterpillar","Cheetah","Chipmunk","Civet","Climbing Mouse","Clouded Leopard","Coati","Cobra","Cockatoo","Cockroach","Common Genet","Cotton Rat","Cougar","Courser","Coyote","Crane","Crane Fly","Cricket","Crow","Culpeo","Death Adder","Deer","Deer Mouse","Dingo","Dinosaur","Dove","Drongo","Duck","Duiker","Dunnart","Eagle","Echidna","Elephant","Elk","Emu","Falcon","Finch","Flea","Fly","Flying Frog","Fox","Frog","Frogmouth","Garter Snake","Gazelle","Gecko","Geoffroy's Cat","Gerbil","Giant Tortoise","Giraffe","Grasshopper","Grison","Groundhog","Grouse","Guanaco","Guinea Pig","Hamster","Harrier","Hartebeest","Hawk","Hedgehog","Helmetshrike","Hippopotamus","Hornbill","Hyena","Hyrax","Impala","Jackal","Jaguar","Jaguarundi","Kangaroo","Kangaroo Rat","Kestrel","Kultarr","Ladybug","Leopard","Lion","Macaw","Meerkat","Mouse","Newt","Oryx","Ostrich","Owl","Pangolin","Pheasant","Prairie Dog","Pronghorn","Przewalski's Horse","Python","Quoll","Rabbit","Raven","Rhinoceros","Shelduck","Sloth Bear","Spectacled Bear","Squirrel","Starling","Stick Bug","Tamandua","Tasmanian Devil","Thornbill","Thrush","Toad","Tortoise"],
6838 "forest" : ["Agouti","Anaconda","Anoa","Ant","Anteater","Antelope","Armadillo","Asian Black Bear","Aye-aye","Babirusa","Baboon","Badger","Bandicoot","Banteng","Barbet","Basilisk","Bat","Bearded Dragon","Bee","Bee-eater","Beetle","Bettong","Binturong","Bird-of-paradise","Bongo","Bowerbird","Bulbul","Bush Dog","Bushbaby","Bushshrike","Butterfly","Buzzard","Caecilian","Cardinal","Cassowary","Caterpillar","Centipede","Chameleon","Chimpanzee","Cicada","Civet","Clouded Leopard","Coati","Cobra","Cockatoo","Cockroach","Colugo","Cotinga","Cotton Rat","Cougar","Crane Fly","Cricket","Crocodile","Crow","Cuckoo","Cuscus","Death Adder","Deer","Dhole","Dingo","Dinosaur","Drongo","Duck","Duiker","Eagle","Echidna","Elephant","Finch","Flat-headed Cat","Flea","Flowerpecker","Fly","Flying Frog","Fossa","Frog","Frogmouth","Gaur","Gecko","Gorilla","Grison","Hawaiian Honeycreeper","Hawk","Hedgehog","Helmetshrike","Hornbill","Hyrax","Iguana","Jackal","Jaguar","Jaguarundi","Kestrel","Ladybug","Lemur","Leopard","Lion","Macaw","Mandrill","Margay","Monkey","Mouse","Mouse Deer","Newt","Okapi","Old World Flycatcher","Orangutan","Owl","Pangolin","Peafowl","Pheasant","Possum","Python","Quokka","Rabbit","Raccoon","Red Panda","Red River Hog","Rhinoceros","Sloth Bear","Spectacled Bear","Squirrel","Starling","Stick Bug","Sun Bear","Tamandua","Tamarin","Tapir","Tarantula","Thrush","Tiger","Tit","Toad","Tortoise","Toucan","Trogon","Trumpeter","Turaco","Turtle","Tyrant Flycatcher","Viper","Vulture","Wallaby","Warbler","Wasp","Waxwing","Weaver","Weaver-finch","Whistler","White-eye","Whydah","Woodswallow","Worm","Wren","Xenops","Yellowjacket","Accentor","African Buffalo","American Black Bear","Anole","Bird","Bison","Boa","Brown Bear","Chipmunk","Common Genet","Copperhead","Coyote","Deer Mouse","Dormouse","Elk","Emu","Fisher","Fox","Garter Snake","Giant Panda","Giant Tortoise","Groundhog","Grouse","Guanaco","Himalayan Tahr","Kangaroo","Koala","Numbat","Quoll","Raccoon dog","Tasmanian Devil","Thornbill","Turkey","Vole","Weasel","Wildcat","Wolf","Wombat","Woodchuck","Woodpecker"],
6839 //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html
6840 "farm" : ["Alpaca","Buffalo","Banteng","Cow","Cat","Chicken","Carp","Camel","Donkey","Dog","Duck","Emu","Goat","Gayal","Guinea","Goose","Horse","Honey","Llama","Pig","Pigeon","Rhea","Rabbit","Sheep","Silkworm","Turkey","Yak","Zebu"],
6841 //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm
6842 "pet" : ["Bearded Dragon","Birds","Burro","Cats","Chameleons","Chickens","Chinchillas","Chinese Water Dragon","Cows","Dogs","Donkey","Ducks","Ferrets","Fish","Geckos","Geese","Gerbils","Goats","Guinea Fowl","Guinea Pigs","Hamsters","Hedgehogs","Horses","Iguanas","Llamas","Lizards","Mice","Mule","Peafowl","Pigs and Hogs","Pigeons","Ponies","Pot Bellied Pig","Rabbits","Rats","Sheep","Skinks","Snakes","Stick Insects","Sugar Gliders","Tarantula","Turkeys","Turtles"],
6843 //list of zoo animals comes from https://bronxzoo.com/animals
6844 "zoo" : ["Aardvark","African Wild Dog","Aldabra Tortoise","American Alligator","American Bison","Amur Tiger","Anaconda","Andean Condor","Asian Elephant","Baby Doll Sheep","Bald Eagle","Barred Owl","Blue Iguana","Boer Goat","California Sea Lion","Caribbean Flamingo","Chinchilla","Collared Lemur","Coquerel's Sifaka","Cuban Amazon Parrot","Ebony Langur","Fennec Fox","Fossa","Gelada","Giant Anteater","Giraffe","Gorilla","Grizzly Bear","Henkel's Leaf-tailed Gecko","Indian Gharial","Indian Rhinoceros","King Cobra","King Vulture","Komodo Dragon","Linne's Two-toed Sloth","Lion","Little Penguin","Madagascar Tree Boa","Magellanic Penguin","Malayan Tapir","Malayan Tiger","Matschies Tree Kangaroo","Mini Donkey","Monarch Butterfly","Nile crocodile","North American Porcupine","Nubian Ibex","Okapi","Poison Dart Frog","Polar Bear","Pygmy Marmoset","Radiated Tortoise","Red Panda","Red Ruffed Lemur","Ring-tailed Lemur","Ring-tailed Mongoose","Rock Hyrax","Small Clawed Asian Otter","Snow Leopard","Snowy Owl","Southern White-faced Owl","Southern White Rhinocerous","Squirrel Monkey","Tufted Puffin","White Cheeked Gibbon","White-throated Bee Eater","Zebra"]
6845 }
6846 };
6847
6848 var o_hasOwnProperty = Object.prototype.hasOwnProperty;
6849 var o_keys = (Object.keys || function(obj) {
6850 var result = [];
6851 for (var key in obj) {
6852 if (o_hasOwnProperty.call(obj, key)) {
6853 result.push(key);
6854 }
6855 }
6856
6857 return result;
6858 });
6859
6860
6861 function _copyObject(source, target) {
6862 var keys = o_keys(source);
6863 var key;
6864
6865 for (var i = 0, l = keys.length; i < l; i++) {
6866 key = keys[i];
6867 target[key] = source[key] || target[key];
6868 }
6869 }
6870
6871 function _copyArray(source, target) {
6872 for (var i = 0, l = source.length; i < l; i++) {
6873 target[i] = source[i];
6874 }
6875 }
6876
6877 function copyObject(source, _target) {
6878 var isArray = Array.isArray(source);
6879 var target = _target || (isArray ? new Array(source.length) : {});
6880
6881 if (isArray) {
6882 _copyArray(source, target);
6883 } else {
6884 _copyObject(source, target);
6885 }
6886
6887 return target;
6888 }
6889
6890 /** Get the data based on key**/
6891 Chance.prototype.get = function (name) {
6892 return copyObject(data[name]);
6893 };
6894
6895 // Mac Address
6896 Chance.prototype.mac_address = function(options){
6897 // typically mac addresses are separated by ":"
6898 // however they can also be separated by "-"
6899 // the network variant uses a dot every fourth byte
6900
6901 options = initOptions(options);
6902 if(!options.separator) {
6903 options.separator = options.networkVersion ? "." : ":";
6904 }
6905
6906 var mac_pool="ABCDEF1234567890",
6907 mac = "";
6908 if(!options.networkVersion) {
6909 mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);
6910 } else {
6911 mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);
6912 }
6913
6914 return mac;
6915 };
6916
6917 Chance.prototype.normal = function (options) {
6918 options = initOptions(options, {mean : 0, dev : 1, pool : []});
6919
6920 testRange(
6921 options.pool.constructor !== Array,
6922 "Chance: The pool option must be a valid array."
6923 );
6924 testRange(
6925 typeof options.mean !== 'number',
6926 "Chance: Mean (mean) must be a number"
6927 );
6928 testRange(
6929 typeof options.dev !== 'number',
6930 "Chance: Standard deviation (dev) must be a number"
6931 );
6932
6933 // If a pool has been passed, then we are returning an item from that pool,
6934 // using the normal distribution settings that were passed in
6935 if (options.pool.length > 0) {
6936 return this.normal_pool(options);
6937 }
6938
6939 // The Marsaglia Polar method
6940 var s, u, v, norm,
6941 mean = options.mean,
6942 dev = options.dev;
6943
6944 do {
6945 // U and V are from the uniform distribution on (-1, 1)
6946 u = this.random() * 2 - 1;
6947 v = this.random() * 2 - 1;
6948
6949 s = u * u + v * v;
6950 } while (s >= 1);
6951
6952 // Compute the standard normal variate
6953 norm = u * Math.sqrt(-2 * Math.log(s) / s);
6954
6955 // Shape and scale
6956 return dev * norm + mean;
6957 };
6958
6959 Chance.prototype.normal_pool = function(options) {
6960 var performanceCounter = 0;
6961 do {
6962 var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));
6963 if (idx < options.pool.length && idx >= 0) {
6964 return options.pool[idx];
6965 } else {
6966 performanceCounter++;
6967 }
6968 } while(performanceCounter < 100);
6969
6970 throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.");
6971 };
6972
6973 Chance.prototype.radio = function (options) {
6974 // Initial Letter (Typically Designated by Side of Mississippi River)
6975 options = initOptions(options, {side : "?"});
6976 var fl = "";
6977 switch (options.side.toLowerCase()) {
6978 case "east":
6979 case "e":
6980 fl = "W";
6981 break;
6982 case "west":
6983 case "w":
6984 fl = "K";
6985 break;
6986 default:
6987 fl = this.character({pool: "KW"});
6988 break;
6989 }
6990
6991 return fl + this.character({alpha: true, casing: "upper"}) +
6992 this.character({alpha: true, casing: "upper"}) +
6993 this.character({alpha: true, casing: "upper"});
6994 };
6995
6996 // Set the data as key and data or the data map
6997 Chance.prototype.set = function (name, values) {
6998 if (typeof name === "string") {
6999 data[name] = values;
7000 } else {
7001 data = copyObject(name, data);
7002 }
7003 };
7004
7005 Chance.prototype.tv = function (options) {
7006 return this.radio(options);
7007 };
7008
7009 // ID number for Brazil companies
7010 Chance.prototype.cnpj = function () {
7011 var n = this.n(this.natural, 8, { max: 9 });
7012 var d1 = 2+n[7]*6+n[6]*7+n[5]*8+n[4]*9+n[3]*2+n[2]*3+n[1]*4+n[0]*5;
7013 d1 = 11 - (d1 % 11);
7014 if (d1>=10){
7015 d1 = 0;
7016 }
7017 var d2 = d1*2+3+n[7]*7+n[6]*8+n[5]*9+n[4]*2+n[3]*3+n[2]*4+n[1]*5+n[0]*6;
7018 d2 = 11 - (d2 % 11);
7019 if (d2>=10){
7020 d2 = 0;
7021 }
7022 return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;
7023 };
7024
7025 // -- End Miscellaneous --
7026
7027 Chance.prototype.mersenne_twister = function (seed) {
7028 return new MersenneTwister(seed);
7029 };
7030
7031 Chance.prototype.blueimp_md5 = function () {
7032 return new BlueImpMD5();
7033 };
7034
7035 // Mersenne Twister from https://gist.github.com/banksean/300494
7036 /*
7037 A C-program for MT19937, with initialization improved 2002/1/26.
7038 Coded by Takuji Nishimura and Makoto Matsumoto.
7039
7040 Before using, initialize the state by using init_genrand(seed)
7041 or init_by_array(init_key, key_length).
7042
7043 Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
7044 All rights reserved.
7045
7046 Redistribution and use in source and binary forms, with or without
7047 modification, are permitted provided that the following conditions
7048 are met:
7049
7050 1. Redistributions of source code must retain the above copyright
7051 notice, this list of conditions and the following disclaimer.
7052
7053 2. Redistributions in binary form must reproduce the above copyright
7054 notice, this list of conditions and the following disclaimer in the
7055 documentation and/or other materials provided with the distribution.
7056
7057 3. The names of its contributors may not be used to endorse or promote
7058 products derived from this software without specific prior written
7059 permission.
7060
7061 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7062 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7063 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7064 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
7065 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
7066 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
7067 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
7068 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
7069 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
7070 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
7071 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7072
7073
7074 Any feedback is very welcome.
7075 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
7076 email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
7077 */
7078 var MersenneTwister = function (seed) {
7079 if (seed === undefined) {
7080 // kept random number same size as time used previously to ensure no unexpected results downstream
7081 seed = Math.floor(Math.random()*Math.pow(10,13));
7082 }
7083 /* Period parameters */
7084 this.N = 624;
7085 this.M = 397;
7086 this.MATRIX_A = 0x9908b0df; /* constant vector a */
7087 this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
7088 this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
7089
7090 this.mt = new Array(this.N); /* the array for the state vector */
7091 this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */
7092
7093 this.init_genrand(seed);
7094 };
7095
7096 /* initializes mt[N] with a seed */
7097 MersenneTwister.prototype.init_genrand = function (s) {
7098 this.mt[0] = s >>> 0;
7099 for (this.mti = 1; this.mti < this.N; this.mti++) {
7100 s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);
7101 this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;
7102 /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
7103 /* In the previous versions, MSBs of the seed affect */
7104 /* only MSBs of the array mt[]. */
7105 /* 2002/01/09 modified by Makoto Matsumoto */
7106 this.mt[this.mti] >>>= 0;
7107 /* for >32 bit machines */
7108 }
7109 };
7110
7111 /* initialize by an array with array-length */
7112 /* init_key is the array for initializing keys */
7113 /* key_length is its length */
7114 /* slight change for C++, 2004/2/26 */
7115 MersenneTwister.prototype.init_by_array = function (init_key, key_length) {
7116 var i = 1, j = 0, k, s;
7117 this.init_genrand(19650218);
7118 k = (this.N > key_length ? this.N : key_length);
7119 for (; k; k--) {
7120 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7121 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */
7122 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7123 i++;
7124 j++;
7125 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7126 if (j >= key_length) { j = 0; }
7127 }
7128 for (k = this.N - 1; k; k--) {
7129 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7130 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */
7131 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7132 i++;
7133 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7134 }
7135
7136 this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
7137 };
7138
7139 /* generates a random number on [0,0xffffffff]-interval */
7140 MersenneTwister.prototype.genrand_int32 = function () {
7141 var y;
7142 var mag01 = new Array(0x0, this.MATRIX_A);
7143 /* mag01[x] = x * MATRIX_A for x=0,1 */
7144
7145 if (this.mti >= this.N) { /* generate N words at one time */
7146 var kk;
7147
7148 if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */
7149 this.init_genrand(5489); /* a default initial seed is used */
7150 }
7151 for (kk = 0; kk < this.N - this.M; kk++) {
7152 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7153 this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
7154 }
7155 for (;kk < this.N - 1; kk++) {
7156 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7157 this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
7158 }
7159 y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
7160 this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
7161
7162 this.mti = 0;
7163 }
7164
7165 y = this.mt[this.mti++];
7166
7167 /* Tempering */
7168 y ^= (y >>> 11);
7169 y ^= (y << 7) & 0x9d2c5680;
7170 y ^= (y << 15) & 0xefc60000;
7171 y ^= (y >>> 18);
7172
7173 return y >>> 0;
7174 };
7175
7176 /* generates a random number on [0,0x7fffffff]-interval */
7177 MersenneTwister.prototype.genrand_int31 = function () {
7178 return (this.genrand_int32() >>> 1);
7179 };
7180
7181 /* generates a random number on [0,1]-real-interval */
7182 MersenneTwister.prototype.genrand_real1 = function () {
7183 return this.genrand_int32() * (1.0 / 4294967295.0);
7184 /* divided by 2^32-1 */
7185 };
7186
7187 /* generates a random number on [0,1)-real-interval */
7188 MersenneTwister.prototype.random = function () {
7189 return this.genrand_int32() * (1.0 / 4294967296.0);
7190 /* divided by 2^32 */
7191 };
7192
7193 /* generates a random number on (0,1)-real-interval */
7194 MersenneTwister.prototype.genrand_real3 = function () {
7195 return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
7196 /* divided by 2^32 */
7197 };
7198
7199 /* generates a random number on [0,1) with 53-bit resolution*/
7200 MersenneTwister.prototype.genrand_res53 = function () {
7201 var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;
7202 return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
7203 };
7204
7205 // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5
7206 var BlueImpMD5 = function () {};
7207
7208 BlueImpMD5.prototype.VERSION = '1.0.1';
7209
7210 /*
7211 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7212 * to work around bugs in some JS interpreters.
7213 */
7214 BlueImpMD5.prototype.safe_add = function safe_add(x, y) {
7215 var lsw = (x & 0xFFFF) + (y & 0xFFFF),
7216 msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7217 return (msw << 16) | (lsw & 0xFFFF);
7218 };
7219
7220 /*
7221 * Bitwise rotate a 32-bit number to the left.
7222 */
7223 BlueImpMD5.prototype.bit_roll = function (num, cnt) {
7224 return (num << cnt) | (num >>> (32 - cnt));
7225 };
7226
7227 /*
7228 * These functions implement the five basic operations the algorithm uses.
7229 */
7230 BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {
7231 return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);
7232 };
7233 BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {
7234 return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7235 };
7236 BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {
7237 return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7238 };
7239 BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {
7240 return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);
7241 };
7242 BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {
7243 return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7244 };
7245
7246 /*
7247 * Calculate the MD5 of an array of little-endian words, and a bit length.
7248 */
7249 BlueImpMD5.prototype.binl_md5 = function (x, len) {
7250 /* append padding */
7251 x[len >> 5] |= 0x80 << (len % 32);
7252 x[(((len + 64) >>> 9) << 4) + 14] = len;
7253
7254 var i, olda, oldb, oldc, oldd,
7255 a = 1732584193,
7256 b = -271733879,
7257 c = -1732584194,
7258 d = 271733878;
7259
7260 for (i = 0; i < x.length; i += 16) {
7261 olda = a;
7262 oldb = b;
7263 oldc = c;
7264 oldd = d;
7265
7266 a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);
7267 d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
7268 c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
7269 b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
7270 a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
7271 d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
7272 c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
7273 b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
7274 a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
7275 d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
7276 c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);
7277 b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
7278 a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
7279 d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
7280 c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
7281 b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
7282
7283 a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
7284 d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
7285 c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
7286 b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);
7287 a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
7288 d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
7289 c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
7290 b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
7291 a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
7292 d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
7293 c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
7294 b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
7295 a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
7296 d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
7297 c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
7298 b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
7299
7300 a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);
7301 d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
7302 c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
7303 b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
7304 a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
7305 d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
7306 c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
7307 b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
7308 a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
7309 d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);
7310 c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
7311 b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
7312 a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
7313 d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
7314 c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
7315 b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
7316
7317 a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);
7318 d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
7319 c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
7320 b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
7321 a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
7322 d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
7323 c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
7324 b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
7325 a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
7326 d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
7327 c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
7328 b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
7329 a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
7330 d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
7331 c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
7332 b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
7333
7334 a = this.safe_add(a, olda);
7335 b = this.safe_add(b, oldb);
7336 c = this.safe_add(c, oldc);
7337 d = this.safe_add(d, oldd);
7338 }
7339 return [a, b, c, d];
7340 };
7341
7342 /*
7343 * Convert an array of little-endian words to a string
7344 */
7345 BlueImpMD5.prototype.binl2rstr = function (input) {
7346 var i,
7347 output = '';
7348 for (i = 0; i < input.length * 32; i += 8) {
7349 output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
7350 }
7351 return output;
7352 };
7353
7354 /*
7355 * Convert a raw string to an array of little-endian words
7356 * Characters >255 have their high-byte silently ignored.
7357 */
7358 BlueImpMD5.prototype.rstr2binl = function (input) {
7359 var i,
7360 output = [];
7361 output[(input.length >> 2) - 1] = undefined;
7362 for (i = 0; i < output.length; i += 1) {
7363 output[i] = 0;
7364 }
7365 for (i = 0; i < input.length * 8; i += 8) {
7366 output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
7367 }
7368 return output;
7369 };
7370
7371 /*
7372 * Calculate the MD5 of a raw string
7373 */
7374 BlueImpMD5.prototype.rstr_md5 = function (s) {
7375 return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));
7376 };
7377
7378 /*
7379 * Calculate the HMAC-MD5, of a key and some data (raw strings)
7380 */
7381 BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {
7382 var i,
7383 bkey = this.rstr2binl(key),
7384 ipad = [],
7385 opad = [],
7386 hash;
7387 ipad[15] = opad[15] = undefined;
7388 if (bkey.length > 16) {
7389 bkey = this.binl_md5(bkey, key.length * 8);
7390 }
7391 for (i = 0; i < 16; i += 1) {
7392 ipad[i] = bkey[i] ^ 0x36363636;
7393 opad[i] = bkey[i] ^ 0x5C5C5C5C;
7394 }
7395 hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
7396 return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));
7397 };
7398
7399 /*
7400 * Convert a raw string to a hex string
7401 */
7402 BlueImpMD5.prototype.rstr2hex = function (input) {
7403 var hex_tab = '0123456789abcdef',
7404 output = '',
7405 x,
7406 i;
7407 for (i = 0; i < input.length; i += 1) {
7408 x = input.charCodeAt(i);
7409 output += hex_tab.charAt((x >>> 4) & 0x0F) +
7410 hex_tab.charAt(x & 0x0F);
7411 }
7412 return output;
7413 };
7414
7415 /*
7416 * Encode a string as utf-8
7417 */
7418 BlueImpMD5.prototype.str2rstr_utf8 = function (input) {
7419 return unescape(encodeURIComponent(input));
7420 };
7421
7422 /*
7423 * Take string arguments and return either raw or hex encoded strings
7424 */
7425 BlueImpMD5.prototype.raw_md5 = function (s) {
7426 return this.rstr_md5(this.str2rstr_utf8(s));
7427 };
7428 BlueImpMD5.prototype.hex_md5 = function (s) {
7429 return this.rstr2hex(this.raw_md5(s));
7430 };
7431 BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {
7432 return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));
7433 };
7434 BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {
7435 return this.rstr2hex(this.raw_hmac_md5(k, d));
7436 };
7437
7438 BlueImpMD5.prototype.md5 = function (string, key, raw) {
7439 if (!key) {
7440 if (!raw) {
7441 return this.hex_md5(string);
7442 }
7443
7444 return this.raw_md5(string);
7445 }
7446
7447 if (!raw) {
7448 return this.hex_hmac_md5(key, string);
7449 }
7450
7451 return this.raw_hmac_md5(key, string);
7452 };
7453
7454 // CommonJS module
7455 if (typeof exports !== 'undefined') {
7456 if (typeof module !== 'undefined' && module.exports) {
7457 exports = module.exports = Chance;
7458 }
7459 exports.Chance = Chance;
7460 }
7461
7462 // Register as an anonymous AMD module
7463 if (typeof define === 'function' && define.amd) {
7464 define([], function () {
7465 return Chance;
7466 });
7467 }
7468
7469 // if there is a importsScrips object define chance for worker
7470 // allows worker to use full Chance functionality with seed
7471 if (typeof importScripts !== 'undefined') {
7472 chance = new Chance();
7473 self.Chance = Chance;
7474 }
7475
7476 // If there is a window object, that at least has a document property,
7477 // instantiate and define chance on the window
7478 if (typeof window === "object" && typeof window.document === "object") {
7479 window.Chance = Chance;
7480 window.chance = new Chance();
7481 }
7482})();