summaryrefslogtreecommitdiff
path: root/src/node_modules/chance
diff options
context:
space:
mode:
Diffstat (limited to 'src/node_modules/chance')
-rw-r--r--src/node_modules/chance/.bowerrc4
-rw-r--r--src/node_modules/chance/.eslintignore4
-rw-r--r--src/node_modules/chance/.eslintrc.js280
-rw-r--r--src/node_modules/chance/.github/FUNDING.yml12
-rw-r--r--src/node_modules/chance/.github/workflows/coverage.yml24
-rw-r--r--src/node_modules/chance/.github/workflows/docs.yml34
-rw-r--r--src/node_modules/chance/.github/workflows/lint.yml19
-rw-r--r--src/node_modules/chance/.github/workflows/publish.yml53
-rw-r--r--src/node_modules/chance/.github/workflows/tests.yml23
-rw-r--r--src/node_modules/chance/LICENSE21
-rw-r--r--src/node_modules/chance/README.md59
-rw-r--r--src/node_modules/chance/bower.json22
-rw-r--r--src/node_modules/chance/chance.js7813
-rw-r--r--src/node_modules/chance/dist/chance.min.js2
-rw-r--r--src/node_modules/chance/dist/chance.min.js.map1
-rw-r--r--src/node_modules/chance/docs/CNAME1
-rw-r--r--src/node_modules/chance/docs/README.md127
-rw-r--r--src/node_modules/chance/docs/analytics.js3
-rw-r--r--src/node_modules/chance/docs/basics/bool.md24
-rw-r--r--src/node_modules/chance/docs/basics/character.md65
-rw-r--r--src/node_modules/chance/docs/basics/falsy.md22
-rw-r--r--src/node_modules/chance/docs/basics/floating.md44
-rw-r--r--src/node_modules/chance/docs/basics/integer.md42
-rw-r--r--src/node_modules/chance/docs/basics/letter.md25
-rw-r--r--src/node_modules/chance/docs/basics/natural.md47
-rw-r--r--src/node_modules/chance/docs/basics/prime.md41
-rw-r--r--src/node_modules/chance/docs/basics/string.md76
-rw-r--r--src/node_modules/chance/docs/basics/template.md27
-rw-r--r--src/node_modules/chance/docs/chance.css108
-rw-r--r--src/node_modules/chance/docs/chance.js7494
-rw-r--r--src/node_modules/chance/docs/chance.min.js5
-rw-r--r--src/node_modules/chance/docs/chance.min.js.map1
-rw-r--r--src/node_modules/chance/docs/finance/cc.md37
-rw-r--r--src/node_modules/chance/docs/finance/cc_type.md42
-rw-r--r--src/node_modules/chance/docs/finance/currency.md13
-rw-r--r--src/node_modules/chance/docs/finance/currency_pair.md13
-rw-r--r--src/node_modules/chance/docs/finance/dollar.md30
-rw-r--r--src/node_modules/chance/docs/finance/euro.md28
-rw-r--r--src/node_modules/chance/docs/finance/exp.md21
-rw-r--r--src/node_modules/chance/docs/finance/exp_month.md28
-rw-r--r--src/node_modules/chance/docs/finance/exp_year.md15
-rw-r--r--src/node_modules/chance/docs/helpers/capitalize.md13
-rw-r--r--src/node_modules/chance/docs/helpers/mixin.md90
-rw-r--r--src/node_modules/chance/docs/helpers/pad.md40
-rw-r--r--src/node_modules/chance/docs/helpers/pick.md9
-rw-r--r--src/node_modules/chance/docs/helpers/pickone.md13
-rw-r--r--src/node_modules/chance/docs/helpers/pickset.md20
-rw-r--r--src/node_modules/chance/docs/helpers/set.md23
-rw-r--r--src/node_modules/chance/docs/helpers/shuffle.md13
-rw-r--r--src/node_modules/chance/docs/inspector.pngbin0 -> 28885 bytes
-rw-r--r--src/node_modules/chance/docs/intro.md56
-rw-r--r--src/node_modules/chance/docs/location/address.md21
-rw-r--r--src/node_modules/chance/docs/location/altitude.md29
-rw-r--r--src/node_modules/chance/docs/location/areacode.md16
-rw-r--r--src/node_modules/chance/docs/location/city.md13
-rw-r--r--src/node_modules/chance/docs/location/coordinates.md34
-rw-r--r--src/node_modules/chance/docs/location/country.md23
-rw-r--r--src/node_modules/chance/docs/location/depth.md29
-rw-r--r--src/node_modules/chance/docs/location/geohash.md21
-rw-r--r--src/node_modules/chance/docs/location/latitude.md43
-rw-r--r--src/node_modules/chance/docs/location/locale.md25
-rw-r--r--src/node_modules/chance/docs/location/longitude.md43
-rw-r--r--src/node_modules/chance/docs/location/phone.md41
-rw-r--r--src/node_modules/chance/docs/location/postal.md13
-rw-r--r--src/node_modules/chance/docs/location/postcode.md13
-rw-r--r--src/node_modules/chance/docs/location/province.md33
-rw-r--r--src/node_modules/chance/docs/location/state.md62
-rw-r--r--src/node_modules/chance/docs/location/street.md37
-rw-r--r--src/node_modules/chance/docs/location/zip.md23
-rw-r--r--src/node_modules/chance/docs/logo.pngbin0 -> 65865 bytes
-rw-r--r--src/node_modules/chance/docs/miscellaneous/coin.md16
-rw-r--r--src/node_modules/chance/docs/miscellaneous/dice.md29
-rw-r--r--src/node_modules/chance/docs/miscellaneous/guid.md16
-rw-r--r--src/node_modules/chance/docs/miscellaneous/hash.md35
-rw-r--r--src/node_modules/chance/docs/miscellaneous/hidden.md59
-rw-r--r--src/node_modules/chance/docs/miscellaneous/n.md35
-rw-r--r--src/node_modules/chance/docs/miscellaneous/normal.md35
-rw-r--r--src/node_modules/chance/docs/miscellaneous/radio.md27
-rw-r--r--src/node_modules/chance/docs/miscellaneous/rpg.md25
-rw-r--r--src/node_modules/chance/docs/miscellaneous/tv.md25
-rw-r--r--src/node_modules/chance/docs/miscellaneous/unique.md47
-rw-r--r--src/node_modules/chance/docs/miscellaneous/weighted.md55
-rw-r--r--src/node_modules/chance/docs/mobile/android_id.md13
-rw-r--r--src/node_modules/chance/docs/mobile/apple_token.md13
-rw-r--r--src/node_modules/chance/docs/mobile/bb_pin.md13
-rw-r--r--src/node_modules/chance/docs/mobile/wp7_anid.md13
-rw-r--r--src/node_modules/chance/docs/mobile/wp8_anid2.md13
-rw-r--r--src/node_modules/chance/docs/music/note.md33
-rw-r--r--src/node_modules/chance/docs/music/tempo.md24
-rw-r--r--src/node_modules/chance/docs/person/aadhar.md31
-rw-r--r--src/node_modules/chance/docs/person/age.md25
-rw-r--r--src/node_modules/chance/docs/person/birthday.md55
-rw-r--r--src/node_modules/chance/docs/person/cf.md23
-rw-r--r--src/node_modules/chance/docs/person/cpf.md13
-rw-r--r--src/node_modules/chance/docs/person/first.md31
-rw-r--r--src/node_modules/chance/docs/person/gender.md21
-rw-r--r--src/node_modules/chance/docs/person/last.md23
-rw-r--r--src/node_modules/chance/docs/person/name.md63
-rw-r--r--src/node_modules/chance/docs/person/prefix.md35
-rw-r--r--src/node_modules/chance/docs/person/ssn.md29
-rw-r--r--src/node_modules/chance/docs/person/suffix.md25
-rw-r--r--src/node_modules/chance/docs/text/paragraph.md39
-rw-r--r--src/node_modules/chance/docs/text/sentence.md28
-rw-r--r--src/node_modules/chance/docs/text/syllable.md18
-rw-r--r--src/node_modules/chance/docs/text/word.md54
-rw-r--r--src/node_modules/chance/docs/thing/animal.md25
-rw-r--r--src/node_modules/chance/docs/time/ampm.md13
-rw-r--r--src/node_modules/chance/docs/time/date.md67
-rw-r--r--src/node_modules/chance/docs/time/hammertime.md25
-rw-r--r--src/node_modules/chance/docs/time/hour.md27
-rw-r--r--src/node_modules/chance/docs/time/millisecond.md15
-rw-r--r--src/node_modules/chance/docs/time/minute.md15
-rw-r--r--src/node_modules/chance/docs/time/month.md23
-rw-r--r--src/node_modules/chance/docs/time/second.md15
-rw-r--r--src/node_modules/chance/docs/time/timestamp.md14
-rw-r--r--src/node_modules/chance/docs/time/timezone.md20
-rw-r--r--src/node_modules/chance/docs/time/weekday.md16
-rw-r--r--src/node_modules/chance/docs/time/year.md31
-rw-r--r--src/node_modules/chance/docs/usage/bower.md19
-rw-r--r--src/node_modules/chance/docs/usage/browser.md58
-rw-r--r--src/node_modules/chance/docs/usage/cli.md19
-rw-r--r--src/node_modules/chance/docs/usage/function.md22
-rw-r--r--src/node_modules/chance/docs/usage/node.md31
-rw-r--r--src/node_modules/chance/docs/usage/requirejs.md13
-rw-r--r--src/node_modules/chance/docs/usage/seed.md49
-rw-r--r--src/node_modules/chance/docs/web/avatar.md42
-rw-r--r--src/node_modules/chance/docs/web/color.md48
-rw-r--r--src/node_modules/chance/docs/web/company.md13
-rw-r--r--src/node_modules/chance/docs/web/domain.md22
-rw-r--r--src/node_modules/chance/docs/web/email.md21
-rw-r--r--src/node_modules/chance/docs/web/fbid.md13
-rw-r--r--src/node_modules/chance/docs/web/google_analytics.md13
-rw-r--r--src/node_modules/chance/docs/web/hashtag.md13
-rw-r--r--src/node_modules/chance/docs/web/ip.md14
-rw-r--r--src/node_modules/chance/docs/web/ipv6.md14
-rw-r--r--src/node_modules/chance/docs/web/klout.md13
-rw-r--r--src/node_modules/chance/docs/web/profession.md21
-rw-r--r--src/node_modules/chance/docs/web/tld.md16
-rw-r--r--src/node_modules/chance/docs/web/twitter.md13
-rw-r--r--src/node_modules/chance/docs/web/url.md53
-rw-r--r--src/node_modules/chance/gulpfile.js49
-rw-r--r--src/node_modules/chance/package.json82
-rw-r--r--src/node_modules/chance/test/helpers/phoneNumber.min.js6
-rw-r--r--src/node_modules/chance/test/test.address.js740
-rw-r--r--src/node_modules/chance/test/test.animal.js40
-rw-r--r--src/node_modules/chance/test/test.basic.js560
-rw-r--r--src/node_modules/chance/test/test.buffer.js31
-rw-r--r--src/node_modules/chance/test/test.company.js15
-rw-r--r--src/node_modules/chance/test/test.file.js116
-rw-r--r--src/node_modules/chance/test/test.finance.js220
-rw-r--r--src/node_modules/chance/test/test.helpers.js433
-rw-r--r--src/node_modules/chance/test/test.misc.js298
-rw-r--r--src/node_modules/chance/test/test.mobile.js29
-rw-r--r--src/node_modules/chance/test/test.music.js52
-rw-r--r--src/node_modules/chance/test/test.normal.js114
-rw-r--r--src/node_modules/chance/test/test.person.js447
-rw-r--r--src/node_modules/chance/test/test.regional.js116
-rw-r--r--src/node_modules/chance/test/test.text.js123
-rw-r--r--src/node_modules/chance/test/test.time.js299
-rw-r--r--src/node_modules/chance/test/test.web.js597
160 files changed, 23798 insertions, 0 deletions
diff --git a/src/node_modules/chance/.bowerrc b/src/node_modules/chance/.bowerrc
new file mode 100644
index 0000000..1460ab1
--- /dev/null
+++ b/src/node_modules/chance/.bowerrc
@@ -0,0 +1,4 @@
+
+{
+ "directory": "test/lib"
+} \ No newline at end of file
diff --git a/src/node_modules/chance/.eslintignore b/src/node_modules/chance/.eslintignore
new file mode 100644
index 0000000..120f384
--- /dev/null
+++ b/src/node_modules/chance/.eslintignore
@@ -0,0 +1,4 @@
+node_modules/
+docs/
+test/
+dist/ \ No newline at end of file
diff --git a/src/node_modules/chance/.eslintrc.js b/src/node_modules/chance/.eslintrc.js
new file mode 100644
index 0000000..e9acc03
--- /dev/null
+++ b/src/node_modules/chance/.eslintrc.js
@@ -0,0 +1,280 @@
+module.exports = {
+ "env": {
+ "browser": true,
+ "es6": true,
+ "node": true
+ },
+ "extends": "eslint:recommended",
+ "globals": {
+ "Atomics": "readonly",
+ "SharedArrayBuffer": "readonly",
+ "define": "writable",
+ "chance": "writable"
+ },
+ "parserOptions": {
+ "ecmaVersion": 2018
+ },
+ "rules": {
+ "accessor-pairs": "error",
+ "array-bracket-newline": "off",
+ "array-bracket-spacing": "off",
+ "array-callback-return": "error",
+ "array-element-newline": "off",
+ "arrow-body-style": "error",
+ "arrow-parens": "error",
+ "arrow-spacing": "error",
+ "block-scoped-var": "off",
+ "block-spacing": "off",
+ "brace-style": "off",
+ "callback-return": "error",
+ "camelcase": "off",
+ "capitalized-comments": "off",
+ "class-methods-use-this": "error",
+ "comma-dangle": "off",
+ "comma-spacing": "off",
+ "comma-style": [
+ "error",
+ "last"
+ ],
+ "complexity": "off",
+ "computed-property-spacing": [
+ "error",
+ "never"
+ ],
+ "consistent-return": "off",
+ "consistent-this": "off",
+ "curly": "error",
+ "default-case": "off",
+ "dot-location": [
+ "error",
+ "property"
+ ],
+ "dot-notation": "error",
+ "eol-last": "error",
+ "eqeqeq": "error",
+ "func-call-spacing": "off",
+ "func-name-matching": "error",
+ "func-names": "off",
+ "func-style": "off",
+ "function-call-argument-newline": [
+ "error",
+ "consistent"
+ ],
+ "function-paren-newline": "error",
+ "generator-star-spacing": "error",
+ "global-require": "error",
+ "guard-for-in": "off",
+ "handle-callback-err": "error",
+ "id-blacklist": "error",
+ "id-length": "off",
+ "id-match": "error",
+ "implicit-arrow-linebreak": "error",
+ "indent": "off",
+ "indent-legacy": "off",
+ "init-declarations": "off",
+ "jsx-quotes": "error",
+ "key-spacing": "off",
+ "keyword-spacing": "off",
+ "line-comment-position": "off",
+ "linebreak-style": [
+ "error",
+ "unix"
+ ],
+ "lines-around-comment": "off",
+ "lines-around-directive": "error",
+ "lines-between-class-members": "error",
+ "max-classes-per-file": "error",
+ "max-depth": "error",
+ "max-len": "off",
+ "max-lines": "off",
+ "max-lines-per-function": "off",
+ "max-nested-callbacks": "error",
+ "max-params": "off",
+ "max-statements": "off",
+ "max-statements-per-line": "off",
+ "multiline-comment-style": "off",
+ "multiline-ternary": [
+ "error",
+ "always-multiline"
+ ],
+ "new-cap": "error",
+ "new-parens": "error",
+ "newline-after-var": "off",
+ "newline-before-return": "off",
+ "newline-per-chained-call": "off",
+ "no-alert": "error",
+ "no-array-constructor": "off",
+ "no-await-in-loop": "error",
+ "no-bitwise": "off",
+ "no-buffer-constructor": "off",
+ "no-caller": "error",
+ "no-catch-shadow": "error",
+ "no-confusing-arrow": "error",
+ "no-console": "error",
+ "no-continue": "error",
+ "no-div-regex": "error",
+ "no-duplicate-imports": "error",
+ "no-else-return": "off",
+ "no-empty-function": "off",
+ "no-eq-null": "error",
+ "no-eval": "error",
+ "no-extend-native": "error",
+ "no-extra-bind": "error",
+ "no-extra-boolean-cast": "off",
+ "no-extra-label": "error",
+ "no-extra-parens": "off",
+ "no-floating-decimal": "error",
+ "no-implicit-coercion": [
+ "error",
+ {
+ "boolean": false,
+ "number": false,
+ "string": false
+ }
+ ],
+ "no-implicit-globals": "off",
+ "no-implied-eval": "error",
+ "no-inline-comments": "off",
+ "no-inner-declarations": [
+ "error",
+ "functions"
+ ],
+ "no-invalid-this": "error",
+ "no-iterator": "error",
+ "no-label-var": "error",
+ "no-labels": "error",
+ "no-lone-blocks": "error",
+ "no-lonely-if": "off",
+ "no-loop-func": "error",
+ "no-magic-numbers": "off",
+ "no-mixed-operators": "off",
+ "no-mixed-requires": "error",
+ "no-multi-assign": "off",
+ "no-multi-spaces": "off",
+ "no-multi-str": "error",
+ "no-multiple-empty-lines": "error",
+ "no-native-reassign": "error",
+ "no-negated-condition": "off",
+ "no-negated-in-lhs": "error",
+ "no-nested-ternary": "off",
+ "no-new": "error",
+ "no-new-func": "error",
+ "no-new-object": "error",
+ "no-new-require": "error",
+ "no-new-wrappers": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "off",
+ "no-path-concat": "error",
+ "no-plusplus": "off",
+ "no-process-env": "error",
+ "no-process-exit": "error",
+ "no-proto": "error",
+ "no-restricted-globals": "error",
+ "no-restricted-imports": "error",
+ "no-restricted-modules": "error",
+ "no-restricted-properties": "error",
+ "no-restricted-syntax": "error",
+ "no-return-assign": "error",
+ "no-return-await": "error",
+ "no-script-url": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-shadow": "off",
+ "no-spaced-func": "off",
+ "no-sync": "error",
+ "no-tabs": [
+ "error",
+ {
+ "allowIndentationTabs": true
+ }
+ ],
+ "no-template-curly-in-string": "error",
+ "no-ternary": "off",
+ "no-throw-literal": "error",
+ "no-trailing-spaces": "error",
+ "no-undef-init": "error",
+ "no-undefined": "off",
+ "no-underscore-dangle": "off",
+ "no-unmodified-loop-condition": "error",
+ "no-unneeded-ternary": "error",
+ "no-unused-expressions": "error",
+ "no-use-before-define": "off",
+ "no-useless-call": "error",
+ "no-useless-computed-key": "error",
+ "no-useless-concat": "error",
+ "no-useless-constructor": "error",
+ "no-useless-rename": "error",
+ "no-useless-return": "error",
+ "no-var": "off",
+ "no-void": "error",
+ "no-warning-comments": "off",
+ "no-whitespace-before-property": "error",
+ "nonblock-statement-body-position": "error",
+ "object-curly-newline": "error",
+ "object-curly-spacing": "off",
+ "object-shorthand": "off",
+ "one-var": "off",
+ "one-var-declaration-per-line": "off",
+ "operator-assignment": "off",
+ "operator-linebreak": [
+ "error",
+ "after"
+ ],
+ "padded-blocks": "off",
+ "padding-line-between-statements": "error",
+ "prefer-arrow-callback": "off",
+ "prefer-const": "error",
+ "prefer-destructuring": "off",
+ "prefer-named-capture-group": "error",
+ "prefer-numeric-literals": "error",
+ "prefer-object-spread": "error",
+ "prefer-promise-reject-errors": "error",
+ "prefer-reflect": "off",
+ "prefer-rest-params": "off",
+ "prefer-spread": "off",
+ "prefer-template": "off",
+ "quote-props": "off",
+ "quotes": "off",
+ "radix": "off",
+ "require-await": "error",
+ "require-jsdoc": "off",
+ "require-unicode-regexp": "off",
+ "rest-spread-spacing": "error",
+ "semi": "off",
+ "semi-spacing": "off",
+ "semi-style": "off",
+ "sort-imports": "error",
+ "sort-keys": "off",
+ "sort-vars": "off",
+ "space-before-blocks": "off",
+ "space-before-function-paren": "off",
+ "space-in-parens": "off",
+ "space-infix-ops": "off",
+ "space-unary-ops": "error",
+ "spaced-comment": "off",
+ "strict": [
+ "error",
+ "never"
+ ],
+ "switch-colon-spacing": "error",
+ "symbol-description": "error",
+ "template-curly-spacing": "error",
+ "template-tag-spacing": "error",
+ "unicode-bom": [
+ "error",
+ "never"
+ ],
+ "valid-jsdoc": "off",
+ "vars-on-top": "off",
+ "wrap-iife": [
+ "error",
+ "any"
+ ],
+ "wrap-regex": "off",
+ "yield-star-spacing": "error",
+ "yoda": [
+ "error",
+ "never"
+ ]
+ }
+};
diff --git a/src/node_modules/chance/.github/FUNDING.yml b/src/node_modules/chance/.github/FUNDING.yml
new file mode 100644
index 0000000..bbb1f4f
--- /dev/null
+++ b/src/node_modules/chance/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [victorquinn] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/src/node_modules/chance/.github/workflows/coverage.yml b/src/node_modules/chance/.github/workflows/coverage.yml
new file mode 100644
index 0000000..55431a5
--- /dev/null
+++ b/src/node_modules/chance/.github/workflows/coverage.yml
@@ -0,0 +1,24 @@
+name: Code Coverage
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Use Node.js 10.x
+ uses: actions/setup-node@v1
+ with:
+ node-version: 10.x
+ - name: install and coverage
+ run: |
+ yarn
+ yarn coverage
+ env:
+ CI: true
+
+ - name: Coveralls
+ uses: coverallsapp/github-action@master
+ with:
+ github-token: ${{ secrets.github_token }}
diff --git a/src/node_modules/chance/.github/workflows/docs.yml b/src/node_modules/chance/.github/workflows/docs.yml
new file mode 100644
index 0000000..06efaa2
--- /dev/null
+++ b/src/node_modules/chance/.github/workflows/docs.yml
@@ -0,0 +1,34 @@
+name: Documentation
+
+on:
+ pull_request:
+ branches:
+ - master
+ paths:
+ - 'docs/**/*'
+ push:
+ branches:
+ - master
+ paths:
+ - 'docs/**/*'
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ - name: build and deploy
+ if: github.event_name == 'pull_request' && github.event.pull_request.merged == 'true'
+ run: |
+ yarn
+ yarn docs
+ yarn docs:publish
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_REPO: chancejs/chancejs
+ GIT_NAME: Travis CI
+ GIT_EMAIL: mail@victorquinn.ocm
+ GIT_SOURCE: _docpress
diff --git a/src/node_modules/chance/.github/workflows/lint.yml b/src/node_modules/chance/.github/workflows/lint.yml
new file mode 100644
index 0000000..e32ba04
--- /dev/null
+++ b/src/node_modules/chance/.github/workflows/lint.yml
@@ -0,0 +1,19 @@
+name: Lint
+
+on: [push, pull_request]
+
+jobs:
+ eslint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ - run: yarn --frozen-lockfile --ignore-engines --ignore-optional --no-bin-links --non-interactive --silent --ignore-scripts --production=false
+ - name: ESLint Action
+ uses: gimenete/eslint-action@1.0
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/src/node_modules/chance/.github/workflows/publish.yml b/src/node_modules/chance/.github/workflows/publish.yml
new file mode 100644
index 0000000..236d9e1
--- /dev/null
+++ b/src/node_modules/chance/.github/workflows/publish.yml
@@ -0,0 +1,53 @@
+name: NPM Publish Package
+
+on:
+ pull_request:
+ branches:
+ - master
+ push:
+ branches:
+ - master
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ - name: install and test
+ run: |
+ yarn
+ yarn run test
+
+ publish-npm:
+ needs: build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions/setup-node@v1
+ with:
+ node-version: 12
+ registry-url: https://registry.npmjs.org/
+ - name: Publish to NPM
+ if: github.event_name == 'pull_request' && github.event.pull_request.merged == 'true'
+ run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ # Commented out until we have access to the Github Package Registry
+ #
+ # publish-gpr:
+ # needs: build
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v1
+ # - uses: actions/setup-node@v1
+ # with:
+ # node-version: 12
+ # registry-url: https://npm.pkg.github.com/
+ # scope: '@victorquinn'
+ # - run: npm publish
+ # env:
+ # NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/src/node_modules/chance/.github/workflows/tests.yml b/src/node_modules/chance/.github/workflows/tests.yml
new file mode 100644
index 0000000..918c809
--- /dev/null
+++ b/src/node_modules/chance/.github/workflows/tests.yml
@@ -0,0 +1,23 @@
+name: Unit Tests
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: [8.x, 10.x, 12.x]
+
+ steps:
+ - uses: actions/checkout@v1
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: yarn install and test
+ run: |
+ yarn
+ yarn run test
+ env:
+ CI: true
diff --git a/src/node_modules/chance/LICENSE b/src/node_modules/chance/LICENSE
new file mode 100644
index 0000000..7ae2c4b
--- /dev/null
+++ b/src/node_modules/chance/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Victor Quinn
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE. \ No newline at end of file
diff --git a/src/node_modules/chance/README.md b/src/node_modules/chance/README.md
new file mode 100644
index 0000000..d193bd0
--- /dev/null
+++ b/src/node_modules/chance/README.md
@@ -0,0 +1,59 @@
+# Chance
+
+[![Chance Logo](http://chancejs.com/logo.png)](http://chancejs.com)
+
+[![Build Status](https://travis-ci.org/chancejs/chancejs.svg?branch=develop)](https://travis-ci.org/chancejs/chancejs) [![GitHub license](https://img.shields.io/github/license/chancejs/chancejs.svg)](https://github.com/chancejs/chancejs) [![GitHub stars](https://img.shields.io/github/stars/chancejs/chancejs.svg)](https://github.com/chancejs/chancejs) [![npm](https://img.shields.io/npm/dm/chance.svg)](https://npmjs.com/package/chance) [![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/chance/badge?style=rounded)](https://www.jsdelivr.com/package/npm/chance) [![npm](https://img.shields.io/npm/v/chance.svg)](https://npmjs.com/package/chance) [![Coverage Status](https://coveralls.io/repos/chancejs/chancejs/badge.svg?branch=master)](https://coveralls.io/r/chancejs/chancejs?branch=master) [![awesomeness](https://img.shields.io/badge/awesomeness-maximum-red.svg)](https://github.com/chancejs/chancejs)
+
+Chance - Random generator helper for JavaScript
+
+Homepage: [http://chancejs.com](http://chancejs.com)
+
+Many more details on [http://chancejs.com](http://chancejs.com) but this single
+library can generate random numbers, characters, strings, names, addresses,
+dice, and pretty much anything else.
+
+It includes the basic building blocks for all these items and is built on top
+of a Mersenne Twister so it can generate these things with repeatability, if
+desired.
+
+## Usage
+
+See the [full docs](https://chancejs.com) for details on installation and usage.
+
+## Dependent tools
+
+* [Chance CLI](https://github.com/chancejs/chance-cli) - Use Chance on the command line.
+* [Chance Token Replacer](https://github.com/drewbrokke/chance-token-replacer) - Replace tokens in a string with Chance generated items.
+* [Dream.js](https://github.com/adleroliveira/dreamjs) - Lightweight json data generator
+* [Fake JSON Schema](https://github.com/pateketrueke/json-schema-faker/) - Use chance generators to populate JSON Schema samples.
+* [Mocker Data Generator](https://github.com/danibram/mocker-data-generator/) - Minimal JSON data generator.
+* [swagger-mock-api](https://github.com/dzdrazil/swagger-mock-api/) - Generate API mocks from a Swagger spec file enriched with Chance types and constraints
+* [fony](https://github.com/captainsafia/fony) - A simple command line tool for generating fake data from a template string
+
+Or [view all of the dependents on npm](https://www.npmjs.com/package/chance)
+
+*Know a library that uses Chance that isn't here? Update the README and submit a PR!*
+
+## Author
+### Victor Quinn
+[https://www.victorquinn.com](https://www.victorquinn.com)
+[@victorquinn](https://twitter.com/victorquinn)
+
+Please feel free to reach out to me if you have any questions or suggestions.
+
+### Contributors
+
+THANK YOU!
+
+### Contribute!
+
+Be a part of this project! You can run the test using the following.
+
+1. Install dependencies from package.json by running `npm install`
+2. Run the test via `npm test`
+3. Make some fun new modules!
+
+This project is licensed under the [MIT License](http://en.wikipedia.org/wiki/MIT_License) so feel free to hack away :)
+
+Proudly written in Washington, D.C.
+
diff --git a/src/node_modules/chance/bower.json b/src/node_modules/chance/bower.json
new file mode 100644
index 0000000..3939d60
--- /dev/null
+++ b/src/node_modules/chance/bower.json
@@ -0,0 +1,22 @@
+{
+ "name": "chance",
+ "version": "1.1.7",
+ "main": "chance.js",
+ "ignore": [
+ "node_modules"
+ ],
+ "description": "Chance - Utility library to generate anything random",
+ "homepage": "http://chancejs.com",
+ "keywords": [
+ "chance",
+ "random",
+ "generator"
+ ],
+ "author": {
+ "name": "Victor Quinn",
+ "web": "https://www.victorquinn.com"
+ },
+ "devDependencies": {
+ "phone_number_js": "~1.0.0"
+ }
+}
diff --git a/src/node_modules/chance/chance.js b/src/node_modules/chance/chance.js
new file mode 100644
index 0000000..ad07fe7
--- /dev/null
+++ b/src/node_modules/chance/chance.js
@@ -0,0 +1,7813 @@
+// Chance.js 1.1.7
+// http://chancejs.com
+// (c) 2013 Victor Quinn
+// Chance may be freely distributed or modified under the MIT license.
+
+(function () {
+
+ // Constants
+ var MAX_INT = 9007199254740992;
+ var MIN_INT = -MAX_INT;
+ var NUMBERS = '0123456789';
+ var CHARS_LOWER = 'abcdefghijklmnopqrstuvwxyz';
+ var CHARS_UPPER = CHARS_LOWER.toUpperCase();
+ var HEX_POOL = NUMBERS + "abcdef";
+
+ // Errors
+ function UnsupportedError(message) {
+ this.name = 'UnsupportedError';
+ this.message = message || 'This feature is not supported on this platform';
+ }
+
+ UnsupportedError.prototype = new Error();
+ UnsupportedError.prototype.constructor = UnsupportedError;
+
+ // Cached array helpers
+ var slice = Array.prototype.slice;
+
+ // Constructor
+ function Chance (seed) {
+ if (!(this instanceof Chance)) {
+ if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322
+ return seed === null ? new Chance() : new Chance(seed);
+ }
+
+ // if user has provided a function, use that as the generator
+ if (typeof seed === 'function') {
+ this.random = seed;
+ return this;
+ }
+
+ if (arguments.length) {
+ // set a starting value of zero so we can add to it
+ this.seed = 0;
+ }
+
+ // otherwise, leave this.seed blank so that MT will receive a blank
+
+ for (var i = 0; i < arguments.length; i++) {
+ var seedling = 0;
+ if (Object.prototype.toString.call(arguments[i]) === '[object String]') {
+ for (var j = 0; j < arguments[i].length; j++) {
+ // create a numeric hash for each argument, add to seedling
+ var hash = 0;
+ for (var k = 0; k < arguments[i].length; k++) {
+ hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;
+ }
+ seedling += hash;
+ }
+ } else {
+ seedling = arguments[i];
+ }
+ this.seed += (arguments.length - i) * seedling;
+ }
+
+ // If no generator function was provided, use our MT
+ this.mt = this.mersenne_twister(this.seed);
+ this.bimd5 = this.blueimp_md5();
+ this.random = function () {
+ return this.mt.random(this.seed);
+ };
+
+ return this;
+ }
+
+ Chance.prototype.VERSION = "1.1.7";
+
+ // Random helper functions
+ function initOptions(options, defaults) {
+ options = options || {};
+
+ if (defaults) {
+ for (var i in defaults) {
+ if (typeof options[i] === 'undefined') {
+ options[i] = defaults[i];
+ }
+ }
+ }
+
+ return options;
+ }
+
+ function range(size) {
+ return Array.apply(null, Array(size)).map(function (_, i) {return i;});
+ }
+
+ function testRange(test, errorMessage) {
+ if (test) {
+ throw new RangeError(errorMessage);
+ }
+ }
+
+ /**
+ * Encode the input string with Base64.
+ */
+ var base64 = function() {
+ throw new Error('No Base64 encoder available.');
+ };
+
+ // Select proper Base64 encoder.
+ (function determineBase64Encoder() {
+ if (typeof btoa === 'function') {
+ base64 = btoa;
+ } else if (typeof Buffer === 'function') {
+ base64 = function(input) {
+ return new Buffer(input).toString('base64');
+ };
+ }
+ })();
+
+ // -- Basics --
+
+ /**
+ * Return a random bool, either true or false
+ *
+ * @param {Object} [options={ likelihood: 50 }] alter the likelihood of
+ * receiving a true or false value back.
+ * @throws {RangeError} if the likelihood is out of bounds
+ * @returns {Bool} either true or false
+ */
+ Chance.prototype.bool = function (options) {
+ // likelihood of success (true)
+ options = initOptions(options, {likelihood : 50});
+
+ // Note, we could get some minor perf optimizations by checking range
+ // prior to initializing defaults, but that makes code a bit messier
+ // and the check more complicated as we have to check existence of
+ // the object then existence of the key before checking constraints.
+ // Since the options initialization should be minor computationally,
+ // decision made for code cleanliness intentionally. This is mentioned
+ // here as it's the first occurrence, will not be mentioned again.
+ testRange(
+ options.likelihood < 0 || options.likelihood > 100,
+ "Chance: Likelihood accepts values from 0 to 100."
+ );
+
+ return this.random() * 100 < options.likelihood;
+ };
+
+ Chance.prototype.falsy = function (options) {
+ // return a random falsy value
+ options = initOptions(options, {pool: [false, null, 0, NaN, '']})
+ var pool = options.pool,
+ index = this.integer({min: 0, max: pool.length}),
+ value = pool[index];
+
+ return value;
+ }
+
+ Chance.prototype.animal = function (options){
+ //returns a random animal
+ options = initOptions(options);
+
+ if(typeof options.type !== 'undefined'){
+ //if user does not put in a valid animal type, user will get an error
+ testRange(
+ !this.get("animals")[options.type.toLowerCase()],
+ "Please pick from desert, ocean, grassland, forest, zoo, pets, farm."
+ );
+ //if user does put in valid animal type, will return a random animal of that type
+ return this.pick(this.get("animals")[options.type.toLowerCase()]);
+ }
+ //if user does not put in any animal type, will return a random animal regardless
+ var animalTypeArray = ["desert","forest","ocean","zoo","farm","pet","grassland"];
+ return this.pick(this.get("animals")[this.pick(animalTypeArray)]);
+ };
+
+ /**
+ * Return a random character.
+ *
+ * @param {Object} [options={}] can specify a character pool or alpha,
+ * numeric, symbols and casing (lower or upper)
+ * @returns {String} a single random character
+ */
+ Chance.prototype.character = function (options) {
+ options = initOptions(options);
+
+ var symbols = "!@#$%^&*()[]",
+ letters, pool;
+
+ if (options.casing === 'lower') {
+ letters = CHARS_LOWER;
+ } else if (options.casing === 'upper') {
+ letters = CHARS_UPPER;
+ } else {
+ letters = CHARS_LOWER + CHARS_UPPER;
+ }
+
+ if (options.pool) {
+ pool = options.pool;
+ } else {
+ pool = '';
+ if (options.alpha) {
+ pool += letters;
+ }
+ if (options.numeric) {
+ pool += NUMBERS;
+ }
+ if (options.symbols) {
+ pool += symbols;
+ }
+ if (!pool) {
+ pool = letters + NUMBERS + symbols;
+ }
+ }
+
+ return pool.charAt(this.natural({max: (pool.length - 1)}));
+ };
+
+ // Note, wanted to use "float" or "double" but those are both JS reserved words.
+
+ // Note, fixed means N OR LESS digits after the decimal. This because
+ // It could be 14.9000 but in JavaScript, when this is cast as a number,
+ // the trailing zeroes are dropped. Left to the consumer if trailing zeroes are
+ // needed
+ /**
+ * Return a random floating point number
+ *
+ * @param {Object} [options={}] can specify a fixed precision, min, max
+ * @returns {Number} a single floating point number
+ * @throws {RangeError} Can only specify fixed or precision, not both. Also
+ * min cannot be greater than max
+ */
+ Chance.prototype.floating = function (options) {
+ options = initOptions(options, {fixed : 4});
+ testRange(
+ options.fixed && options.precision,
+ "Chance: Cannot specify both fixed and precision."
+ );
+
+ var num;
+ var fixed = Math.pow(10, options.fixed);
+
+ var max = MAX_INT / fixed;
+ var min = -max;
+
+ testRange(
+ options.min && options.fixed && options.min < min,
+ "Chance: Min specified is out of range with fixed. Min should be, at least, " + min
+ );
+ testRange(
+ options.max && options.fixed && options.max > max,
+ "Chance: Max specified is out of range with fixed. Max should be, at most, " + max
+ );
+
+ options = initOptions(options, { min : min, max : max });
+
+ // Todo - Make this work!
+ // options.precision = (typeof options.precision !== "undefined") ? options.precision : false;
+
+ num = this.integer({min: options.min * fixed, max: options.max * fixed});
+ var num_fixed = (num / fixed).toFixed(options.fixed);
+
+ return parseFloat(num_fixed);
+ };
+
+ /**
+ * Return a random integer
+ *
+ * NOTE the max and min are INCLUDED in the range. So:
+ * chance.integer({min: 1, max: 3});
+ * would return either 1, 2, or 3.
+ *
+ * @param {Object} [options={}] can specify a min and/or max
+ * @returns {Number} a single random integer number
+ * @throws {RangeError} min cannot be greater than max
+ */
+ Chance.prototype.integer = function (options) {
+ // 9007199254740992 (2^53) is the max integer number in JavaScript
+ // See: http://vq.io/132sa2j
+ options = initOptions(options, {min: MIN_INT, max: MAX_INT});
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ return Math.floor(this.random() * (options.max - options.min + 1) + options.min);
+ };
+
+ /**
+ * Return a random natural
+ *
+ * NOTE the max and min are INCLUDED in the range. So:
+ * chance.natural({min: 1, max: 3});
+ * would return either 1, 2, or 3.
+ *
+ * @param {Object} [options={}] can specify a min and/or max or a numerals count.
+ * @returns {Number} a single random integer number
+ * @throws {RangeError} min cannot be greater than max
+ */
+ Chance.prototype.natural = function (options) {
+ options = initOptions(options, {min: 0, max: MAX_INT});
+ if (typeof options.numerals === 'number'){
+ testRange(options.numerals < 1, "Chance: Numerals cannot be less than one.");
+ options.min = Math.pow(10, options.numerals - 1);
+ options.max = Math.pow(10, options.numerals) - 1;
+ }
+ testRange(options.min < 0, "Chance: Min cannot be less than zero.");
+
+ if (options.exclude) {
+ testRange(!Array.isArray(options.exclude), "Chance: exclude must be an array.")
+
+ for (var exclusionIndex in options.exclude) {
+ testRange(!Number.isInteger(options.exclude[exclusionIndex]), "Chance: exclude must be numbers.")
+ }
+
+ var random = options.min + this.natural({max: options.max - options.min - options.exclude.length})
+ var sortedExclusions = options.exclude.sort();
+ for (var exclusionIndex in sortedExclusions) {
+ if (random < sortedExclusions[exclusionIndex]) {
+ break
+ }
+ random++
+ }
+ return random
+ }
+ return this.integer(options);
+ };
+
+ /**
+ * Return a random prime number
+ *
+ * NOTE the max and min are INCLUDED in the range.
+ *
+ * @param {Object} [options={}] can specify a min and/or max
+ * @returns {Number} a single random prime number
+ * @throws {RangeError} min cannot be greater than max nor negative
+ */
+ Chance.prototype.prime = function (options) {
+ options = initOptions(options, {min: 0, max: 10000});
+ testRange(options.min < 0, "Chance: Min cannot be less than zero.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ var lastPrime = data.primes[data.primes.length - 1];
+ if (options.max > lastPrime) {
+ for (var i = lastPrime + 2; i <= options.max; ++i) {
+ if (this.is_prime(i)) {
+ data.primes.push(i);
+ }
+ }
+ }
+ var targetPrimes = data.primes.filter(function (prime) {
+ return prime >= options.min && prime <= options.max;
+ });
+ return this.pick(targetPrimes);
+ };
+
+ /**
+ * Determine whether a given number is prime or not.
+ */
+ Chance.prototype.is_prime = function (n) {
+ if (n % 1 || n < 2) {
+ return false;
+ }
+ if (n % 2 === 0) {
+ return n === 2;
+ }
+ if (n % 3 === 0) {
+ return n === 3;
+ }
+ var m = Math.sqrt(n);
+ for (var i = 5; i <= m; i += 6) {
+ if (n % i === 0 || n % (i + 2) === 0) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ /**
+ * Return a random hex number as string
+ *
+ * NOTE the max and min are INCLUDED in the range. So:
+ * chance.hex({min: '9', max: 'B'});
+ * would return either '9', 'A' or 'B'.
+ *
+ * @param {Object} [options={}] can specify a min and/or max and/or casing
+ * @returns {String} a single random string hex number
+ * @throws {RangeError} min cannot be greater than max
+ */
+ Chance.prototype.hex = function (options) {
+ options = initOptions(options, {min: 0, max: MAX_INT, casing: 'lower'});
+ testRange(options.min < 0, "Chance: Min cannot be less than zero.");
+ var integer = this.natural({min: options.min, max: options.max});
+ if (options.casing === 'upper') {
+ return integer.toString(16).toUpperCase();
+ }
+ return integer.toString(16);
+ };
+
+ Chance.prototype.letter = function(options) {
+ options = initOptions(options, {casing: 'lower'});
+ var pool = "abcdefghijklmnopqrstuvwxyz";
+ var letter = this.character({pool: pool});
+ if (options.casing === 'upper') {
+ letter = letter.toUpperCase();
+ }
+ return letter;
+ }
+
+ /**
+ * Return a random string
+ *
+ * @param {Object} [options={}] can specify a length or min and max
+ * @returns {String} a string of random length
+ * @throws {RangeError} length cannot be less than zero
+ */
+ Chance.prototype.string = function (options) {
+ options = initOptions(options, { min: 5, max: 20 });
+
+ if (!options.length) {
+ options.length = this.natural({ min: options.min, max: options.max })
+ }
+
+ testRange(options.length < 0, "Chance: Length cannot be less than zero.");
+ var length = options.length,
+ text = this.n(this.character, length, options);
+
+ return text.join("");
+ };
+
+ function CopyToken(c) {
+ this.c = c
+ }
+
+ CopyToken.prototype = {
+ substitute: function () {
+ return this.c
+ }
+ }
+
+ function EscapeToken(c) {
+ this.c = c
+ }
+
+ EscapeToken.prototype = {
+ substitute: function () {
+ if (!/[{}\\]/.test(this.c)) {
+ throw new Error('Invalid escape sequence: "\\' + this.c + '".')
+ }
+ return this.c
+ }
+ }
+
+ function ReplaceToken(c) {
+ this.c = c
+ }
+
+ ReplaceToken.prototype = {
+ replacers: {
+ '#': function (chance) { return chance.character({ pool: NUMBERS }) },
+ 'A': function (chance) { return chance.character({ pool: CHARS_UPPER }) },
+ 'a': function (chance) { return chance.character({ pool: CHARS_LOWER }) },
+ },
+
+ substitute: function (chance) {
+ var replacer = this.replacers[this.c]
+ if (!replacer) {
+ throw new Error('Invalid replacement character: "' + this.c + '".')
+ }
+ return replacer(chance)
+ }
+ }
+
+ function parseTemplate(template) {
+ var tokens = []
+ var mode = 'identity'
+ for (var i = 0; i<template.length; i++) {
+ var c = template[i]
+ switch (mode) {
+ case 'escape':
+ tokens.push(new EscapeToken(c))
+ mode = 'identity'
+ break
+ case 'identity':
+ if (c === '{') {
+ mode = 'replace'
+ } else if (c === '\\') {
+ mode = 'escape'
+ } else {
+ tokens.push(new CopyToken(c))
+ }
+ break
+ case 'replace':
+ if (c === '}') {
+ mode = 'identity'
+ } else {
+ tokens.push(new ReplaceToken(c))
+ }
+ break
+ }
+ }
+ return tokens
+ }
+
+ /**
+ * Return a random string matching the given template.
+ *
+ * The template consists of any number of "character replacement" and
+ * "character literal" sequences. A "character replacement" sequence
+ * starts with a left brace, has any number of special replacement
+ * characters, and ends with a right brace. A character literal can be any
+ * character except a brace or a backslash. A literal brace or backslash
+ * character can be included in the output by escaping with a backslash.
+ *
+ * The following replacement characters can be used in a replacement
+ * sequence:
+ *
+ * "#": a random digit
+ * "a": a random lower case letter
+ * "A": a random upper case letter
+ *
+ * Example: chance.template('{AA###}-{##}')
+ *
+ * @param {String} template string.
+ * @returns {String} a random string matching the template.
+ */
+ Chance.prototype.template = function (template) {
+ if (!template) {
+ throw new Error('Template string is required')
+ }
+ var self = this
+ return parseTemplate(template)
+ .map(function (token) { return token.substitute(self) })
+ .join('');
+ };
+
+
+ /**
+ * Return a random buffer
+ *
+ * @param {Object} [options={}] can specify a length
+ * @returns {Buffer} a buffer of random length
+ * @throws {RangeError} length cannot be less than zero
+ */
+ Chance.prototype.buffer = function (options) {
+ if (typeof Buffer === 'undefined') {
+ throw new UnsupportedError('Sorry, the buffer() function is not supported on your platform');
+ }
+ options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
+ testRange(options.length < 0, "Chance: Length cannot be less than zero.");
+ var length = options.length;
+ var content = this.n(this.character, length, options);
+
+ return Buffer.from(content);
+ };
+
+ // -- End Basics --
+
+ // -- Helpers --
+
+ Chance.prototype.capitalize = function (word) {
+ return word.charAt(0).toUpperCase() + word.substr(1);
+ };
+
+ Chance.prototype.mixin = function (obj) {
+ for (var func_name in obj) {
+ Chance.prototype[func_name] = obj[func_name];
+ }
+ return this;
+ };
+
+ /**
+ * Given a function that generates something random and a number of items to generate,
+ * return an array of items where none repeat.
+ *
+ * @param {Function} fn the function that generates something random
+ * @param {Number} num number of terms to generate
+ * @param {Object} options any options to pass on to the generator function
+ * @returns {Array} an array of length `num` with every item generated by `fn` and unique
+ *
+ * There can be more parameters after these. All additional parameters are provided to the given function
+ */
+ Chance.prototype.unique = function(fn, num, options) {
+ testRange(
+ typeof fn !== "function",
+ "Chance: The first argument must be a function."
+ );
+
+ var comparator = function(arr, val) { return arr.indexOf(val) !== -1; };
+
+ if (options) {
+ comparator = options.comparator || comparator;
+ }
+
+ var arr = [], count = 0, result, MAX_DUPLICATES = num * 50, params = slice.call(arguments, 2);
+
+ while (arr.length < num) {
+ var clonedParams = JSON.parse(JSON.stringify(params));
+ result = fn.apply(this, clonedParams);
+ if (!comparator(arr, result)) {
+ arr.push(result);
+ // reset count when unique found
+ count = 0;
+ }
+
+ if (++count > MAX_DUPLICATES) {
+ throw new RangeError("Chance: num is likely too large for sample set");
+ }
+ }
+ return arr;
+ };
+
+ /**
+ * Gives an array of n random terms
+ *
+ * @param {Function} fn the function that generates something random
+ * @param {Number} n number of terms to generate
+ * @returns {Array} an array of length `n` with items generated by `fn`
+ *
+ * There can be more parameters after these. All additional parameters are provided to the given function
+ */
+ Chance.prototype.n = function(fn, n) {
+ testRange(
+ typeof fn !== "function",
+ "Chance: The first argument must be a function."
+ );
+
+ if (typeof n === 'undefined') {
+ n = 1;
+ }
+ var i = n, arr = [], params = slice.call(arguments, 2);
+
+ // Providing a negative count should result in a noop.
+ i = Math.max( 0, i );
+
+ for (null; i--; null) {
+ arr.push(fn.apply(this, params));
+ }
+
+ return arr;
+ };
+
+ // H/T to SO for this one: http://vq.io/OtUrZ5
+ Chance.prototype.pad = function (number, width, pad) {
+ // Default pad to 0 if none provided
+ pad = pad || '0';
+ // Convert number to a string
+ number = number + '';
+ return number.length >= width ? number : new Array(width - number.length + 1).join(pad) + number;
+ };
+
+ // DEPRECATED on 2015-10-01
+ Chance.prototype.pick = function (arr, count) {
+ if (arr.length === 0) {
+ throw new RangeError("Chance: Cannot pick() from an empty array");
+ }
+ if (!count || count === 1) {
+ return arr[this.natural({max: arr.length - 1})];
+ } else {
+ return this.shuffle(arr).slice(0, count);
+ }
+ };
+
+ // Given an array, returns a single random element
+ Chance.prototype.pickone = function (arr) {
+ if (arr.length === 0) {
+ throw new RangeError("Chance: Cannot pickone() from an empty array");
+ }
+ return arr[this.natural({max: arr.length - 1})];
+ };
+
+ // Given an array, returns a random set with 'count' elements
+ Chance.prototype.pickset = function (arr, count) {
+ if (count === 0) {
+ return [];
+ }
+ if (arr.length === 0) {
+ throw new RangeError("Chance: Cannot pickset() from an empty array");
+ }
+ if (count < 0) {
+ throw new RangeError("Chance: Count must be a positive number");
+ }
+ if (!count || count === 1) {
+ return [ this.pickone(arr) ];
+ } else {
+ var array = arr.slice(0);
+ var end = array.length;
+
+ return this.n(function () {
+ var index = this.natural({max: --end});
+ var value = array[index];
+ array[index] = array[end];
+ return value;
+ }, Math.min(end, count));
+ }
+ };
+
+ Chance.prototype.shuffle = function (arr) {
+ var new_array = [],
+ j = 0,
+ length = Number(arr.length),
+ source_indexes = range(length),
+ last_source_index = length - 1,
+ selected_source_index;
+
+ for (var i = 0; i < length; i++) {
+ // Pick a random index from the array
+ selected_source_index = this.natural({max: last_source_index});
+ j = source_indexes[selected_source_index];
+
+ // Add it to the new array
+ new_array[i] = arr[j];
+
+ // Mark the source index as used
+ source_indexes[selected_source_index] = source_indexes[last_source_index];
+ last_source_index -= 1;
+ }
+
+ return new_array;
+ };
+
+ // Returns a single item from an array with relative weighting of odds
+ Chance.prototype.weighted = function (arr, weights, trim) {
+ if (arr.length !== weights.length) {
+ throw new RangeError("Chance: Length of array and weights must match");
+ }
+
+ // scan weights array and sum valid entries
+ var sum = 0;
+ var val;
+ for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
+ val = weights[weightIndex];
+ if (isNaN(val)) {
+ throw new RangeError("Chance: All weights must be numbers");
+ }
+
+ if (val > 0) {
+ sum += val;
+ }
+ }
+
+ if (sum === 0) {
+ throw new RangeError("Chance: No valid entries in array weights");
+ }
+
+ // select a value within range
+ var selected = this.random() * sum;
+
+ // find array entry corresponding to selected value
+ var total = 0;
+ var lastGoodIdx = -1;
+ var chosenIdx;
+ for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
+ val = weights[weightIndex];
+ total += val;
+ if (val > 0) {
+ if (selected <= total) {
+ chosenIdx = weightIndex;
+ break;
+ }
+ lastGoodIdx = weightIndex;
+ }
+
+ // handle any possible rounding error comparison to ensure something is picked
+ if (weightIndex === (weights.length - 1)) {
+ chosenIdx = lastGoodIdx;
+ }
+ }
+
+ var chosen = arr[chosenIdx];
+ trim = (typeof trim === 'undefined') ? false : trim;
+ if (trim) {
+ arr.splice(chosenIdx, 1);
+ weights.splice(chosenIdx, 1);
+ }
+
+ return chosen;
+ };
+
+ // -- End Helpers --
+
+ // -- Text --
+
+ Chance.prototype.paragraph = function (options) {
+ options = initOptions(options);
+
+ var sentences = options.sentences || this.natural({min: 3, max: 7}),
+ sentence_array = this.n(this.sentence, sentences),
+ separator = options.linebreak === true ? '\n' : ' ';
+
+ return sentence_array.join(separator);
+ };
+
+ // Could get smarter about this than generating random words and
+ // chaining them together. Such as: http://vq.io/1a5ceOh
+ Chance.prototype.sentence = function (options) {
+ options = initOptions(options);
+
+ var words = options.words || this.natural({min: 12, max: 18}),
+ punctuation = options.punctuation,
+ text, word_array = this.n(this.word, words);
+
+ text = word_array.join(' ');
+
+ // Capitalize first letter of sentence
+ text = this.capitalize(text);
+
+ // Make sure punctuation has a usable value
+ if (punctuation !== false && !/^[.?;!:]$/.test(punctuation)) {
+ punctuation = '.';
+ }
+
+ // Add punctuation mark
+ if (punctuation) {
+ text += punctuation;
+ }
+
+ return text;
+ };
+
+ Chance.prototype.syllable = function (options) {
+ options = initOptions(options);
+
+ var length = options.length || this.natural({min: 2, max: 3}),
+ consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones
+ vowels = 'aeiou', // vowels
+ all = consonants + vowels, // all
+ text = '',
+ chr;
+
+ // I'm sure there's a more elegant way to do this, but this works
+ // decently well.
+ for (var i = 0; i < length; i++) {
+ if (i === 0) {
+ // First character can be anything
+ chr = this.character({pool: all});
+ } else if (consonants.indexOf(chr) === -1) {
+ // Last character was a vowel, now we want a consonant
+ chr = this.character({pool: consonants});
+ } else {
+ // Last character was a consonant, now we want a vowel
+ chr = this.character({pool: vowels});
+ }
+
+ text += chr;
+ }
+
+ if (options.capitalize) {
+ text = this.capitalize(text);
+ }
+
+ return text;
+ };
+
+ Chance.prototype.word = function (options) {
+ options = initOptions(options);
+
+ testRange(
+ options.syllables && options.length,
+ "Chance: Cannot specify both syllables AND length."
+ );
+
+ var syllables = options.syllables || this.natural({min: 1, max: 3}),
+ text = '';
+
+ if (options.length) {
+ // Either bound word by length
+ do {
+ text += this.syllable();
+ } while (text.length < options.length);
+ text = text.substring(0, options.length);
+ } else {
+ // Or by number of syllables
+ for (var i = 0; i < syllables; i++) {
+ text += this.syllable();
+ }
+ }
+
+ if (options.capitalize) {
+ text = this.capitalize(text);
+ }
+
+ return text;
+ };
+
+ // -- End Text --
+
+ // -- Person --
+
+ Chance.prototype.age = function (options) {
+ options = initOptions(options);
+ var ageRange;
+
+ switch (options.type) {
+ case 'child':
+ ageRange = {min: 0, max: 12};
+ break;
+ case 'teen':
+ ageRange = {min: 13, max: 19};
+ break;
+ case 'adult':
+ ageRange = {min: 18, max: 65};
+ break;
+ case 'senior':
+ ageRange = {min: 65, max: 100};
+ break;
+ case 'all':
+ ageRange = {min: 0, max: 100};
+ break;
+ default:
+ ageRange = {min: 18, max: 65};
+ break;
+ }
+
+ return this.natural(ageRange);
+ };
+
+ Chance.prototype.birthday = function (options) {
+ var age = this.age(options);
+ var currentYear = new Date().getFullYear();
+
+ if (options && options.type) {
+ var min = new Date();
+ var max = new Date();
+ min.setFullYear(currentYear - age - 1);
+ max.setFullYear(currentYear - age);
+
+ options = initOptions(options, {
+ min: min,
+ max: max
+ });
+ } else {
+ options = initOptions(options, {
+ year: currentYear - age
+ });
+ }
+
+ return this.date(options);
+ };
+
+ // CPF; ID to identify taxpayers in Brazil
+ Chance.prototype.cpf = function (options) {
+ options = initOptions(options, {
+ formatted: true
+ });
+
+ var n = this.n(this.natural, 9, { max: 9 });
+ 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;
+ d1 = 11 - (d1 % 11);
+ if (d1>=10) {
+ d1 = 0;
+ }
+ 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;
+ d2 = 11 - (d2 % 11);
+ if (d2>=10) {
+ d2 = 0;
+ }
+ var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;
+ return options.formatted ? cpf : cpf.replace(/\D/g,'');
+ };
+
+ // CNPJ: ID to identify companies in Brazil
+ Chance.prototype.cnpj = function (options) {
+ options = initOptions(options, {
+ formatted: true
+ });
+
+ var n = this.n(this.natural, 12, { max: 12 });
+ 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;
+ d1 = 11 - (d1 % 11);
+ if (d1<2) {
+ d1 = 0;
+ }
+ 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;
+ d2 = 11 - (d2 % 11);
+ if (d2<2) {
+ d2 = 0;
+ }
+ 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;
+ return options.formatted ? cnpj : cnpj.replace(/\D/g,'');
+ };
+
+ Chance.prototype.first = function (options) {
+ options = initOptions(options, {gender: this.gender(), nationality: 'en'});
+ return this.pick(this.get("firstNames")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);
+ };
+
+ Chance.prototype.profession = function (options) {
+ options = initOptions(options);
+ if(options.rank){
+ return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get("profession"));
+ } else{
+ return this.pick(this.get("profession"));
+ }
+ };
+
+ Chance.prototype.company = function (){
+ return this.pick(this.get("company"));
+ };
+
+ Chance.prototype.gender = function (options) {
+ options = initOptions(options, {extraGenders: []});
+ return this.pick(['Male', 'Female'].concat(options.extraGenders));
+ };
+
+ Chance.prototype.last = function (options) {
+ options = initOptions(options, {nationality: '*'});
+ if (options.nationality === "*") {
+ var allLastNames = []
+ var lastNames = this.get("lastNames")
+ Object.keys(lastNames).forEach(function(key){
+ allLastNames = allLastNames.concat(lastNames[key])
+ })
+ return this.pick(allLastNames)
+ }
+ else {
+ return this.pick(this.get("lastNames")[options.nationality.toLowerCase()]);
+ }
+
+ };
+
+ Chance.prototype.israelId=function(){
+ var x=this.string({pool: '0123456789',length:8});
+ var y=0;
+ for (var i=0;i<x.length;i++){
+ var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);
+ thisDigit=this.pad(thisDigit,2).toString();
+ thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);
+ y=y+thisDigit;
+ }
+ x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);
+ return x;
+ };
+
+ Chance.prototype.mrz = function (options) {
+ var checkDigit = function (input) {
+ var alpha = "<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(''),
+ multipliers = [ 7, 3, 1 ],
+ runningTotal = 0;
+
+ if (typeof input !== 'string') {
+ input = input.toString();
+ }
+
+ input.split('').forEach(function(character, idx) {
+ var pos = alpha.indexOf(character);
+
+ if(pos !== -1) {
+ character = pos === 0 ? 0 : pos + 9;
+ } else {
+ character = parseInt(character, 10);
+ }
+ character *= multipliers[idx % multipliers.length];
+ runningTotal += character;
+ });
+ return runningTotal % 10;
+ };
+ var generate = function (opts) {
+ var pad = function (length) {
+ return new Array(length + 1).join('<');
+ };
+ var number = [ 'P<',
+ opts.issuer,
+ opts.last.toUpperCase(),
+ '<<',
+ opts.first.toUpperCase(),
+ pad(39 - (opts.last.length + opts.first.length + 2)),
+ opts.passportNumber,
+ checkDigit(opts.passportNumber),
+ opts.nationality,
+ opts.dob,
+ checkDigit(opts.dob),
+ opts.gender,
+ opts.expiry,
+ checkDigit(opts.expiry),
+ pad(14),
+ checkDigit(pad(14)) ].join('');
+
+ return number +
+ (checkDigit(number.substr(44, 10) +
+ number.substr(57, 7) +
+ number.substr(65, 7)));
+ };
+
+ var that = this;
+
+ options = initOptions(options, {
+ first: this.first(),
+ last: this.last(),
+ passportNumber: this.integer({min: 100000000, max: 999999999}),
+ dob: (function () {
+ var date = that.birthday({type: 'adult'});
+ return [date.getFullYear().toString().substr(2),
+ that.pad(date.getMonth() + 1, 2),
+ that.pad(date.getDate(), 2)].join('');
+ }()),
+ expiry: (function () {
+ var date = new Date();
+ return [(date.getFullYear() + 5).toString().substr(2),
+ that.pad(date.getMonth() + 1, 2),
+ that.pad(date.getDate(), 2)].join('');
+ }()),
+ gender: this.gender() === 'Female' ? 'F': 'M',
+ issuer: 'GBR',
+ nationality: 'GBR'
+ });
+ return generate (options);
+ };
+
+ Chance.prototype.name = function (options) {
+ options = initOptions(options);
+
+ var first = this.first(options),
+ last = this.last(options),
+ name;
+
+ if (options.middle) {
+ name = first + ' ' + this.first(options) + ' ' + last;
+ } else if (options.middle_initial) {
+ name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;
+ } else {
+ name = first + ' ' + last;
+ }
+
+ if (options.prefix) {
+ name = this.prefix(options) + ' ' + name;
+ }
+
+ if (options.suffix) {
+ name = name + ' ' + this.suffix(options);
+ }
+
+ return name;
+ };
+
+ // Return the list of available name prefixes based on supplied gender.
+ // @todo introduce internationalization
+ Chance.prototype.name_prefixes = function (gender) {
+ gender = gender || "all";
+ gender = gender.toLowerCase();
+
+ var prefixes = [
+ { name: 'Doctor', abbreviation: 'Dr.' }
+ ];
+
+ if (gender === "male" || gender === "all") {
+ prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });
+ }
+
+ if (gender === "female" || gender === "all") {
+ prefixes.push({ name: 'Miss', abbreviation: 'Miss' });
+ prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });
+ }
+
+ return prefixes;
+ };
+
+ // Alias for name_prefix
+ Chance.prototype.prefix = function (options) {
+ return this.name_prefix(options);
+ };
+
+ Chance.prototype.name_prefix = function (options) {
+ options = initOptions(options, { gender: "all" });
+ return options.full ?
+ this.pick(this.name_prefixes(options.gender)).name :
+ this.pick(this.name_prefixes(options.gender)).abbreviation;
+ };
+ //Hungarian ID number
+ Chance.prototype.HIDN= function(){
+ //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)
+ var idn_pool="0123456789";
+ var idn_chrs="ABCDEFGHIJKLMNOPQRSTUVWXYXZ";
+ var idn="";
+ idn+=this.string({pool:idn_pool,length:6});
+ idn+=this.string({pool:idn_chrs,length:2});
+ return idn;
+ };
+
+
+ Chance.prototype.ssn = function (options) {
+ options = initOptions(options, {ssnFour: false, dashes: true});
+ var ssn_pool = "1234567890",
+ ssn,
+ dash = options.dashes ? '-' : '';
+
+ if(!options.ssnFour) {
+ ssn = this.string({pool: ssn_pool, length: 3}) + dash +
+ this.string({pool: ssn_pool, length: 2}) + dash +
+ this.string({pool: ssn_pool, length: 4});
+ } else {
+ ssn = this.string({pool: ssn_pool, length: 4});
+ }
+ return ssn;
+ };
+
+ // Aadhar is similar to ssn, used in India to uniquely identify a person
+ Chance.prototype.aadhar = function (options) {
+ options = initOptions(options, {onlyLastFour: false, separatedByWhiteSpace: true});
+ var aadhar_pool = "1234567890",
+ aadhar,
+ whiteSpace = options.separatedByWhiteSpace ? ' ' : '';
+
+ if(!options.onlyLastFour) {
+ aadhar = this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
+ this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
+ this.string({pool: aadhar_pool, length: 4});
+ } else {
+ aadhar = this.string({pool: aadhar_pool, length: 4});
+ }
+ return aadhar;
+ };
+
+ // Return the list of available name suffixes
+ // @todo introduce internationalization
+ Chance.prototype.name_suffixes = function () {
+ var suffixes = [
+ { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },
+ { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },
+ { name: 'Esquire', abbreviation: 'Esq.' },
+ { name: 'Junior', abbreviation: 'Jr.' },
+ { name: 'Juris Doctor', abbreviation: 'J.D.' },
+ { name: 'Master of Arts', abbreviation: 'M.A.' },
+ { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },
+ { name: 'Master of Science', abbreviation: 'M.S.' },
+ { name: 'Medical Doctor', abbreviation: 'M.D.' },
+ { name: 'Senior', abbreviation: 'Sr.' },
+ { name: 'The Third', abbreviation: 'III' },
+ { name: 'The Fourth', abbreviation: 'IV' },
+ { name: 'Bachelor of Engineering', abbreviation: 'B.E' },
+ { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }
+ ];
+ return suffixes;
+ };
+
+ // Alias for name_suffix
+ Chance.prototype.suffix = function (options) {
+ return this.name_suffix(options);
+ };
+
+ Chance.prototype.name_suffix = function (options) {
+ options = initOptions(options);
+ return options.full ?
+ this.pick(this.name_suffixes()).name :
+ this.pick(this.name_suffixes()).abbreviation;
+ };
+
+ Chance.prototype.nationalities = function () {
+ return this.get("nationalities");
+ };
+
+ // Generate random nationality based on json list
+ Chance.prototype.nationality = function () {
+ var nationality = this.pick(this.nationalities());
+ return nationality.name;
+ };
+
+ // -- End Person --
+
+ // -- Mobile --
+ // Android GCM Registration ID
+ Chance.prototype.android_id = function () {
+ return "APA91" + this.string({ pool: "0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_", length: 178 });
+ };
+
+ // Apple Push Token
+ Chance.prototype.apple_token = function () {
+ return this.string({ pool: "abcdef1234567890", length: 64 });
+ };
+
+ // Windows Phone 8 ANID2
+ Chance.prototype.wp8_anid2 = function () {
+ return base64( this.hash( { length : 32 } ) );
+ };
+
+ // Windows Phone 7 ANID
+ Chance.prototype.wp7_anid = function () {
+ return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });
+ };
+
+ // BlackBerry Device PIN
+ Chance.prototype.bb_pin = function () {
+ return this.hash({ length: 8 });
+ };
+
+ // -- End Mobile --
+
+ // -- Web --
+ Chance.prototype.avatar = function (options) {
+ var url = null;
+ var URL_BASE = '//www.gravatar.com/avatar/';
+ var PROTOCOLS = {
+ http: 'http',
+ https: 'https'
+ };
+ var FILE_TYPES = {
+ bmp: 'bmp',
+ gif: 'gif',
+ jpg: 'jpg',
+ png: 'png'
+ };
+ var FALLBACKS = {
+ '404': '404', // Return 404 if not found
+ mm: 'mm', // Mystery man
+ identicon: 'identicon', // Geometric pattern based on hash
+ monsterid: 'monsterid', // A generated monster icon
+ wavatar: 'wavatar', // A generated face
+ retro: 'retro', // 8-bit icon
+ blank: 'blank' // A transparent png
+ };
+ var RATINGS = {
+ g: 'g',
+ pg: 'pg',
+ r: 'r',
+ x: 'x'
+ };
+ var opts = {
+ protocol: null,
+ email: null,
+ fileExtension: null,
+ size: null,
+ fallback: null,
+ rating: null
+ };
+
+ if (!options) {
+ // Set to a random email
+ opts.email = this.email();
+ options = {};
+ }
+ else if (typeof options === 'string') {
+ opts.email = options;
+ options = {};
+ }
+ else if (typeof options !== 'object') {
+ return null;
+ }
+ else if (options.constructor === 'Array') {
+ return null;
+ }
+
+ opts = initOptions(options, opts);
+
+ if (!opts.email) {
+ // Set to a random email
+ opts.email = this.email();
+ }
+
+ // Safe checking for params
+ opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';
+ opts.size = parseInt(opts.size, 0) ? opts.size : '';
+ opts.rating = RATINGS[opts.rating] ? opts.rating : '';
+ opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';
+ opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';
+
+ url =
+ opts.protocol +
+ URL_BASE +
+ this.bimd5.md5(opts.email) +
+ (opts.fileExtension ? '.' + opts.fileExtension : '') +
+ (opts.size || opts.rating || opts.fallback ? '?' : '') +
+ (opts.size ? '&s=' + opts.size.toString() : '') +
+ (opts.rating ? '&r=' + opts.rating : '') +
+ (opts.fallback ? '&d=' + opts.fallback : '')
+ ;
+
+ return url;
+ };
+
+ /**
+ * #Description:
+ * ===============================================
+ * Generate random color value base on color type:
+ * -> hex
+ * -> rgb
+ * -> rgba
+ * -> 0x
+ * -> named color
+ *
+ * #Examples:
+ * ===============================================
+ * * Geerate random hex color
+ * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'
+ *
+ * * Generate Hex based color value
+ * chance.color({format: 'hex'}) => '#d67118'
+ *
+ * * Generate simple rgb value
+ * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'
+ *
+ * * Generate Ox based color value
+ * chance.color({format: '0x'}) => '0x67ae0b'
+ *
+ * * Generate graiscale based value
+ * chance.color({grayscale: true}) => '#e2e2e2'
+ *
+ * * Return valide color name
+ * chance.color({format: 'name'}) => 'red'
+ *
+ * * Make color uppercase
+ * chance.color({casing: 'upper'}) => '#29CFA7'
+ *
+ * * Min Max values for RGBA
+ * 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});
+ *
+ * @param [object] options
+ * @return [string] color value
+ */
+ Chance.prototype.color = function (options) {
+ function gray(value, delimiter) {
+ return [value, value, value].join(delimiter || '');
+ }
+
+ function rgb(hasAlpha) {
+ var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';
+ var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : "";
+ 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}));
+ return rgbValue + '(' + colorValue + alphaChannel + ')';
+ }
+
+ function hex(start, end, withHash) {
+ var symbol = (withHash) ? "#" : "";
+ var hexstring = "";
+
+ if (isGrayscale) {
+ hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));
+ if (options.format === "shorthex") {
+ hexstring = gray(this.hex({min: 0, max: 15}));
+ }
+ }
+ else {
+ if (options.format === "shorthex") {
+ 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);
+ }
+ else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {
+ 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);
+ }
+ else {
+ 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);
+ }
+ }
+
+ return symbol + hexstring;
+ }
+
+ options = initOptions(options, {
+ format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),
+ grayscale: false,
+ casing: 'lower',
+ min: 0,
+ max: 255,
+ min_red: undefined,
+ max_red: undefined,
+ min_green: undefined,
+ max_green: undefined,
+ min_blue: undefined,
+ max_blue: undefined,
+ min_alpha: 0,
+ max_alpha: 1
+ });
+
+ var isGrayscale = options.grayscale;
+ var min_rgb = options.min;
+ var max_rgb = options.max;
+ var min_red = options.min_red;
+ var max_red = options.max_red;
+ var min_green = options.min_green;
+ var max_green = options.max_green;
+ var min_blue = options.min_blue;
+ var max_blue = options.max_blue;
+ var min_alpha = options.min_alpha;
+ var max_alpha = options.max_alpha;
+ if (options.min_red === undefined) { min_red = min_rgb; }
+ if (options.max_red === undefined) { max_red = max_rgb; }
+ if (options.min_green === undefined) { min_green = min_rgb; }
+ if (options.max_green === undefined) { max_green = max_rgb; }
+ if (options.min_blue === undefined) { min_blue = min_rgb; }
+ if (options.max_blue === undefined) { max_blue = max_rgb; }
+ if (options.min_alpha === undefined) { min_alpha = 0; }
+ if (options.max_alpha === undefined) { max_alpha = 1; }
+ if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {
+ min_rgb = ((min_red + min_green + min_blue) / 3);
+ max_rgb = ((max_red + max_green + max_blue) / 3);
+ }
+ var colorValue;
+
+ if (options.format === 'hex') {
+ colorValue = hex.call(this, 2, 6, true);
+ }
+ else if (options.format === 'shorthex') {
+ colorValue = hex.call(this, 1, 3, true);
+ }
+ else if (options.format === 'rgb') {
+ colorValue = rgb.call(this, false);
+ }
+ else if (options.format === 'rgba') {
+ colorValue = rgb.call(this, true);
+ }
+ else if (options.format === '0x') {
+ colorValue = '0x' + hex.call(this, 2, 6);
+ }
+ else if(options.format === 'name') {
+ return this.pick(this.get("colorNames"));
+ }
+ else {
+ throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".');
+ }
+
+ if (options.casing === 'upper' ) {
+ colorValue = colorValue.toUpperCase();
+ }
+
+ return colorValue;
+ };
+
+ Chance.prototype.domain = function (options) {
+ options = initOptions(options);
+ return this.word() + '.' + (options.tld || this.tld());
+ };
+
+ Chance.prototype.email = function (options) {
+ options = initOptions(options);
+ return this.word({length: options.length}) + '@' + (options.domain || this.domain());
+ };
+
+ /**
+ * #Description:
+ * ===============================================
+ * Generate a random Facebook id, aka fbid.
+ *
+ * NOTE: At the moment (Sep 2017), Facebook ids are
+ * "numeric strings" of length 16.
+ * However, Facebook Graph API documentation states that
+ * "it is extremely likely to change over time".
+ * @see https://developers.facebook.com/docs/graph-api/overview/
+ *
+ * #Examples:
+ * ===============================================
+ * chance.fbid() => '1000035231661304'
+ *
+ * @return [string] facebook id
+ */
+ Chance.prototype.fbid = function () {
+ return '10000' + this.string({pool: "1234567890", length: 11});
+ };
+
+ Chance.prototype.google_analytics = function () {
+ var account = this.pad(this.natural({max: 999999}), 6);
+ var property = this.pad(this.natural({max: 99}), 2);
+
+ return 'UA-' + account + '-' + property;
+ };
+
+ Chance.prototype.hashtag = function () {
+ return '#' + this.word();
+ };
+
+ Chance.prototype.ip = function () {
+ // Todo: This could return some reserved IPs. See http://vq.io/137dgYy
+ // this should probably be updated to account for that rare as it may be
+ return this.natural({min: 1, max: 254}) + '.' +
+ this.natural({max: 255}) + '.' +
+ this.natural({max: 255}) + '.' +
+ this.natural({min: 1, max: 254});
+ };
+
+ Chance.prototype.ipv6 = function () {
+ var ip_addr = this.n(this.hash, 8, {length: 4});
+
+ return ip_addr.join(":");
+ };
+
+ Chance.prototype.klout = function () {
+ return this.natural({min: 1, max: 99});
+ };
+
+ Chance.prototype.semver = function (options) {
+ options = initOptions(options, { include_prerelease: true });
+
+ var range = this.pickone(["^", "~", "<", ">", "<=", ">=", "="]);
+ if (options.range) {
+ range = options.range;
+ }
+
+ var prerelease = "";
+ if (options.include_prerelease) {
+ prerelease = this.weighted(["", "-dev", "-beta", "-alpha"], [50, 10, 5, 1]);
+ }
+ return range + this.rpg('3d10').join('.') + prerelease;
+ };
+
+ Chance.prototype.tlds = function () {
+ return ['com', 'org', 'edu', 'gov', 'co.uk', 'net', 'io', 'ac', 'ad', 'ae', 'af', 'ag', 'ai', 'al', 'am', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bm', 'bn', 'bo', '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'];
+ };
+
+ Chance.prototype.tld = function () {
+ return this.pick(this.tlds());
+ };
+
+ Chance.prototype.twitter = function () {
+ return '@' + this.word();
+ };
+
+ Chance.prototype.url = function (options) {
+ options = initOptions(options, { protocol: "http", domain: this.domain(options), domain_prefix: "", path: this.word(), extensions: []});
+
+ var extension = options.extensions.length > 0 ? "." + this.pick(options.extensions) : "";
+ var domain = options.domain_prefix ? options.domain_prefix + "." + options.domain : options.domain;
+
+ return options.protocol + "://" + domain + "/" + options.path + extension;
+ };
+
+ Chance.prototype.port = function() {
+ return this.integer({min: 0, max: 65535});
+ };
+
+ Chance.prototype.locale = function (options) {
+ options = initOptions(options);
+ if (options.region){
+ return this.pick(this.get("locale_regions"));
+ } else {
+ return this.pick(this.get("locale_languages"));
+ }
+ };
+
+ Chance.prototype.locales = function (options) {
+ options = initOptions(options);
+ if (options.region){
+ return this.get("locale_regions");
+ } else {
+ return this.get("locale_languages");
+ }
+ };
+
+ Chance.prototype.loremPicsum = function (options) {
+ options = initOptions(options, { width: 500, height: 500, greyscale: false, blurred: false });
+
+ var greyscale = options.greyscale ? 'g/' : '';
+ var query = options.blurred ? '/?blur' : '/?random';
+
+ return 'https://picsum.photos/' + greyscale + options.width + '/' + options.height + query;
+ }
+
+ // -- End Web --
+
+ // -- Location --
+
+ Chance.prototype.address = function (options) {
+ options = initOptions(options);
+ return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);
+ };
+
+ Chance.prototype.altitude = function (options) {
+ options = initOptions(options, {fixed: 5, min: 0, max: 8848});
+ return this.floating({
+ min: options.min,
+ max: options.max,
+ fixed: options.fixed
+ });
+ };
+
+ Chance.prototype.areacode = function (options) {
+ options = initOptions(options, {parens : true});
+ // Don't want area codes to start with 1, or have a 9 as the second digit
+ var areacode = this.natural({min: 2, max: 9}).toString() +
+ this.natural({min: 0, max: 8}).toString() +
+ this.natural({min: 0, max: 9}).toString();
+
+ return options.parens ? '(' + areacode + ')' : areacode;
+ };
+
+ Chance.prototype.city = function () {
+ return this.capitalize(this.word({syllables: 3}));
+ };
+
+ Chance.prototype.coordinates = function (options) {
+ return this.latitude(options) + ', ' + this.longitude(options);
+ };
+
+ Chance.prototype.countries = function () {
+ return this.get("countries");
+ };
+
+ Chance.prototype.country = function (options) {
+ options = initOptions(options);
+ var country = this.pick(this.countries());
+ return options.raw ? country : options.full ? country.name : country.abbreviation;
+ };
+
+ Chance.prototype.depth = function (options) {
+ options = initOptions(options, {fixed: 5, min: -10994, max: 0});
+ return this.floating({
+ min: options.min,
+ max: options.max,
+ fixed: options.fixed
+ });
+ };
+
+ Chance.prototype.geohash = function (options) {
+ options = initOptions(options, { length: 7 });
+ return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });
+ };
+
+ Chance.prototype.geojson = function (options) {
+ return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);
+ };
+
+ Chance.prototype.latitude = function (options) {
+ // Constants - Formats
+ const [DDM, DMS, DD] = ['ddm', 'dms', 'dd'];
+
+ options = initOptions(options,
+ options && options.format && [DDM, DMS].includes(options.format.toLowerCase()) ?
+ {min: 0, max: 89, fixed: 4} :
+ {fixed: 5, min: -90, max: 90, format: DD});
+
+ const format = options.format.toLowerCase();
+
+ if (format === DDM || format === DMS) {
+ testRange(options.min < 0 || options.min > 89, "Chance: Min specified is out of range. Should be between 0 - 89");
+ testRange(options.max < 0 || options.max > 89, "Chance: Max specified is out of range. Should be between 0 - 89");
+ testRange(options.fixed > 4, 'Chance: Fixed specified should be below or equal to 4');
+ }
+
+ switch (format) {
+ case DDM: {
+ return this.integer({min: options.min, max: options.max}) + '°' +
+ this.floating({min: 0, max: 59, fixed: options.fixed});
+ }
+ case DMS: {
+ return this.integer({min: options.min, max: options.max}) + '°' +
+ this.integer({min: 0, max: 59}) + '’' +
+ this.floating({min: 0, max: 59, fixed: options.fixed}) + '”';
+ }
+ case DD:
+ default: {
+ return this.floating({min: options.min, max: options.max, fixed: options.fixed});
+ }
+ }
+ };
+
+ Chance.prototype.longitude = function (options) {
+ // Constants - Formats
+ const [DDM, DMS, DD] = ['ddm', 'dms', 'dd'];
+
+ options = initOptions(options,
+ options && options.format && [DDM, DMS].includes(options.format.toLowerCase()) ?
+ {min: 0, max: 179, fixed: 4} :
+ {fixed: 5, min: -180, max: 180, format: DD});
+
+ const format = options.format.toLowerCase();
+
+ if (format === DDM || format === DMS) {
+ testRange(options.min < 0 || options.min > 179, "Chance: Min specified is out of range. Should be between 0 - 179");
+ testRange(options.max < 0 || options.max > 179, "Chance: Max specified is out of range. Should be between 0 - 179");
+ testRange(options.fixed > 4, 'Chance: Fixed specified should be below or equal to 4');
+ }
+
+ switch (format) {
+ case DDM: {
+ return this.integer({min: options.min, max: options.max}) + '°' +
+ this.floating({min: 0, max: 59.9999, fixed: options.fixed})
+ }
+ case DMS: {
+ return this.integer({min: options.min, max: options.max}) + '°' +
+ this.integer({min: 0, max: 59}) + '’' +
+ this.floating({min: 0, max: 59.9999, fixed: options.fixed}) + '”';
+ }
+ case DD:
+ default: {
+ return this.floating({min: options.min, max: options.max, fixed: options.fixed});
+ }
+ }
+ };
+
+ Chance.prototype.phone = function (options) {
+ var self = this,
+ numPick,
+ ukNum = function (parts) {
+ var section = [];
+ //fills the section part of the phone number with random numbers.
+ parts.sections.forEach(function(n) {
+ section.push(self.string({ pool: '0123456789', length: n}));
+ });
+ return parts.area + section.join(' ');
+ };
+ options = initOptions(options, {
+ formatted: true,
+ country: 'us',
+ mobile: false
+ });
+ if (!options.formatted) {
+ options.parens = false;
+ }
+ var phone;
+ switch (options.country) {
+ case 'fr':
+ if (!options.mobile) {
+ numPick = this.pick([
+ // Valid zone and département codes.
+ '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}),
+ '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}),
+ '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}),
+ '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}),
+ '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}),
+ '09' + self.string({ pool: '0123456789', length: 8}),
+ ]);
+ phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
+ } else {
+ numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});
+ phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
+ }
+ break;
+ case 'uk':
+ if (!options.mobile) {
+ numPick = this.pick([
+ //valid area codes of major cities/counties followed by random numbers in required format.
+
+ { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },
+ { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },
+ { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },
+ { area: '024 7', sections: [3,4] },
+ { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },
+ { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },
+ { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },
+ { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },
+ { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },
+ { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },
+ { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },
+ { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },
+ { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }
+ ]);
+ phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');
+ } else {
+ numPick = this.pick([
+ { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },
+ { area: '07624 ', sections: [6] }
+ ]);
+ phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');
+ }
+ break;
+ case 'za':
+ if (!options.mobile) {
+ numPick = this.pick([
+ '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
+ '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
+ '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),
+ '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),
+ '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
+ ]);
+ phone = options.formatted || numPick;
+ } else {
+ numPick = this.pick([
+ '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
+ '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),
+ '06' + self.string({ pool: '0123456789', length: 7}),
+ '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
+ '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),
+ '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),
+ ]);
+ phone = options.formatted || numPick;
+ }
+ break;
+ case 'us':
+ var areacode = this.areacode(options).toString();
+ var exchange = this.natural({ min: 2, max: 9 }).toString() +
+ this.natural({ min: 0, max: 9 }).toString() +
+ this.natural({ min: 0, max: 9 }).toString();
+ var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}
+ phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;
+ break;
+ case 'br':
+ 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"]);
+ var prefix;
+ if (options.mobile) {
+ // Brasilian official reference (mobile): http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=330
+ prefix = '9' + self.string({ pool: '0123456789', length: 4});
+ } else {
+ // Brasilian official reference: http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=331
+ prefix = this.natural({ min: 2000, max: 5999 }).toString();
+ }
+ var mcdu = self.string({ pool: '0123456789', length: 4});
+ phone = options.formatted ? '(' + areaCode + ') ' + prefix + '-' + mcdu : areaCode + prefix + mcdu;
+ break;
+ }
+ return phone;
+ };
+
+ Chance.prototype.postal = function () {
+ // Postal District
+ var pd = this.character({pool: "XVTSRPNKLMHJGECBA"});
+ // Forward Sortation Area (FSA)
+ var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: "upper"});
+ // Local Delivery Unut (LDU)
+ var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: "upper"}) + this.natural({max: 9});
+
+ return fsa + " " + ldu;
+ };
+
+ Chance.prototype.postcode = function () {
+ // Area
+ var area = this.pick(this.get("postcodeAreas")).code;
+ // District
+ var district = this.natural({max: 9});
+ // Sub-District
+ var subDistrict = this.bool() ? this.character({alpha: true, casing: "upper"}) : "";
+ // Outward Code
+ var outward = area + district + subDistrict;
+ // Sector
+ var sector = this.natural({max: 9});
+ // Unit
+ var unit = this.character({alpha: true, casing: "upper"}) + this.character({alpha: true, casing: "upper"});
+ // Inward Code
+ var inward = sector + unit;
+
+ return outward + " " + inward;
+ };
+
+ Chance.prototype.counties = function (options) {
+ options = initOptions(options, { country: 'uk' });
+ return this.get("counties")[options.country.toLowerCase()];
+ };
+
+ Chance.prototype.county = function (options) {
+ return this.pick(this.counties(options)).name;
+ };
+
+ Chance.prototype.provinces = function (options) {
+ options = initOptions(options, { country: 'ca' });
+ return this.get("provinces")[options.country.toLowerCase()];
+ };
+
+ Chance.prototype.province = function (options) {
+ return (options && options.full) ?
+ this.pick(this.provinces(options)).name :
+ this.pick(this.provinces(options)).abbreviation;
+ };
+
+ Chance.prototype.state = function (options) {
+ return (options && options.full) ?
+ this.pick(this.states(options)).name :
+ this.pick(this.states(options)).abbreviation;
+ };
+
+ Chance.prototype.states = function (options) {
+ options = initOptions(options, { country: 'us', us_states_and_dc: true } );
+
+ var states;
+
+ switch (options.country.toLowerCase()) {
+ case 'us':
+ var us_states_and_dc = this.get("us_states_and_dc"),
+ territories = this.get("territories"),
+ armed_forces = this.get("armed_forces");
+
+ states = [];
+
+ if (options.us_states_and_dc) {
+ states = states.concat(us_states_and_dc);
+ }
+ if (options.territories) {
+ states = states.concat(territories);
+ }
+ if (options.armed_forces) {
+ states = states.concat(armed_forces);
+ }
+ break;
+ case 'it':
+ case 'mx':
+ states = this.get("country_regions")[options.country.toLowerCase()];
+ break;
+ case 'uk':
+ states = this.get("counties")[options.country.toLowerCase()];
+ break;
+ }
+
+ return states;
+ };
+
+ Chance.prototype.street = function (options) {
+ options = initOptions(options, { country: 'us', syllables: 2 });
+ var street;
+
+ switch (options.country.toLowerCase()) {
+ case 'us':
+ street = this.word({ syllables: options.syllables });
+ street = this.capitalize(street);
+ street += ' ';
+ street += options.short_suffix ?
+ this.street_suffix(options).abbreviation :
+ this.street_suffix(options).name;
+ break;
+ case 'it':
+ street = this.word({ syllables: options.syllables });
+ street = this.capitalize(street);
+ street = (options.short_suffix ?
+ this.street_suffix(options).abbreviation :
+ this.street_suffix(options).name) + " " + street;
+ break;
+ }
+ return street;
+ };
+
+ Chance.prototype.street_suffix = function (options) {
+ options = initOptions(options, { country: 'us' });
+ return this.pick(this.street_suffixes(options));
+ };
+
+ Chance.prototype.street_suffixes = function (options) {
+ options = initOptions(options, { country: 'us' });
+ // These are the most common suffixes.
+ return this.get("street_suffixes")[options.country.toLowerCase()];
+ };
+
+ // Note: only returning US zip codes, internationalization will be a whole
+ // other beast to tackle at some point.
+ Chance.prototype.zip = function (options) {
+ var zip = this.n(this.natural, 5, {max: 9});
+
+ if (options && options.plusfour === true) {
+ zip.push('-');
+ zip = zip.concat(this.n(this.natural, 4, {max: 9}));
+ }
+
+ return zip.join("");
+ };
+
+ // -- End Location --
+
+ // -- Time
+
+ Chance.prototype.ampm = function () {
+ return this.bool() ? 'am' : 'pm';
+ };
+
+ Chance.prototype.date = function (options) {
+ var date_string, date;
+
+ // If interval is specified we ignore preset
+ if(options && (options.min || options.max)) {
+ options = initOptions(options, {
+ american: true,
+ string: false
+ });
+ var min = typeof options.min !== "undefined" ? options.min.getTime() : 1;
+ // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1
+ var max = typeof options.max !== "undefined" ? options.max.getTime() : 8640000000000000;
+
+ date = new Date(this.integer({min: min, max: max}));
+ } else {
+ var m = this.month({raw: true});
+ var daysInMonth = m.days;
+
+ if(options && options.month) {
+ // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).
+ daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;
+ }
+
+ options = initOptions(options, {
+ year: parseInt(this.year(), 10),
+ // Necessary to subtract 1 because Date() 0-indexes month but not day or year
+ // for some reason.
+ month: m.numeric - 1,
+ day: this.natural({min: 1, max: daysInMonth}),
+ hour: this.hour({twentyfour: true}),
+ minute: this.minute(),
+ second: this.second(),
+ millisecond: this.millisecond(),
+ american: true,
+ string: false
+ });
+
+ date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);
+ }
+
+ if (options.american) {
+ // Adding 1 to the month is necessary because Date() 0-indexes
+ // months but not day for some odd reason.
+ date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
+ } else {
+ date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
+ }
+
+ return options.string ? date_string : date;
+ };
+
+ Chance.prototype.hammertime = function (options) {
+ return this.date(options).getTime();
+ };
+
+ Chance.prototype.hour = function (options) {
+ options = initOptions(options, {
+ min: options && options.twentyfour ? 0 : 1,
+ max: options && options.twentyfour ? 23 : 12
+ });
+
+ testRange(options.min < 0, "Chance: Min cannot be less than 0.");
+ testRange(options.twentyfour && options.max > 23, "Chance: Max cannot be greater than 23 for twentyfour option.");
+ testRange(!options.twentyfour && options.max > 12, "Chance: Max cannot be greater than 12.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ return this.natural({min: options.min, max: options.max});
+ };
+
+ Chance.prototype.millisecond = function () {
+ return this.natural({max: 999});
+ };
+
+ Chance.prototype.minute = Chance.prototype.second = function (options) {
+ options = initOptions(options, {min: 0, max: 59});
+
+ testRange(options.min < 0, "Chance: Min cannot be less than 0.");
+ testRange(options.max > 59, "Chance: Max cannot be greater than 59.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ return this.natural({min: options.min, max: options.max});
+ };
+
+ Chance.prototype.month = function (options) {
+ options = initOptions(options, {min: 1, max: 12});
+
+ testRange(options.min < 1, "Chance: Min cannot be less than 1.");
+ testRange(options.max > 12, "Chance: Max cannot be greater than 12.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ var month = this.pick(this.months().slice(options.min - 1, options.max));
+ return options.raw ? month : month.name;
+ };
+
+ Chance.prototype.months = function () {
+ return this.get("months");
+ };
+
+ Chance.prototype.second = function () {
+ return this.natural({max: 59});
+ };
+
+ Chance.prototype.timestamp = function () {
+ return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});
+ };
+
+ Chance.prototype.weekday = function (options) {
+ options = initOptions(options, {weekday_only: false});
+ var weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
+ if (!options.weekday_only) {
+ weekdays.push("Saturday");
+ weekdays.push("Sunday");
+ }
+ return this.pickone(weekdays);
+ };
+
+ Chance.prototype.year = function (options) {
+ // Default to current year as min if none specified
+ options = initOptions(options, {min: new Date().getFullYear()});
+
+ // Default to one century after current year as max if none specified
+ options.max = (typeof options.max !== "undefined") ? options.max : options.min + 100;
+
+ return this.natural(options).toString();
+ };
+
+ // -- End Time
+
+ // -- Finance --
+
+ Chance.prototype.cc = function (options) {
+ options = initOptions(options);
+
+ var type, number, to_generate;
+
+ type = (options.type) ?
+ this.cc_type({ name: options.type, raw: true }) :
+ this.cc_type({ raw: true });
+
+ number = type.prefix.split("");
+ to_generate = type.length - type.prefix.length - 1;
+
+ // Generates n - 1 digits
+ number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));
+
+ // Generates the last digit according to Luhn algorithm
+ number.push(this.luhn_calculate(number.join("")));
+
+ return number.join("");
+ };
+
+ Chance.prototype.cc_types = function () {
+ // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
+ return this.get("cc_types");
+ };
+
+ Chance.prototype.cc_type = function (options) {
+ options = initOptions(options);
+ var types = this.cc_types(),
+ type = null;
+
+ if (options.name) {
+ for (var i = 0; i < types.length; i++) {
+ // Accept either name or short_name to specify card type
+ if (types[i].name === options.name || types[i].short_name === options.name) {
+ type = types[i];
+ break;
+ }
+ }
+ if (type === null) {
+ throw new RangeError("Chance: Credit card type '" + options.name + "' is not supported");
+ }
+ } else {
+ type = this.pick(types);
+ }
+
+ return options.raw ? type : type.name;
+ };
+
+ // return all world currency by ISO 4217
+ Chance.prototype.currency_types = function () {
+ return this.get("currency_types");
+ };
+
+ // return random world currency by ISO 4217
+ Chance.prototype.currency = function () {
+ return this.pick(this.currency_types());
+ };
+
+ // return all timezones available
+ Chance.prototype.timezones = function () {
+ return this.get("timezones");
+ };
+
+ // return random timezone
+ Chance.prototype.timezone = function () {
+ return this.pick(this.timezones());
+ };
+
+ //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code
+ Chance.prototype.currency_pair = function (returnAsString) {
+ var currencies = this.unique(this.currency, 2, {
+ comparator: function(arr, val) {
+
+ return arr.reduce(function(acc, item) {
+ // If a match has been found, short circuit check and just return
+ return acc || (item.code === val.code);
+ }, false);
+ }
+ });
+
+ if (returnAsString) {
+ return currencies[0].code + '/' + currencies[1].code;
+ } else {
+ return currencies;
+ }
+ };
+
+ Chance.prototype.dollar = function (options) {
+ // By default, a somewhat more sane max for dollar than all available numbers
+ options = initOptions(options, {max : 10000, min : 0});
+
+ var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),
+ cents = dollar.split('.')[1];
+
+ if (cents === undefined) {
+ dollar += '.00';
+ } else if (cents.length < 2) {
+ dollar = dollar + '0';
+ }
+
+ if (dollar < 0) {
+ return '-$' + dollar.replace('-', '');
+ } else {
+ return '$' + dollar;
+ }
+ };
+
+ Chance.prototype.euro = function (options) {
+ return Number(this.dollar(options).replace("$", "")).toLocaleString() + "€";
+ };
+
+ Chance.prototype.exp = function (options) {
+ options = initOptions(options);
+ var exp = {};
+
+ exp.year = this.exp_year();
+
+ // If the year is this year, need to ensure month is greater than the
+ // current month or this expiration will not be valid
+ if (exp.year === (new Date().getFullYear()).toString()) {
+ exp.month = this.exp_month({future: true});
+ } else {
+ exp.month = this.exp_month();
+ }
+
+ return options.raw ? exp : exp.month + '/' + exp.year;
+ };
+
+ Chance.prototype.exp_month = function (options) {
+ options = initOptions(options);
+ var month, month_int,
+ // Date object months are 0 indexed
+ curMonth = new Date().getMonth() + 1;
+
+ if (options.future && (curMonth !== 12)) {
+ do {
+ month = this.month({raw: true}).numeric;
+ month_int = parseInt(month, 10);
+ } while (month_int <= curMonth);
+ } else {
+ month = this.month({raw: true}).numeric;
+ }
+
+ return month;
+ };
+
+ Chance.prototype.exp_year = function () {
+ var curMonth = new Date().getMonth() + 1,
+ curYear = new Date().getFullYear();
+
+ return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});
+ };
+
+ Chance.prototype.vat = function (options) {
+ options = initOptions(options, { country: 'it' });
+ switch (options.country.toLowerCase()) {
+ case 'it':
+ return this.it_vat();
+ }
+ };
+
+ /**
+ * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).
+ * No country-specific formats support (yet)
+ */
+ Chance.prototype.iban = function () {
+ var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ var alphanum = alpha + '0123456789';
+ var iban =
+ this.string({ length: 2, pool: alpha }) +
+ this.pad(this.integer({ min: 0, max: 99 }), 2) +
+ this.string({ length: 4, pool: alphanum }) +
+ this.pad(this.natural(), this.natural({ min: 6, max: 26 }));
+ return iban;
+ };
+
+ // -- End Finance
+
+ // -- Regional
+
+ Chance.prototype.it_vat = function () {
+ var it_vat = this.natural({min: 1, max: 1800000});
+
+ it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);
+ return it_vat + this.luhn_calculate(it_vat);
+ };
+
+ /*
+ * this generator is written following the official algorithm
+ * all data can be passed explicitely or randomized by calling chance.cf() without options
+ * the code does not check that the input data is valid (it goes beyond the scope of the generator)
+ *
+ * @param [Object] options = { first: first name,
+ * last: last name,
+ * gender: female|male,
+ birthday: JavaScript date object,
+ city: string(4), 1 letter + 3 numbers
+ }
+ * @return [string] codice fiscale
+ *
+ */
+ Chance.prototype.cf = function (options) {
+ options = options || {};
+ var gender = !!options.gender ? options.gender : this.gender(),
+ first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),
+ last = !!options.last ? options.last : this.last( { nationality: 'it'} ),
+ birthday = !!options.birthday ? options.birthday : this.birthday(),
+ 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),
+ cf = [],
+ name_generator = function(name, isLast) {
+ var temp,
+ return_value = [];
+
+ if (name.length < 3) {
+ return_value = name.split("").concat("XXX".split("")).splice(0,3);
+ }
+ else {
+ temp = name.toUpperCase().split('').map(function(c){
+ return ("BCDFGHJKLMNPRSTVWZ".indexOf(c) !== -1) ? c : undefined;
+ }).join('');
+ if (temp.length > 3) {
+ if (isLast) {
+ temp = temp.substr(0,3);
+ } else {
+ temp = temp[0] + temp.substr(2,2);
+ }
+ }
+ if (temp.length < 3) {
+ return_value = temp;
+ temp = name.toUpperCase().split('').map(function(c){
+ return ("AEIOU".indexOf(c) !== -1) ? c : undefined;
+ }).join('').substr(0, 3 - return_value.length);
+ }
+ return_value = return_value + temp;
+ }
+
+ return return_value;
+ },
+ date_generator = function(birthday, gender, that) {
+ var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];
+
+ return birthday.getFullYear().toString().substr(2) +
+ lettermonths[birthday.getMonth()] +
+ that.pad(birthday.getDate() + ((gender.toLowerCase() === "female") ? 40 : 0), 2);
+ },
+ checkdigit_generator = function(cf) {
+ var range1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ range2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ evens = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ odds = "BAKPLCQDREVOSFTGUHMINJWZYX",
+ digit = 0;
+
+
+ for(var i = 0; i < 15; i++) {
+ if (i % 2 !== 0) {
+ digit += evens.indexOf(range2[range1.indexOf(cf[i])]);
+ }
+ else {
+ digit += odds.indexOf(range2[range1.indexOf(cf[i])]);
+ }
+ }
+ return evens[digit % 26];
+ };
+
+ cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split("")).join("");
+ cf += checkdigit_generator(cf.toUpperCase(), this);
+
+ return cf.toUpperCase();
+ };
+
+ Chance.prototype.pl_pesel = function () {
+ var number = this.natural({min: 1, max: 9999999999});
+ var arr = this.pad(number, 10).split('');
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = parseInt(arr[i]);
+ }
+
+ 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;
+ if(controlNumber !== 0) {
+ controlNumber = 10 - controlNumber;
+ }
+
+ return arr.join('') + controlNumber;
+ };
+
+ Chance.prototype.pl_nip = function () {
+ var number = this.natural({min: 1, max: 999999999});
+ var arr = this.pad(number, 9).split('');
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = parseInt(arr[i]);
+ }
+
+ 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;
+ if(controlNumber === 10) {
+ return this.pl_nip();
+ }
+
+ return arr.join('') + controlNumber;
+ };
+
+ Chance.prototype.pl_regon = function () {
+ var number = this.natural({min: 1, max: 99999999});
+ var arr = this.pad(number, 8).split('');
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = parseInt(arr[i]);
+ }
+
+ 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;
+ if(controlNumber === 10) {
+ controlNumber = 0;
+ }
+
+ return arr.join('') + controlNumber;
+ };
+
+ // -- End Regional
+
+ // -- Music --
+
+ Chance.prototype.note = function(options) {
+ // choices for 'notes' option:
+ // flatKey - chromatic scale with flat notes (default)
+ // sharpKey - chromatic scale with sharp notes
+ // flats - just flat notes
+ // sharps - just sharp notes
+ // naturals - just natural notes
+ // all - naturals, sharps and flats
+ options = initOptions(options, { notes : 'flatKey'});
+ var scales = {
+ naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],
+ flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],
+ sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']
+ };
+ scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))
+ scales.flatKey = scales.naturals.concat(scales.flats)
+ scales.sharpKey = scales.naturals.concat(scales.sharps)
+ return this.pickone(scales[options.notes]);
+ }
+
+ Chance.prototype.midi_note = function(options) {
+ var min = 0;
+ var max = 127;
+ options = initOptions(options, { min : min, max : max });
+ return this.integer({min: options.min, max: options.max});
+ }
+
+ Chance.prototype.chord_quality = function(options) {
+ options = initOptions(options, { jazz: true });
+ var chord_qualities = ['maj', 'min', 'aug', 'dim'];
+ if (options.jazz){
+ chord_qualities = [
+ 'maj7',
+ 'min7',
+ '7',
+ 'sus',
+ 'dim',
+ 'ø'
+ ];
+ }
+ return this.pickone(chord_qualities);
+ }
+
+ Chance.prototype.chord = function (options) {
+ options = initOptions(options);
+ return this.note(options) + this.chord_quality(options);
+ }
+
+ Chance.prototype.tempo = function (options) {
+ var min = 40;
+ var max = 320;
+ options = initOptions(options, {min: min, max: max});
+ return this.integer({min: options.min, max: options.max});
+ }
+
+ // -- End Music
+
+ // -- Miscellaneous --
+
+ // Coin - Flip, flip, flipadelphia
+ Chance.prototype.coin = function() {
+ return this.bool() ? "heads" : "tails";
+ }
+
+ // Dice - For all the board game geeks out there, myself included ;)
+ function diceFn (range) {
+ return function () {
+ return this.natural(range);
+ };
+ }
+ Chance.prototype.d4 = diceFn({min: 1, max: 4});
+ Chance.prototype.d6 = diceFn({min: 1, max: 6});
+ Chance.prototype.d8 = diceFn({min: 1, max: 8});
+ Chance.prototype.d10 = diceFn({min: 1, max: 10});
+ Chance.prototype.d12 = diceFn({min: 1, max: 12});
+ Chance.prototype.d20 = diceFn({min: 1, max: 20});
+ Chance.prototype.d30 = diceFn({min: 1, max: 30});
+ Chance.prototype.d100 = diceFn({min: 1, max: 100});
+
+ Chance.prototype.rpg = function (thrown, options) {
+ options = initOptions(options);
+ if (!thrown) {
+ throw new RangeError("Chance: A type of die roll must be included");
+ } else {
+ var bits = thrown.toLowerCase().split("d"),
+ rolls = [];
+
+ if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {
+ 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");
+ }
+ for (var i = bits[0]; i > 0; i--) {
+ rolls[i - 1] = this.natural({min: 1, max: bits[1]});
+ }
+ return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;
+ }
+ };
+
+ // Guid
+ Chance.prototype.guid = function (options) {
+ options = initOptions(options, { version: 5 });
+
+ var guid_pool = "abcdef1234567890",
+ variant_pool = "ab89",
+ guid = this.string({ pool: guid_pool, length: 8 }) + '-' +
+ this.string({ pool: guid_pool, length: 4 }) + '-' +
+ // The Version
+ options.version +
+ this.string({ pool: guid_pool, length: 3 }) + '-' +
+ // The Variant
+ this.string({ pool: variant_pool, length: 1 }) +
+ this.string({ pool: guid_pool, length: 3 }) + '-' +
+ this.string({ pool: guid_pool, length: 12 });
+ return guid;
+ };
+
+ // Hash
+ Chance.prototype.hash = function (options) {
+ options = initOptions(options, {length : 40, casing: 'lower'});
+ var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;
+ return this.string({pool: pool, length: options.length});
+ };
+
+ Chance.prototype.luhn_check = function (num) {
+ var str = num.toString();
+ var checkDigit = +str.substring(str.length - 1);
+ return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));
+ };
+
+ Chance.prototype.luhn_calculate = function (num) {
+ var digits = num.toString().split("").reverse();
+ var sum = 0;
+ var digit;
+
+ for (var i = 0, l = digits.length; l > i; ++i) {
+ digit = +digits[i];
+ if (i % 2 === 0) {
+ digit *= 2;
+ if (digit > 9) {
+ digit -= 9;
+ }
+ }
+ sum += digit;
+ }
+ return (sum * 9) % 10;
+ };
+
+ // MD5 Hash
+ Chance.prototype.md5 = function(options) {
+ var opts = { str: '', key: null, raw: false };
+
+ if (!options) {
+ opts.str = this.string();
+ options = {};
+ }
+ else if (typeof options === 'string') {
+ opts.str = options;
+ options = {};
+ }
+ else if (typeof options !== 'object') {
+ return null;
+ }
+ else if(options.constructor === 'Array') {
+ return null;
+ }
+
+ opts = initOptions(options, opts);
+
+ if(!opts.str){
+ throw new Error('A parameter is required to return an md5 hash.');
+ }
+
+ return this.bimd5.md5(opts.str, opts.key, opts.raw);
+ };
+
+ /**
+ * #Description:
+ * =====================================================
+ * Generate random file name with extension
+ *
+ * The argument provide extension type
+ * -> raster
+ * -> vector
+ * -> 3d
+ * -> document
+ *
+ * If nothing is provided the function return random file name with random
+ * extension type of any kind
+ *
+ * The user can validate the file name length range
+ * If nothing provided the generated file name is random
+ *
+ * #Extension Pool :
+ * * Currently the supported extensions are
+ * -> some of the most popular raster image extensions
+ * -> some of the most popular vector image extensions
+ * -> some of the most popular 3d image extensions
+ * -> some of the most popular document extensions
+ *
+ * #Examples :
+ * =====================================================
+ *
+ * Return random file name with random extension. The file extension
+ * is provided by a predefined collection of extensions. More about the extension
+ * pool can be found in #Extension Pool section
+ *
+ * chance.file()
+ * => dsfsdhjf.xml
+ *
+ * In order to generate a file name with specific length, specify the
+ * length property and integer value. The extension is going to be random
+ *
+ * chance.file({length : 10})
+ * => asrtineqos.pdf
+ *
+ * In order to generate file with extension from some of the predefined groups
+ * of the extension pool just specify the extension pool category in fileType property
+ *
+ * chance.file({fileType : 'raster'})
+ * => dshgssds.psd
+ *
+ * You can provide specific extension for your files
+ * chance.file({extension : 'html'})
+ * => djfsd.html
+ *
+ * Or you could pass custom collection of extensions by array or by object
+ * chance.file({extensions : [...]})
+ * => dhgsdsd.psd
+ *
+ * chance.file({extensions : { key : [...], key : [...]}})
+ * => djsfksdjsd.xml
+ *
+ * @param [collection] options
+ * @return [string]
+ *
+ */
+ Chance.prototype.file = function(options) {
+
+ var fileOptions = options || {};
+ var poolCollectionKey = "fileExtension";
+ var typeRange = Object.keys(this.get("fileExtension"));//['raster', 'vector', '3d', 'document'];
+ var fileName;
+ var fileExtension;
+
+ // Generate random file name
+ fileName = this.word({length : fileOptions.length});
+
+ // Generate file by specific extension provided by the user
+ if(fileOptions.extension) {
+
+ fileExtension = fileOptions.extension;
+ return (fileName + '.' + fileExtension);
+ }
+
+ // Generate file by specific extension collection
+ if(fileOptions.extensions) {
+
+ if(Array.isArray(fileOptions.extensions)) {
+
+ fileExtension = this.pickone(fileOptions.extensions);
+ return (fileName + '.' + fileExtension);
+ }
+ else if(fileOptions.extensions.constructor === Object) {
+
+ var extensionObjectCollection = fileOptions.extensions;
+ var keys = Object.keys(extensionObjectCollection);
+
+ fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);
+ return (fileName + '.' + fileExtension);
+ }
+
+ throw new Error("Chance: Extensions must be an Array or Object");
+ }
+
+ // Generate file extension based on specific file type
+ if(fileOptions.fileType) {
+
+ var fileType = fileOptions.fileType;
+ if(typeRange.indexOf(fileType) !== -1) {
+
+ fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);
+ return (fileName + '.' + fileExtension);
+ }
+
+ throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'");
+ }
+
+ // Generate random file name if no extension options are passed
+ fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);
+ return (fileName + '.' + fileExtension);
+ };
+
+ var data = {
+
+ firstNames: {
+ "male": {
+ "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"],
+ // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163
+ "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"],
+ // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
+ "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"],
+ // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
+ "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"]
+ },
+
+ "female": {
+ "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"],
+ // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162
+ "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"],
+ // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
+ "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ë"],
+ // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
+ "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é"]
+ }
+ },
+
+ lastNames: {
+ "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'],
+ // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)
+ "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"],
+ // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/
+ "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"],
+ // https://surnames.behindthename.com/top/lists/england-wales/1991
+ "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"],
+ // https://surnames.behindthename.com/top/lists/germany/2017
+ "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"],
+ // http://www.japantimes.co.jp/life/2009/10/11/lifestyle/japans-top-100-most-common-family-names/
+ "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"],
+ // http://www.lowchensaustralia.com/names/popular-spanish-names.htm
+ "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"],
+ // Data taken from https://fr.wikipedia.org/wiki/Liste_des_noms_de_famille_les_plus_courants_en_France
+ "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"]
+ },
+
+ // Data taken from http://geoportal.statistics.gov.uk/datasets/ons-postcode-directory-latest-centroids
+ postcodeAreas: [{code: 'AB'}, {code: 'AL'}, {code: 'B'}, {code: 'BA'}, {code: 'BB'}, {code: 'BD'}, {code: 'BH'}, {code: 'BL'}, {code: 'BN'}, {code: 'BR'}, {code: 'BS'}, {code: 'BT'}, {code: 'CA'}, {code: 'CB'}, {code: 'CF'}, {code: 'CH'}, {code: 'CM'}, {code: 'CO'}, {code: 'CR'}, {code: 'CT'}, {code: 'CV'}, {code: 'CW'}, {code: 'DA'}, {code: 'DD'}, {code: 'DE'}, {code: 'DG'}, {code: 'DH'}, {code: 'DL'}, {code: 'DN'}, {code: 'DT'}, {code: 'DY'}, {code: 'E'}, {code: 'EC'}, {code: 'EH'}, {code: 'EN'}, {code: 'EX'}, {code: 'FK'}, {code: 'FY'}, {code: 'G'}, {code: 'GL'}, {code: 'GU'}, {code: 'GY'}, {code: 'HA'}, {code: 'HD'}, {code: 'HG'}, {code: 'HP'}, {code: 'HR'}, {code: 'HS'}, {code: 'HU'}, {code: 'HX'}, {code: 'IG'}, {code: 'IM'}, {code: 'IP'}, {code: 'IV'}, {code: 'JE'}, {code: 'KA'}, {code: 'KT'}, {code: 'KW'}, {code: 'KY'}, {code: 'L'}, {code: 'LA'}, {code: 'LD'}, {code: 'LE'}, {code: 'LL'}, {code: 'LN'}, {code: 'LS'}, {code: 'LU'}, {code: 'M'}, {code: 'ME'}, {code: 'MK'}, {code: 'ML'}, {code: 'N'}, {code: 'NE'}, {code: 'NG'}, {code: 'NN'}, {code: 'NP'}, {code: 'NR'}, {code: 'NW'}, {code: 'OL'}, {code: 'OX'}, {code: 'PA'}, {code: 'PE'}, {code: 'PH'}, {code: 'PL'}, {code: 'PO'}, {code: 'PR'}, {code: 'RG'}, {code: 'RH'}, {code: 'RM'}, {code: 'S'}, {code: 'SA'}, {code: 'SE'}, {code: 'SG'}, {code: 'SK'}, {code: 'SL'}, {code: 'SM'}, {code: 'SN'}, {code: 'SO'}, {code: 'SP'}, {code: 'SR'}, {code: 'SS'}, {code: 'ST'}, {code: 'SW'}, {code: 'SY'}, {code: 'TA'}, {code: 'TD'}, {code: 'TF'}, {code: 'TN'}, {code: 'TQ'}, {code: 'TR'}, {code: 'TS'}, {code: 'TW'}, {code: 'UB'}, {code: 'W'}, {code: 'WA'}, {code: 'WC'}, {code: 'WD'}, {code: 'WF'}, {code: 'WN'}, {code: 'WR'}, {code: 'WS'}, {code: 'WV'}, {code: 'YO'}, {code: 'ZE'}],
+
+ // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json
+ 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"}],
+
+ counties: {
+ // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk
+ "uk": [
+ {name: 'Bath and North East Somerset'},
+ {name: 'Aberdeenshire'},
+ {name: 'Anglesey'},
+ {name: 'Angus'},
+ {name: 'Bedford'},
+ {name: 'Blackburn with Darwen'},
+ {name: 'Blackpool'},
+ {name: 'Bournemouth'},
+ {name: 'Bracknell Forest'},
+ {name: 'Brighton & Hove'},
+ {name: 'Bristol'},
+ {name: 'Buckinghamshire'},
+ {name: 'Cambridgeshire'},
+ {name: 'Carmarthenshire'},
+ {name: 'Central Bedfordshire'},
+ {name: 'Ceredigion'},
+ {name: 'Cheshire East'},
+ {name: 'Cheshire West and Chester'},
+ {name: 'Clackmannanshire'},
+ {name: 'Conwy'},
+ {name: 'Cornwall'},
+ {name: 'County Antrim'},
+ {name: 'County Armagh'},
+ {name: 'County Down'},
+ {name: 'County Durham'},
+ {name: 'County Fermanagh'},
+ {name: 'County Londonderry'},
+ {name: 'County Tyrone'},
+ {name: 'Cumbria'},
+ {name: 'Darlington'},
+ {name: 'Denbighshire'},
+ {name: 'Derby'},
+ {name: 'Derbyshire'},
+ {name: 'Devon'},
+ {name: 'Dorset'},
+ {name: 'Dumfries and Galloway'},
+ {name: 'Dundee'},
+ {name: 'East Lothian'},
+ {name: 'East Riding of Yorkshire'},
+ {name: 'East Sussex'},
+ {name: 'Edinburgh?'},
+ {name: 'Essex'},
+ {name: 'Falkirk'},
+ {name: 'Fife'},
+ {name: 'Flintshire'},
+ {name: 'Gloucestershire'},
+ {name: 'Greater London'},
+ {name: 'Greater Manchester'},
+ {name: 'Gwent'},
+ {name: 'Gwynedd'},
+ {name: 'Halton'},
+ {name: 'Hampshire'},
+ {name: 'Hartlepool'},
+ {name: 'Herefordshire'},
+ {name: 'Hertfordshire'},
+ {name: 'Highlands'},
+ {name: 'Hull'},
+ {name: 'Isle of Wight'},
+ {name: 'Isles of Scilly'},
+ {name: 'Kent'},
+ {name: 'Lancashire'},
+ {name: 'Leicester'},
+ {name: 'Leicestershire'},
+ {name: 'Lincolnshire'},
+ {name: 'Lothian'},
+ {name: 'Luton'},
+ {name: 'Medway'},
+ {name: 'Merseyside'},
+ {name: 'Mid Glamorgan'},
+ {name: 'Middlesbrough'},
+ {name: 'Milton Keynes'},
+ {name: 'Monmouthshire'},
+ {name: 'Moray'},
+ {name: 'Norfolk'},
+ {name: 'North East Lincolnshire'},
+ {name: 'North Lincolnshire'},
+ {name: 'North Somerset'},
+ {name: 'North Yorkshire'},
+ {name: 'Northamptonshire'},
+ {name: 'Northumberland'},
+ {name: 'Nottingham'},
+ {name: 'Nottinghamshire'},
+ {name: 'Oxfordshire'},
+ {name: 'Pembrokeshire'},
+ {name: 'Perth and Kinross'},
+ {name: 'Peterborough'},
+ {name: 'Plymouth'},
+ {name: 'Poole'},
+ {name: 'Portsmouth'},
+ {name: 'Powys'},
+ {name: 'Reading'},
+ {name: 'Redcar and Cleveland'},
+ {name: 'Rutland'},
+ {name: 'Scottish Borders'},
+ {name: 'Shropshire'},
+ {name: 'Slough'},
+ {name: 'Somerset'},
+ {name: 'South Glamorgan'},
+ {name: 'South Gloucestershire'},
+ {name: 'South Yorkshire'},
+ {name: 'Southampton'},
+ {name: 'Southend-on-Sea'},
+ {name: 'Staffordshire'},
+ {name: 'Stirlingshire'},
+ {name: 'Stockton-on-Tees'},
+ {name: 'Stoke-on-Trent'},
+ {name: 'Strathclyde'},
+ {name: 'Suffolk'},
+ {name: 'Surrey'},
+ {name: 'Swindon'},
+ {name: 'Telford and Wrekin'},
+ {name: 'Thurrock'},
+ {name: 'Torbay'},
+ {name: 'Tyne and Wear'},
+ {name: 'Warrington'},
+ {name: 'Warwickshire'},
+ {name: 'West Berkshire'},
+ {name: 'West Glamorgan'},
+ {name: 'West Lothian'},
+ {name: 'West Midlands'},
+ {name: 'West Sussex'},
+ {name: 'West Yorkshire'},
+ {name: 'Western Isles'},
+ {name: 'Wiltshire'},
+ {name: 'Windsor and Maidenhead'},
+ {name: 'Wokingham'},
+ {name: 'Worcestershire'},
+ {name: 'Wrexham'},
+ {name: 'York'}]
+ },
+ provinces: {
+ "ca": [
+ {name: 'Alberta', abbreviation: 'AB'},
+ {name: 'British Columbia', abbreviation: 'BC'},
+ {name: 'Manitoba', abbreviation: 'MB'},
+ {name: 'New Brunswick', abbreviation: 'NB'},
+ {name: 'Newfoundland and Labrador', abbreviation: 'NL'},
+ {name: 'Nova Scotia', abbreviation: 'NS'},
+ {name: 'Ontario', abbreviation: 'ON'},
+ {name: 'Prince Edward Island', abbreviation: 'PE'},
+ {name: 'Quebec', abbreviation: 'QC'},
+ {name: 'Saskatchewan', abbreviation: 'SK'},
+
+ // The case could be made that the following are not actually provinces
+ // since they are technically considered "territories" however they all
+ // look the same on an envelope!
+ {name: 'Northwest Territories', abbreviation: 'NT'},
+ {name: 'Nunavut', abbreviation: 'NU'},
+ {name: 'Yukon', abbreviation: 'YT'}
+ ],
+ "it": [
+ { name: "Agrigento", abbreviation: "AG", code: 84 },
+ { name: "Alessandria", abbreviation: "AL", code: 6 },
+ { name: "Ancona", abbreviation: "AN", code: 42 },
+ { name: "Aosta", abbreviation: "AO", code: 7 },
+ { name: "L'Aquila", abbreviation: "AQ", code: 66 },
+ { name: "Arezzo", abbreviation: "AR", code: 51 },
+ { name: "Ascoli-Piceno", abbreviation: "AP", code: 44 },
+ { name: "Asti", abbreviation: "AT", code: 5 },
+ { name: "Avellino", abbreviation: "AV", code: 64 },
+ { name: "Bari", abbreviation: "BA", code: 72 },
+ { name: "Barletta-Andria-Trani", abbreviation: "BT", code: 72 },
+ { name: "Belluno", abbreviation: "BL", code: 25 },
+ { name: "Benevento", abbreviation: "BN", code: 62 },
+ { name: "Bergamo", abbreviation: "BG", code: 16 },
+ { name: "Biella", abbreviation: "BI", code: 96 },
+ { name: "Bologna", abbreviation: "BO", code: 37 },
+ { name: "Bolzano", abbreviation: "BZ", code: 21 },
+ { name: "Brescia", abbreviation: "BS", code: 17 },
+ { name: "Brindisi", abbreviation: "BR", code: 74 },
+ { name: "Cagliari", abbreviation: "CA", code: 92 },
+ { name: "Caltanissetta", abbreviation: "CL", code: 85 },
+ { name: "Campobasso", abbreviation: "CB", code: 70 },
+ { name: "Carbonia Iglesias", abbreviation: "CI", code: 70 },
+ { name: "Caserta", abbreviation: "CE", code: 61 },
+ { name: "Catania", abbreviation: "CT", code: 87 },
+ { name: "Catanzaro", abbreviation: "CZ", code: 79 },
+ { name: "Chieti", abbreviation: "CH", code: 69 },
+ { name: "Como", abbreviation: "CO", code: 13 },
+ { name: "Cosenza", abbreviation: "CS", code: 78 },
+ { name: "Cremona", abbreviation: "CR", code: 19 },
+ { name: "Crotone", abbreviation: "KR", code: 101 },
+ { name: "Cuneo", abbreviation: "CN", code: 4 },
+ { name: "Enna", abbreviation: "EN", code: 86 },
+ { name: "Fermo", abbreviation: "FM", code: 86 },
+ { name: "Ferrara", abbreviation: "FE", code: 38 },
+ { name: "Firenze", abbreviation: "FI", code: 48 },
+ { name: "Foggia", abbreviation: "FG", code: 71 },
+ { name: "Forli-Cesena", abbreviation: "FC", code: 71 },
+ { name: "Frosinone", abbreviation: "FR", code: 60 },
+ { name: "Genova", abbreviation: "GE", code: 10 },
+ { name: "Gorizia", abbreviation: "GO", code: 31 },
+ { name: "Grosseto", abbreviation: "GR", code: 53 },
+ { name: "Imperia", abbreviation: "IM", code: 8 },
+ { name: "Isernia", abbreviation: "IS", code: 94 },
+ { name: "La-Spezia", abbreviation: "SP", code: 66 },
+ { name: "Latina", abbreviation: "LT", code: 59 },
+ { name: "Lecce", abbreviation: "LE", code: 75 },
+ { name: "Lecco", abbreviation: "LC", code: 97 },
+ { name: "Livorno", abbreviation: "LI", code: 49 },
+ { name: "Lodi", abbreviation: "LO", code: 98 },
+ { name: "Lucca", abbreviation: "LU", code: 46 },
+ { name: "Macerata", abbreviation: "MC", code: 43 },
+ { name: "Mantova", abbreviation: "MN", code: 20 },
+ { name: "Massa-Carrara", abbreviation: "MS", code: 45 },
+ { name: "Matera", abbreviation: "MT", code: 77 },
+ { name: "Medio Campidano", abbreviation: "VS", code: 77 },
+ { name: "Messina", abbreviation: "ME", code: 83 },
+ { name: "Milano", abbreviation: "MI", code: 15 },
+ { name: "Modena", abbreviation: "MO", code: 36 },
+ { name: "Monza-Brianza", abbreviation: "MB", code: 36 },
+ { name: "Napoli", abbreviation: "NA", code: 63 },
+ { name: "Novara", abbreviation: "NO", code: 3 },
+ { name: "Nuoro", abbreviation: "NU", code: 91 },
+ { name: "Ogliastra", abbreviation: "OG", code: 91 },
+ { name: "Olbia Tempio", abbreviation: "OT", code: 91 },
+ { name: "Oristano", abbreviation: "OR", code: 95 },
+ { name: "Padova", abbreviation: "PD", code: 28 },
+ { name: "Palermo", abbreviation: "PA", code: 82 },
+ { name: "Parma", abbreviation: "PR", code: 34 },
+ { name: "Pavia", abbreviation: "PV", code: 18 },
+ { name: "Perugia", abbreviation: "PG", code: 54 },
+ { name: "Pesaro-Urbino", abbreviation: "PU", code: 41 },
+ { name: "Pescara", abbreviation: "PE", code: 68 },
+ { name: "Piacenza", abbreviation: "PC", code: 33 },
+ { name: "Pisa", abbreviation: "PI", code: 50 },
+ { name: "Pistoia", abbreviation: "PT", code: 47 },
+ { name: "Pordenone", abbreviation: "PN", code: 93 },
+ { name: "Potenza", abbreviation: "PZ", code: 76 },
+ { name: "Prato", abbreviation: "PO", code: 100 },
+ { name: "Ragusa", abbreviation: "RG", code: 88 },
+ { name: "Ravenna", abbreviation: "RA", code: 39 },
+ { name: "Reggio-Calabria", abbreviation: "RC", code: 35 },
+ { name: "Reggio-Emilia", abbreviation: "RE", code: 35 },
+ { name: "Rieti", abbreviation: "RI", code: 57 },
+ { name: "Rimini", abbreviation: "RN", code: 99 },
+ { name: "Roma", abbreviation: "Roma", code: 58 },
+ { name: "Rovigo", abbreviation: "RO", code: 29 },
+ { name: "Salerno", abbreviation: "SA", code: 65 },
+ { name: "Sassari", abbreviation: "SS", code: 90 },
+ { name: "Savona", abbreviation: "SV", code: 9 },
+ { name: "Siena", abbreviation: "SI", code: 52 },
+ { name: "Siracusa", abbreviation: "SR", code: 89 },
+ { name: "Sondrio", abbreviation: "SO", code: 14 },
+ { name: "Taranto", abbreviation: "TA", code: 73 },
+ { name: "Teramo", abbreviation: "TE", code: 67 },
+ { name: "Terni", abbreviation: "TR", code: 55 },
+ { name: "Torino", abbreviation: "TO", code: 1 },
+ { name: "Trapani", abbreviation: "TP", code: 81 },
+ { name: "Trento", abbreviation: "TN", code: 22 },
+ { name: "Treviso", abbreviation: "TV", code: 26 },
+ { name: "Trieste", abbreviation: "TS", code: 32 },
+ { name: "Udine", abbreviation: "UD", code: 30 },
+ { name: "Varese", abbreviation: "VA", code: 12 },
+ { name: "Venezia", abbreviation: "VE", code: 27 },
+ { name: "Verbania", abbreviation: "VB", code: 27 },
+ { name: "Vercelli", abbreviation: "VC", code: 2 },
+ { name: "Verona", abbreviation: "VR", code: 23 },
+ { name: "Vibo-Valentia", abbreviation: "VV", code: 102 },
+ { name: "Vicenza", abbreviation: "VI", code: 24 },
+ { name: "Viterbo", abbreviation: "VT", code: 56 }
+ ]
+ },
+
+ // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json
+ nationalities: [
+ {name: 'Afghan'},
+ {name: 'Albanian'},
+ {name: 'Algerian'},
+ {name: 'American'},
+ {name: 'Andorran'},
+ {name: 'Angolan'},
+ {name: 'Antiguans'},
+ {name: 'Argentinean'},
+ {name: 'Armenian'},
+ {name: 'Australian'},
+ {name: 'Austrian'},
+ {name: 'Azerbaijani'},
+ {name: 'Bahami'},
+ {name: 'Bahraini'},
+ {name: 'Bangladeshi'},
+ {name: 'Barbadian'},
+ {name: 'Barbudans'},
+ {name: 'Batswana'},
+ {name: 'Belarusian'},
+ {name: 'Belgian'},
+ {name: 'Belizean'},
+ {name: 'Beninese'},
+ {name: 'Bhutanese'},
+ {name: 'Bolivian'},
+ {name: 'Bosnian'},
+ {name: 'Brazilian'},
+ {name: 'British'},
+ {name: 'Bruneian'},
+ {name: 'Bulgarian'},
+ {name: 'Burkinabe'},
+ {name: 'Burmese'},
+ {name: 'Burundian'},
+ {name: 'Cambodian'},
+ {name: 'Cameroonian'},
+ {name: 'Canadian'},
+ {name: 'Cape Verdean'},
+ {name: 'Central African'},
+ {name: 'Chadian'},
+ {name: 'Chilean'},
+ {name: 'Chinese'},
+ {name: 'Colombian'},
+ {name: 'Comoran'},
+ {name: 'Congolese'},
+ {name: 'Costa Rican'},
+ {name: 'Croatian'},
+ {name: 'Cuban'},
+ {name: 'Cypriot'},
+ {name: 'Czech'},
+ {name: 'Danish'},
+ {name: 'Djibouti'},
+ {name: 'Dominican'},
+ {name: 'Dutch'},
+ {name: 'East Timorese'},
+ {name: 'Ecuadorean'},
+ {name: 'Egyptian'},
+ {name: 'Emirian'},
+ {name: 'Equatorial Guinean'},
+ {name: 'Eritrean'},
+ {name: 'Estonian'},
+ {name: 'Ethiopian'},
+ {name: 'Fijian'},
+ {name: 'Filipino'},
+ {name: 'Finnish'},
+ {name: 'French'},
+ {name: 'Gabonese'},
+ {name: 'Gambian'},
+ {name: 'Georgian'},
+ {name: 'German'},
+ {name: 'Ghanaian'},
+ {name: 'Greek'},
+ {name: 'Grenadian'},
+ {name: 'Guatemalan'},
+ {name: 'Guinea-Bissauan'},
+ {name: 'Guinean'},
+ {name: 'Guyanese'},
+ {name: 'Haitian'},
+ {name: 'Herzegovinian'},
+ {name: 'Honduran'},
+ {name: 'Hungarian'},
+ {name: 'I-Kiribati'},
+ {name: 'Icelander'},
+ {name: 'Indian'},
+ {name: 'Indonesian'},
+ {name: 'Iranian'},
+ {name: 'Iraqi'},
+ {name: 'Irish'},
+ {name: 'Israeli'},
+ {name: 'Italian'},
+ {name: 'Ivorian'},
+ {name: 'Jamaican'},
+ {name: 'Japanese'},
+ {name: 'Jordanian'},
+ {name: 'Kazakhstani'},
+ {name: 'Kenyan'},
+ {name: 'Kittian and Nevisian'},
+ {name: 'Kuwaiti'},
+ {name: 'Kyrgyz'},
+ {name: 'Laotian'},
+ {name: 'Latvian'},
+ {name: 'Lebanese'},
+ {name: 'Liberian'},
+ {name: 'Libyan'},
+ {name: 'Liechtensteiner'},
+ {name: 'Lithuanian'},
+ {name: 'Luxembourger'},
+ {name: 'Macedonian'},
+ {name: 'Malagasy'},
+ {name: 'Malawian'},
+ {name: 'Malaysian'},
+ {name: 'Maldivan'},
+ {name: 'Malian'},
+ {name: 'Maltese'},
+ {name: 'Marshallese'},
+ {name: 'Mauritanian'},
+ {name: 'Mauritian'},
+ {name: 'Mexican'},
+ {name: 'Micronesian'},
+ {name: 'Moldovan'},
+ {name: 'Monacan'},
+ {name: 'Mongolian'},
+ {name: 'Moroccan'},
+ {name: 'Mosotho'},
+ {name: 'Motswana'},
+ {name: 'Mozambican'},
+ {name: 'Namibian'},
+ {name: 'Nauruan'},
+ {name: 'Nepalese'},
+ {name: 'New Zealander'},
+ {name: 'Nicaraguan'},
+ {name: 'Nigerian'},
+ {name: 'Nigerien'},
+ {name: 'North Korean'},
+ {name: 'Northern Irish'},
+ {name: 'Norwegian'},
+ {name: 'Omani'},
+ {name: 'Pakistani'},
+ {name: 'Palauan'},
+ {name: 'Panamanian'},
+ {name: 'Papua New Guinean'},
+ {name: 'Paraguayan'},
+ {name: 'Peruvian'},
+ {name: 'Polish'},
+ {name: 'Portuguese'},
+ {name: 'Qatari'},
+ {name: 'Romani'},
+ {name: 'Russian'},
+ {name: 'Rwandan'},
+ {name: 'Saint Lucian'},
+ {name: 'Salvadoran'},
+ {name: 'Samoan'},
+ {name: 'San Marinese'},
+ {name: 'Sao Tomean'},
+ {name: 'Saudi'},
+ {name: 'Scottish'},
+ {name: 'Senegalese'},
+ {name: 'Serbian'},
+ {name: 'Seychellois'},
+ {name: 'Sierra Leonean'},
+ {name: 'Singaporean'},
+ {name: 'Slovakian'},
+ {name: 'Slovenian'},
+ {name: 'Solomon Islander'},
+ {name: 'Somali'},
+ {name: 'South African'},
+ {name: 'South Korean'},
+ {name: 'Spanish'},
+ {name: 'Sri Lankan'},
+ {name: 'Sudanese'},
+ {name: 'Surinamer'},
+ {name: 'Swazi'},
+ {name: 'Swedish'},
+ {name: 'Swiss'},
+ {name: 'Syrian'},
+ {name: 'Taiwanese'},
+ {name: 'Tajik'},
+ {name: 'Tanzanian'},
+ {name: 'Thai'},
+ {name: 'Togolese'},
+ {name: 'Tongan'},
+ {name: 'Trinidadian or Tobagonian'},
+ {name: 'Tunisian'},
+ {name: 'Turkish'},
+ {name: 'Tuvaluan'},
+ {name: 'Ugandan'},
+ {name: 'Ukrainian'},
+ {name: 'Uruguaya'},
+ {name: 'Uzbekistani'},
+ {name: 'Venezuela'},
+ {name: 'Vietnamese'},
+ {name: 'Wels'},
+ {name: 'Yemenit'},
+ {name: 'Zambia'},
+ {name: 'Zimbabwe'},
+ ],
+ // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)
+ locale_languages: [
+ "aa",
+ "ab",
+ "ae",
+ "af",
+ "ak",
+ "am",
+ "an",
+ "ar",
+ "as",
+ "av",
+ "ay",
+ "az",
+ "ba",
+ "be",
+ "bg",
+ "bh",
+ "bi",
+ "bm",
+ "bn",
+ "bo",
+ "br",
+ "bs",
+ "ca",
+ "ce",
+ "ch",
+ "co",
+ "cr",
+ "cs",
+ "cu",
+ "cv",
+ "cy",
+ "da",
+ "de",
+ "dv",
+ "dz",
+ "ee",
+ "el",
+ "en",
+ "eo",
+ "es",
+ "et",
+ "eu",
+ "fa",
+ "ff",
+ "fi",
+ "fj",
+ "fo",
+ "fr",
+ "fy",
+ "ga",
+ "gd",
+ "gl",
+ "gn",
+ "gu",
+ "gv",
+ "ha",
+ "he",
+ "hi",
+ "ho",
+ "hr",
+ "ht",
+ "hu",
+ "hy",
+ "hz",
+ "ia",
+ "id",
+ "ie",
+ "ig",
+ "ii",
+ "ik",
+ "io",
+ "is",
+ "it",
+ "iu",
+ "ja",
+ "jv",
+ "ka",
+ "kg",
+ "ki",
+ "kj",
+ "kk",
+ "kl",
+ "km",
+ "kn",
+ "ko",
+ "kr",
+ "ks",
+ "ku",
+ "kv",
+ "kw",
+ "ky",
+ "la",
+ "lb",
+ "lg",
+ "li",
+ "ln",
+ "lo",
+ "lt",
+ "lu",
+ "lv",
+ "mg",
+ "mh",
+ "mi",
+ "mk",
+ "ml",
+ "mn",
+ "mr",
+ "ms",
+ "mt",
+ "my",
+ "na",
+ "nb",
+ "nd",
+ "ne",
+ "ng",
+ "nl",
+ "nn",
+ "no",
+ "nr",
+ "nv",
+ "ny",
+ "oc",
+ "oj",
+ "om",
+ "or",
+ "os",
+ "pa",
+ "pi",
+ "pl",
+ "ps",
+ "pt",
+ "qu",
+ "rm",
+ "rn",
+ "ro",
+ "ru",
+ "rw",
+ "sa",
+ "sc",
+ "sd",
+ "se",
+ "sg",
+ "si",
+ "sk",
+ "sl",
+ "sm",
+ "sn",
+ "so",
+ "sq",
+ "sr",
+ "ss",
+ "st",
+ "su",
+ "sv",
+ "sw",
+ "ta",
+ "te",
+ "tg",
+ "th",
+ "ti",
+ "tk",
+ "tl",
+ "tn",
+ "to",
+ "tr",
+ "ts",
+ "tt",
+ "tw",
+ "ty",
+ "ug",
+ "uk",
+ "ur",
+ "uz",
+ "ve",
+ "vi",
+ "vo",
+ "wa",
+ "wo",
+ "xh",
+ "yi",
+ "yo",
+ "za",
+ "zh",
+ "zu"
+ ],
+
+ // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)
+ locale_regions: [
+ "agq-CM",
+ "asa-TZ",
+ "ast-ES",
+ "bas-CM",
+ "bem-ZM",
+ "bez-TZ",
+ "brx-IN",
+ "cgg-UG",
+ "chr-US",
+ "dav-KE",
+ "dje-NE",
+ "dsb-DE",
+ "dua-CM",
+ "dyo-SN",
+ "ebu-KE",
+ "ewo-CM",
+ "fil-PH",
+ "fur-IT",
+ "gsw-CH",
+ "gsw-FR",
+ "gsw-LI",
+ "guz-KE",
+ "haw-US",
+ "hsb-DE",
+ "jgo-CM",
+ "jmc-TZ",
+ "kab-DZ",
+ "kam-KE",
+ "kde-TZ",
+ "kea-CV",
+ "khq-ML",
+ "kkj-CM",
+ "kln-KE",
+ "kok-IN",
+ "ksb-TZ",
+ "ksf-CM",
+ "ksh-DE",
+ "lag-TZ",
+ "lkt-US",
+ "luo-KE",
+ "luy-KE",
+ "mas-KE",
+ "mas-TZ",
+ "mer-KE",
+ "mfe-MU",
+ "mgh-MZ",
+ "mgo-CM",
+ "mua-CM",
+ "naq-NA",
+ "nmg-CM",
+ "nnh-CM",
+ "nus-SD",
+ "nyn-UG",
+ "rof-TZ",
+ "rwk-TZ",
+ "sah-RU",
+ "saq-KE",
+ "sbp-TZ",
+ "seh-MZ",
+ "ses-ML",
+ "shi-Latn",
+ "shi-Latn-MA",
+ "shi-Tfng",
+ "shi-Tfng-MA",
+ "smn-FI",
+ "teo-KE",
+ "teo-UG",
+ "twq-NE",
+ "tzm-Latn",
+ "tzm-Latn-MA",
+ "vai-Latn",
+ "vai-Latn-LR",
+ "vai-Vaii",
+ "vai-Vaii-LR",
+ "vun-TZ",
+ "wae-CH",
+ "xog-UG",
+ "yav-CM",
+ "zgh-MA",
+ "af-NA",
+ "af-ZA",
+ "ak-GH",
+ "am-ET",
+ "ar-001",
+ "ar-AE",
+ "ar-BH",
+ "ar-DJ",
+ "ar-DZ",
+ "ar-EG",
+ "ar-EH",
+ "ar-ER",
+ "ar-IL",
+ "ar-IQ",
+ "ar-JO",
+ "ar-KM",
+ "ar-KW",
+ "ar-LB",
+ "ar-LY",
+ "ar-MA",
+ "ar-MR",
+ "ar-OM",
+ "ar-PS",
+ "ar-QA",
+ "ar-SA",
+ "ar-SD",
+ "ar-SO",
+ "ar-SS",
+ "ar-SY",
+ "ar-TD",
+ "ar-TN",
+ "ar-YE",
+ "as-IN",
+ "az-Cyrl",
+ "az-Cyrl-AZ",
+ "az-Latn",
+ "az-Latn-AZ",
+ "be-BY",
+ "bg-BG",
+ "bm-Latn",
+ "bm-Latn-ML",
+ "bn-BD",
+ "bn-IN",
+ "bo-CN",
+ "bo-IN",
+ "br-FR",
+ "bs-Cyrl",
+ "bs-Cyrl-BA",
+ "bs-Latn",
+ "bs-Latn-BA",
+ "ca-AD",
+ "ca-ES",
+ "ca-ES-VALENCIA",
+ "ca-FR",
+ "ca-IT",
+ "cs-CZ",
+ "cy-GB",
+ "da-DK",
+ "da-GL",
+ "de-AT",
+ "de-BE",
+ "de-CH",
+ "de-DE",
+ "de-LI",
+ "de-LU",
+ "dz-BT",
+ "ee-GH",
+ "ee-TG",
+ "el-CY",
+ "el-GR",
+ "en-001",
+ "en-150",
+ "en-AG",
+ "en-AI",
+ "en-AS",
+ "en-AU",
+ "en-BB",
+ "en-BE",
+ "en-BM",
+ "en-BS",
+ "en-BW",
+ "en-BZ",
+ "en-CA",
+ "en-CC",
+ "en-CK",
+ "en-CM",
+ "en-CX",
+ "en-DG",
+ "en-DM",
+ "en-ER",
+ "en-FJ",
+ "en-FK",
+ "en-FM",
+ "en-GB",
+ "en-GD",
+ "en-GG",
+ "en-GH",
+ "en-GI",
+ "en-GM",
+ "en-GU",
+ "en-GY",
+ "en-HK",
+ "en-IE",
+ "en-IM",
+ "en-IN",
+ "en-IO",
+ "en-JE",
+ "en-JM",
+ "en-KE",
+ "en-KI",
+ "en-KN",
+ "en-KY",
+ "en-LC",
+ "en-LR",
+ "en-LS",
+ "en-MG",
+ "en-MH",
+ "en-MO",
+ "en-MP",
+ "en-MS",
+ "en-MT",
+ "en-MU",
+ "en-MW",
+ "en-MY",
+ "en-NA",
+ "en-NF",
+ "en-NG",
+ "en-NR",
+ "en-NU",
+ "en-NZ",
+ "en-PG",
+ "en-PH",
+ "en-PK",
+ "en-PN",
+ "en-PR",
+ "en-PW",
+ "en-RW",
+ "en-SB",
+ "en-SC",
+ "en-SD",
+ "en-SG",
+ "en-SH",
+ "en-SL",
+ "en-SS",
+ "en-SX",
+ "en-SZ",
+ "en-TC",
+ "en-TK",
+ "en-TO",
+ "en-TT",
+ "en-TV",
+ "en-TZ",
+ "en-UG",
+ "en-UM",
+ "en-US",
+ "en-US-POSIX",
+ "en-VC",
+ "en-VG",
+ "en-VI",
+ "en-VU",
+ "en-WS",
+ "en-ZA",
+ "en-ZM",
+ "en-ZW",
+ "eo-001",
+ "es-419",
+ "es-AR",
+ "es-BO",
+ "es-CL",
+ "es-CO",
+ "es-CR",
+ "es-CU",
+ "es-DO",
+ "es-EA",
+ "es-EC",
+ "es-ES",
+ "es-GQ",
+ "es-GT",
+ "es-HN",
+ "es-IC",
+ "es-MX",
+ "es-NI",
+ "es-PA",
+ "es-PE",
+ "es-PH",
+ "es-PR",
+ "es-PY",
+ "es-SV",
+ "es-US",
+ "es-UY",
+ "es-VE",
+ "et-EE",
+ "eu-ES",
+ "fa-AF",
+ "fa-IR",
+ "ff-CM",
+ "ff-GN",
+ "ff-MR",
+ "ff-SN",
+ "fi-FI",
+ "fo-FO",
+ "fr-BE",
+ "fr-BF",
+ "fr-BI",
+ "fr-BJ",
+ "fr-BL",
+ "fr-CA",
+ "fr-CD",
+ "fr-CF",
+ "fr-CG",
+ "fr-CH",
+ "fr-CI",
+ "fr-CM",
+ "fr-DJ",
+ "fr-DZ",
+ "fr-FR",
+ "fr-GA",
+ "fr-GF",
+ "fr-GN",
+ "fr-GP",
+ "fr-GQ",
+ "fr-HT",
+ "fr-KM",
+ "fr-LU",
+ "fr-MA",
+ "fr-MC",
+ "fr-MF",
+ "fr-MG",
+ "fr-ML",
+ "fr-MQ",
+ "fr-MR",
+ "fr-MU",
+ "fr-NC",
+ "fr-NE",
+ "fr-PF",
+ "fr-PM",
+ "fr-RE",
+ "fr-RW",
+ "fr-SC",
+ "fr-SN",
+ "fr-SY",
+ "fr-TD",
+ "fr-TG",
+ "fr-TN",
+ "fr-VU",
+ "fr-WF",
+ "fr-YT",
+ "fy-NL",
+ "ga-IE",
+ "gd-GB",
+ "gl-ES",
+ "gu-IN",
+ "gv-IM",
+ "ha-Latn",
+ "ha-Latn-GH",
+ "ha-Latn-NE",
+ "ha-Latn-NG",
+ "he-IL",
+ "hi-IN",
+ "hr-BA",
+ "hr-HR",
+ "hu-HU",
+ "hy-AM",
+ "id-ID",
+ "ig-NG",
+ "ii-CN",
+ "is-IS",
+ "it-CH",
+ "it-IT",
+ "it-SM",
+ "ja-JP",
+ "ka-GE",
+ "ki-KE",
+ "kk-Cyrl",
+ "kk-Cyrl-KZ",
+ "kl-GL",
+ "km-KH",
+ "kn-IN",
+ "ko-KP",
+ "ko-KR",
+ "ks-Arab",
+ "ks-Arab-IN",
+ "kw-GB",
+ "ky-Cyrl",
+ "ky-Cyrl-KG",
+ "lb-LU",
+ "lg-UG",
+ "ln-AO",
+ "ln-CD",
+ "ln-CF",
+ "ln-CG",
+ "lo-LA",
+ "lt-LT",
+ "lu-CD",
+ "lv-LV",
+ "mg-MG",
+ "mk-MK",
+ "ml-IN",
+ "mn-Cyrl",
+ "mn-Cyrl-MN",
+ "mr-IN",
+ "ms-Latn",
+ "ms-Latn-BN",
+ "ms-Latn-MY",
+ "ms-Latn-SG",
+ "mt-MT",
+ "my-MM",
+ "nb-NO",
+ "nb-SJ",
+ "nd-ZW",
+ "ne-IN",
+ "ne-NP",
+ "nl-AW",
+ "nl-BE",
+ "nl-BQ",
+ "nl-CW",
+ "nl-NL",
+ "nl-SR",
+ "nl-SX",
+ "nn-NO",
+ "om-ET",
+ "om-KE",
+ "or-IN",
+ "os-GE",
+ "os-RU",
+ "pa-Arab",
+ "pa-Arab-PK",
+ "pa-Guru",
+ "pa-Guru-IN",
+ "pl-PL",
+ "ps-AF",
+ "pt-AO",
+ "pt-BR",
+ "pt-CV",
+ "pt-GW",
+ "pt-MO",
+ "pt-MZ",
+ "pt-PT",
+ "pt-ST",
+ "pt-TL",
+ "qu-BO",
+ "qu-EC",
+ "qu-PE",
+ "rm-CH",
+ "rn-BI",
+ "ro-MD",
+ "ro-RO",
+ "ru-BY",
+ "ru-KG",
+ "ru-KZ",
+ "ru-MD",
+ "ru-RU",
+ "ru-UA",
+ "rw-RW",
+ "se-FI",
+ "se-NO",
+ "se-SE",
+ "sg-CF",
+ "si-LK",
+ "sk-SK",
+ "sl-SI",
+ "sn-ZW",
+ "so-DJ",
+ "so-ET",
+ "so-KE",
+ "so-SO",
+ "sq-AL",
+ "sq-MK",
+ "sq-XK",
+ "sr-Cyrl",
+ "sr-Cyrl-BA",
+ "sr-Cyrl-ME",
+ "sr-Cyrl-RS",
+ "sr-Cyrl-XK",
+ "sr-Latn",
+ "sr-Latn-BA",
+ "sr-Latn-ME",
+ "sr-Latn-RS",
+ "sr-Latn-XK",
+ "sv-AX",
+ "sv-FI",
+ "sv-SE",
+ "sw-CD",
+ "sw-KE",
+ "sw-TZ",
+ "sw-UG",
+ "ta-IN",
+ "ta-LK",
+ "ta-MY",
+ "ta-SG",
+ "te-IN",
+ "th-TH",
+ "ti-ER",
+ "ti-ET",
+ "to-TO",
+ "tr-CY",
+ "tr-TR",
+ "ug-Arab",
+ "ug-Arab-CN",
+ "uk-UA",
+ "ur-IN",
+ "ur-PK",
+ "uz-Arab",
+ "uz-Arab-AF",
+ "uz-Cyrl",
+ "uz-Cyrl-UZ",
+ "uz-Latn",
+ "uz-Latn-UZ",
+ "vi-VN",
+ "yi-001",
+ "yo-BJ",
+ "yo-NG",
+ "zh-Hans",
+ "zh-Hans-CN",
+ "zh-Hans-HK",
+ "zh-Hans-MO",
+ "zh-Hans-SG",
+ "zh-Hant",
+ "zh-Hant-HK",
+ "zh-Hant-MO",
+ "zh-Hant-TW",
+ "zu-ZA"
+ ],
+
+ us_states_and_dc: [
+ {name: 'Alabama', abbreviation: 'AL'},
+ {name: 'Alaska', abbreviation: 'AK'},
+ {name: 'Arizona', abbreviation: 'AZ'},
+ {name: 'Arkansas', abbreviation: 'AR'},
+ {name: 'California', abbreviation: 'CA'},
+ {name: 'Colorado', abbreviation: 'CO'},
+ {name: 'Connecticut', abbreviation: 'CT'},
+ {name: 'Delaware', abbreviation: 'DE'},
+ {name: 'District of Columbia', abbreviation: 'DC'},
+ {name: 'Florida', abbreviation: 'FL'},
+ {name: 'Georgia', abbreviation: 'GA'},
+ {name: 'Hawaii', abbreviation: 'HI'},
+ {name: 'Idaho', abbreviation: 'ID'},
+ {name: 'Illinois', abbreviation: 'IL'},
+ {name: 'Indiana', abbreviation: 'IN'},
+ {name: 'Iowa', abbreviation: 'IA'},
+ {name: 'Kansas', abbreviation: 'KS'},
+ {name: 'Kentucky', abbreviation: 'KY'},
+ {name: 'Louisiana', abbreviation: 'LA'},
+ {name: 'Maine', abbreviation: 'ME'},
+ {name: 'Maryland', abbreviation: 'MD'},
+ {name: 'Massachusetts', abbreviation: 'MA'},
+ {name: 'Michigan', abbreviation: 'MI'},
+ {name: 'Minnesota', abbreviation: 'MN'},
+ {name: 'Mississippi', abbreviation: 'MS'},
+ {name: 'Missouri', abbreviation: 'MO'},
+ {name: 'Montana', abbreviation: 'MT'},
+ {name: 'Nebraska', abbreviation: 'NE'},
+ {name: 'Nevada', abbreviation: 'NV'},
+ {name: 'New Hampshire', abbreviation: 'NH'},
+ {name: 'New Jersey', abbreviation: 'NJ'},
+ {name: 'New Mexico', abbreviation: 'NM'},
+ {name: 'New York', abbreviation: 'NY'},
+ {name: 'North Carolina', abbreviation: 'NC'},
+ {name: 'North Dakota', abbreviation: 'ND'},
+ {name: 'Ohio', abbreviation: 'OH'},
+ {name: 'Oklahoma', abbreviation: 'OK'},
+ {name: 'Oregon', abbreviation: 'OR'},
+ {name: 'Pennsylvania', abbreviation: 'PA'},
+ {name: 'Rhode Island', abbreviation: 'RI'},
+ {name: 'South Carolina', abbreviation: 'SC'},
+ {name: 'South Dakota', abbreviation: 'SD'},
+ {name: 'Tennessee', abbreviation: 'TN'},
+ {name: 'Texas', abbreviation: 'TX'},
+ {name: 'Utah', abbreviation: 'UT'},
+ {name: 'Vermont', abbreviation: 'VT'},
+ {name: 'Virginia', abbreviation: 'VA'},
+ {name: 'Washington', abbreviation: 'WA'},
+ {name: 'West Virginia', abbreviation: 'WV'},
+ {name: 'Wisconsin', abbreviation: 'WI'},
+ {name: 'Wyoming', abbreviation: 'WY'}
+ ],
+
+ territories: [
+ {name: 'American Samoa', abbreviation: 'AS'},
+ {name: 'Federated States of Micronesia', abbreviation: 'FM'},
+ {name: 'Guam', abbreviation: 'GU'},
+ {name: 'Marshall Islands', abbreviation: 'MH'},
+ {name: 'Northern Mariana Islands', abbreviation: 'MP'},
+ {name: 'Puerto Rico', abbreviation: 'PR'},
+ {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}
+ ],
+
+ armed_forces: [
+ {name: 'Armed Forces Europe', abbreviation: 'AE'},
+ {name: 'Armed Forces Pacific', abbreviation: 'AP'},
+ {name: 'Armed Forces the Americas', abbreviation: 'AA'}
+ ],
+
+ country_regions: {
+ it: [
+ { name: "Valle d'Aosta", abbreviation: "VDA" },
+ { name: "Piemonte", abbreviation: "PIE" },
+ { name: "Lombardia", abbreviation: "LOM" },
+ { name: "Veneto", abbreviation: "VEN" },
+ { name: "Trentino Alto Adige", abbreviation: "TAA" },
+ { name: "Friuli Venezia Giulia", abbreviation: "FVG" },
+ { name: "Liguria", abbreviation: "LIG" },
+ { name: "Emilia Romagna", abbreviation: "EMR" },
+ { name: "Toscana", abbreviation: "TOS" },
+ { name: "Umbria", abbreviation: "UMB" },
+ { name: "Marche", abbreviation: "MAR" },
+ { name: "Abruzzo", abbreviation: "ABR" },
+ { name: "Lazio", abbreviation: "LAZ" },
+ { name: "Campania", abbreviation: "CAM" },
+ { name: "Puglia", abbreviation: "PUG" },
+ { name: "Basilicata", abbreviation: "BAS" },
+ { name: "Molise", abbreviation: "MOL" },
+ { name: "Calabria", abbreviation: "CAL" },
+ { name: "Sicilia", abbreviation: "SIC" },
+ { name: "Sardegna", abbreviation: "SAR" }
+ ],
+ mx: [
+ { name: 'Aguascalientes', abbreviation: 'AGU' },
+ { name: 'Baja California', abbreviation: 'BCN' },
+ { name: 'Baja California Sur', abbreviation: 'BCS' },
+ { name: 'Campeche', abbreviation: 'CAM' },
+ { name: 'Chiapas', abbreviation: 'CHP' },
+ { name: 'Chihuahua', abbreviation: 'CHH' },
+ { name: 'Ciudad de México', abbreviation: 'DIF' },
+ { name: 'Coahuila', abbreviation: 'COA' },
+ { name: 'Colima', abbreviation: 'COL' },
+ { name: 'Durango', abbreviation: 'DUR' },
+ { name: 'Guanajuato', abbreviation: 'GUA' },
+ { name: 'Guerrero', abbreviation: 'GRO' },
+ { name: 'Hidalgo', abbreviation: 'HID' },
+ { name: 'Jalisco', abbreviation: 'JAL' },
+ { name: 'México', abbreviation: 'MEX' },
+ { name: 'Michoacán', abbreviation: 'MIC' },
+ { name: 'Morelos', abbreviation: 'MOR' },
+ { name: 'Nayarit', abbreviation: 'NAY' },
+ { name: 'Nuevo León', abbreviation: 'NLE' },
+ { name: 'Oaxaca', abbreviation: 'OAX' },
+ { name: 'Puebla', abbreviation: 'PUE' },
+ { name: 'Querétaro', abbreviation: 'QUE' },
+ { name: 'Quintana Roo', abbreviation: 'ROO' },
+ { name: 'San Luis Potosí', abbreviation: 'SLP' },
+ { name: 'Sinaloa', abbreviation: 'SIN' },
+ { name: 'Sonora', abbreviation: 'SON' },
+ { name: 'Tabasco', abbreviation: 'TAB' },
+ { name: 'Tamaulipas', abbreviation: 'TAM' },
+ { name: 'Tlaxcala', abbreviation: 'TLA' },
+ { name: 'Veracruz', abbreviation: 'VER' },
+ { name: 'Yucatán', abbreviation: 'YUC' },
+ { name: 'Zacatecas', abbreviation: 'ZAC' }
+ ]
+ },
+
+ street_suffixes: {
+ 'us': [
+ {name: 'Avenue', abbreviation: 'Ave'},
+ {name: 'Boulevard', abbreviation: 'Blvd'},
+ {name: 'Center', abbreviation: 'Ctr'},
+ {name: 'Circle', abbreviation: 'Cir'},
+ {name: 'Court', abbreviation: 'Ct'},
+ {name: 'Drive', abbreviation: 'Dr'},
+ {name: 'Extension', abbreviation: 'Ext'},
+ {name: 'Glen', abbreviation: 'Gln'},
+ {name: 'Grove', abbreviation: 'Grv'},
+ {name: 'Heights', abbreviation: 'Hts'},
+ {name: 'Highway', abbreviation: 'Hwy'},
+ {name: 'Junction', abbreviation: 'Jct'},
+ {name: 'Key', abbreviation: 'Key'},
+ {name: 'Lane', abbreviation: 'Ln'},
+ {name: 'Loop', abbreviation: 'Loop'},
+ {name: 'Manor', abbreviation: 'Mnr'},
+ {name: 'Mill', abbreviation: 'Mill'},
+ {name: 'Park', abbreviation: 'Park'},
+ {name: 'Parkway', abbreviation: 'Pkwy'},
+ {name: 'Pass', abbreviation: 'Pass'},
+ {name: 'Path', abbreviation: 'Path'},
+ {name: 'Pike', abbreviation: 'Pike'},
+ {name: 'Place', abbreviation: 'Pl'},
+ {name: 'Plaza', abbreviation: 'Plz'},
+ {name: 'Point', abbreviation: 'Pt'},
+ {name: 'Ridge', abbreviation: 'Rdg'},
+ {name: 'River', abbreviation: 'Riv'},
+ {name: 'Road', abbreviation: 'Rd'},
+ {name: 'Square', abbreviation: 'Sq'},
+ {name: 'Street', abbreviation: 'St'},
+ {name: 'Terrace', abbreviation: 'Ter'},
+ {name: 'Trail', abbreviation: 'Trl'},
+ {name: 'Turnpike', abbreviation: 'Tpke'},
+ {name: 'View', abbreviation: 'Vw'},
+ {name: 'Way', abbreviation: 'Way'}
+ ],
+ 'it': [
+ { name: 'Accesso', abbreviation: 'Acc.' },
+ { name: 'Alzaia', abbreviation: 'Alz.' },
+ { name: 'Arco', abbreviation: 'Arco' },
+ { name: 'Archivolto', abbreviation: 'Acv.' },
+ { name: 'Arena', abbreviation: 'Arena' },
+ { name: 'Argine', abbreviation: 'Argine' },
+ { name: 'Bacino', abbreviation: 'Bacino' },
+ { name: 'Banchi', abbreviation: 'Banchi' },
+ { name: 'Banchina', abbreviation: 'Ban.' },
+ { name: 'Bastioni', abbreviation: 'Bas.' },
+ { name: 'Belvedere', abbreviation: 'Belv.' },
+ { name: 'Borgata', abbreviation: 'B.ta' },
+ { name: 'Borgo', abbreviation: 'B.go' },
+ { name: 'Calata', abbreviation: 'Cal.' },
+ { name: 'Calle', abbreviation: 'Calle' },
+ { name: 'Campiello', abbreviation: 'Cam.' },
+ { name: 'Campo', abbreviation: 'Cam.' },
+ { name: 'Canale', abbreviation: 'Can.' },
+ { name: 'Carraia', abbreviation: 'Carr.' },
+ { name: 'Cascina', abbreviation: 'Cascina' },
+ { name: 'Case sparse', abbreviation: 'c.s.' },
+ { name: 'Cavalcavia', abbreviation: 'Cv.' },
+ { name: 'Circonvallazione', abbreviation: 'Cv.' },
+ { name: 'Complanare', abbreviation: 'C.re' },
+ { name: 'Contrada', abbreviation: 'C.da' },
+ { name: 'Corso', abbreviation: 'C.so' },
+ { name: 'Corte', abbreviation: 'C.te' },
+ { name: 'Cortile', abbreviation: 'C.le' },
+ { name: 'Diramazione', abbreviation: 'Dir.' },
+ { name: 'Fondaco', abbreviation: 'F.co' },
+ { name: 'Fondamenta', abbreviation: 'F.ta' },
+ { name: 'Fondo', abbreviation: 'F.do' },
+ { name: 'Frazione', abbreviation: 'Fr.' },
+ { name: 'Isola', abbreviation: 'Is.' },
+ { name: 'Largo', abbreviation: 'L.go' },
+ { name: 'Litoranea', abbreviation: 'Lit.' },
+ { name: 'Lungolago', abbreviation: 'L.go lago' },
+ { name: 'Lungo Po', abbreviation: 'l.go Po' },
+ { name: 'Molo', abbreviation: 'Molo' },
+ { name: 'Mura', abbreviation: 'Mura' },
+ { name: 'Passaggio privato', abbreviation: 'pass. priv.' },
+ { name: 'Passeggiata', abbreviation: 'Pass.' },
+ { name: 'Piazza', abbreviation: 'P.zza' },
+ { name: 'Piazzale', abbreviation: 'P.le' },
+ { name: 'Ponte', abbreviation: 'P.te' },
+ { name: 'Portico', abbreviation: 'P.co' },
+ { name: 'Rampa', abbreviation: 'Rampa' },
+ { name: 'Regione', abbreviation: 'Reg.' },
+ { name: 'Rione', abbreviation: 'R.ne' },
+ { name: 'Rio', abbreviation: 'Rio' },
+ { name: 'Ripa', abbreviation: 'Ripa' },
+ { name: 'Riva', abbreviation: 'Riva' },
+ { name: 'Rondò', abbreviation: 'Rondò' },
+ { name: 'Rotonda', abbreviation: 'Rot.' },
+ { name: 'Sagrato', abbreviation: 'Sagr.' },
+ { name: 'Salita', abbreviation: 'Sal.' },
+ { name: 'Scalinata', abbreviation: 'Scal.' },
+ { name: 'Scalone', abbreviation: 'Scal.' },
+ { name: 'Slargo', abbreviation: 'Sl.' },
+ { name: 'Sottoportico', abbreviation: 'Sott.' },
+ { name: 'Strada', abbreviation: 'Str.' },
+ { name: 'Stradale', abbreviation: 'Str.le' },
+ { name: 'Strettoia', abbreviation: 'Strett.' },
+ { name: 'Traversa', abbreviation: 'Trav.' },
+ { name: 'Via', abbreviation: 'V.' },
+ { name: 'Viale', abbreviation: 'V.le' },
+ { name: 'Vicinale', abbreviation: 'Vic.le' },
+ { name: 'Vicolo', abbreviation: 'Vic.' }
+ ],
+ 'uk' : [
+ {name: 'Avenue', abbreviation: 'Ave'},
+ {name: 'Close', abbreviation: 'Cl'},
+ {name: 'Court', abbreviation: 'Ct'},
+ {name: 'Crescent', abbreviation: 'Cr'},
+ {name: 'Drive', abbreviation: 'Dr'},
+ {name: 'Garden', abbreviation: 'Gdn'},
+ {name: 'Gardens', abbreviation: 'Gdns'},
+ {name: 'Green', abbreviation: 'Gn'},
+ {name: 'Grove', abbreviation: 'Gr'},
+ {name: 'Lane', abbreviation: 'Ln'},
+ {name: 'Mount', abbreviation: 'Mt'},
+ {name: 'Place', abbreviation: 'Pl'},
+ {name: 'Park', abbreviation: 'Pk'},
+ {name: 'Ridge', abbreviation: 'Rdg'},
+ {name: 'Road', abbreviation: 'Rd'},
+ {name: 'Square', abbreviation: 'Sq'},
+ {name: 'Street', abbreviation: 'St'},
+ {name: 'Terrace', abbreviation: 'Ter'},
+ {name: 'Valley', abbreviation: 'Val'}
+ ]
+ },
+
+ months: [
+ {name: 'January', short_name: 'Jan', numeric: '01', days: 31},
+ // Not messing with leap years...
+ {name: 'February', short_name: 'Feb', numeric: '02', days: 28},
+ {name: 'March', short_name: 'Mar', numeric: '03', days: 31},
+ {name: 'April', short_name: 'Apr', numeric: '04', days: 30},
+ {name: 'May', short_name: 'May', numeric: '05', days: 31},
+ {name: 'June', short_name: 'Jun', numeric: '06', days: 30},
+ {name: 'July', short_name: 'Jul', numeric: '07', days: 31},
+ {name: 'August', short_name: 'Aug', numeric: '08', days: 31},
+ {name: 'September', short_name: 'Sep', numeric: '09', days: 30},
+ {name: 'October', short_name: 'Oct', numeric: '10', days: 31},
+ {name: 'November', short_name: 'Nov', numeric: '11', days: 30},
+ {name: 'December', short_name: 'Dec', numeric: '12', days: 31}
+ ],
+
+ // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
+ cc_types: [
+ {name: "American Express", short_name: 'amex', prefix: '34', length: 15},
+ {name: "Bankcard", short_name: 'bankcard', prefix: '5610', length: 16},
+ {name: "China UnionPay", short_name: 'chinaunion', prefix: '62', length: 16},
+ {name: "Diners Club Carte Blanche", short_name: 'dccarte', prefix: '300', length: 14},
+ {name: "Diners Club enRoute", short_name: 'dcenroute', prefix: '2014', length: 15},
+ {name: "Diners Club International", short_name: 'dcintl', prefix: '36', length: 14},
+ {name: "Diners Club United States & Canada", short_name: 'dcusc', prefix: '54', length: 16},
+ {name: "Discover Card", short_name: 'discover', prefix: '6011', length: 16},
+ {name: "InstaPayment", short_name: 'instapay', prefix: '637', length: 16},
+ {name: "JCB", short_name: 'jcb', prefix: '3528', length: 16},
+ {name: "Laser", short_name: 'laser', prefix: '6304', length: 16},
+ {name: "Maestro", short_name: 'maestro', prefix: '5018', length: 16},
+ {name: "Mastercard", short_name: 'mc', prefix: '51', length: 16},
+ {name: "Solo", short_name: 'solo', prefix: '6334', length: 16},
+ {name: "Switch", short_name: 'switch', prefix: '4903', length: 16},
+ {name: "Visa", short_name: 'visa', prefix: '4', length: 16},
+ {name: "Visa Electron", short_name: 'electron', prefix: '4026', length: 16}
+ ],
+
+ //return all world currency by ISO 4217
+ currency_types: [
+ {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},
+ {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},
+ {'code' : 'ALL', 'name' : 'Albania Lek'},
+ {'code' : 'AMD', 'name' : 'Armenia Dram'},
+ {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},
+ {'code' : 'AOA', 'name' : 'Angola Kwanza'},
+ {'code' : 'ARS', 'name' : 'Argentina Peso'},
+ {'code' : 'AUD', 'name' : 'Australia Dollar'},
+ {'code' : 'AWG', 'name' : 'Aruba Guilder'},
+ {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},
+ {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},
+ {'code' : 'BBD', 'name' : 'Barbados Dollar'},
+ {'code' : 'BDT', 'name' : 'Bangladesh Taka'},
+ {'code' : 'BGN', 'name' : 'Bulgaria Lev'},
+ {'code' : 'BHD', 'name' : 'Bahrain Dinar'},
+ {'code' : 'BIF', 'name' : 'Burundi Franc'},
+ {'code' : 'BMD', 'name' : 'Bermuda Dollar'},
+ {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},
+ {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},
+ {'code' : 'BRL', 'name' : 'Brazil Real'},
+ {'code' : 'BSD', 'name' : 'Bahamas Dollar'},
+ {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},
+ {'code' : 'BWP', 'name' : 'Botswana Pula'},
+ {'code' : 'BYR', 'name' : 'Belarus Ruble'},
+ {'code' : 'BZD', 'name' : 'Belize Dollar'},
+ {'code' : 'CAD', 'name' : 'Canada Dollar'},
+ {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},
+ {'code' : 'CHF', 'name' : 'Switzerland Franc'},
+ {'code' : 'CLP', 'name' : 'Chile Peso'},
+ {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},
+ {'code' : 'COP', 'name' : 'Colombia Peso'},
+ {'code' : 'CRC', 'name' : 'Costa Rica Colon'},
+ {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},
+ {'code' : 'CUP', 'name' : 'Cuba Peso'},
+ {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},
+ {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},
+ {'code' : 'DJF', 'name' : 'Djibouti Franc'},
+ {'code' : 'DKK', 'name' : 'Denmark Krone'},
+ {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},
+ {'code' : 'DZD', 'name' : 'Algeria Dinar'},
+ {'code' : 'EGP', 'name' : 'Egypt Pound'},
+ {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},
+ {'code' : 'ETB', 'name' : 'Ethiopia Birr'},
+ {'code' : 'EUR', 'name' : 'Euro Member Countries'},
+ {'code' : 'FJD', 'name' : 'Fiji Dollar'},
+ {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},
+ {'code' : 'GBP', 'name' : 'United Kingdom Pound'},
+ {'code' : 'GEL', 'name' : 'Georgia Lari'},
+ {'code' : 'GGP', 'name' : 'Guernsey Pound'},
+ {'code' : 'GHS', 'name' : 'Ghana Cedi'},
+ {'code' : 'GIP', 'name' : 'Gibraltar Pound'},
+ {'code' : 'GMD', 'name' : 'Gambia Dalasi'},
+ {'code' : 'GNF', 'name' : 'Guinea Franc'},
+ {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},
+ {'code' : 'GYD', 'name' : 'Guyana Dollar'},
+ {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},
+ {'code' : 'HNL', 'name' : 'Honduras Lempira'},
+ {'code' : 'HRK', 'name' : 'Croatia Kuna'},
+ {'code' : 'HTG', 'name' : 'Haiti Gourde'},
+ {'code' : 'HUF', 'name' : 'Hungary Forint'},
+ {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},
+ {'code' : 'ILS', 'name' : 'Israel Shekel'},
+ {'code' : 'IMP', 'name' : 'Isle of Man Pound'},
+ {'code' : 'INR', 'name' : 'India Rupee'},
+ {'code' : 'IQD', 'name' : 'Iraq Dinar'},
+ {'code' : 'IRR', 'name' : 'Iran Rial'},
+ {'code' : 'ISK', 'name' : 'Iceland Krona'},
+ {'code' : 'JEP', 'name' : 'Jersey Pound'},
+ {'code' : 'JMD', 'name' : 'Jamaica Dollar'},
+ {'code' : 'JOD', 'name' : 'Jordan Dinar'},
+ {'code' : 'JPY', 'name' : 'Japan Yen'},
+ {'code' : 'KES', 'name' : 'Kenya Shilling'},
+ {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},
+ {'code' : 'KHR', 'name' : 'Cambodia Riel'},
+ {'code' : 'KMF', 'name' : 'Comoros Franc'},
+ {'code' : 'KPW', 'name' : 'Korea (North) Won'},
+ {'code' : 'KRW', 'name' : 'Korea (South) Won'},
+ {'code' : 'KWD', 'name' : 'Kuwait Dinar'},
+ {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},
+ {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},
+ {'code' : 'LAK', 'name' : 'Laos Kip'},
+ {'code' : 'LBP', 'name' : 'Lebanon Pound'},
+ {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},
+ {'code' : 'LRD', 'name' : 'Liberia Dollar'},
+ {'code' : 'LSL', 'name' : 'Lesotho Loti'},
+ {'code' : 'LTL', 'name' : 'Lithuania Litas'},
+ {'code' : 'LYD', 'name' : 'Libya Dinar'},
+ {'code' : 'MAD', 'name' : 'Morocco Dirham'},
+ {'code' : 'MDL', 'name' : 'Moldova Leu'},
+ {'code' : 'MGA', 'name' : 'Madagascar Ariary'},
+ {'code' : 'MKD', 'name' : 'Macedonia Denar'},
+ {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},
+ {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},
+ {'code' : 'MOP', 'name' : 'Macau Pataca'},
+ {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},
+ {'code' : 'MUR', 'name' : 'Mauritius Rupee'},
+ {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},
+ {'code' : 'MWK', 'name' : 'Malawi Kwacha'},
+ {'code' : 'MXN', 'name' : 'Mexico Peso'},
+ {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},
+ {'code' : 'MZN', 'name' : 'Mozambique Metical'},
+ {'code' : 'NAD', 'name' : 'Namibia Dollar'},
+ {'code' : 'NGN', 'name' : 'Nigeria Naira'},
+ {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},
+ {'code' : 'NOK', 'name' : 'Norway Krone'},
+ {'code' : 'NPR', 'name' : 'Nepal Rupee'},
+ {'code' : 'NZD', 'name' : 'New Zealand Dollar'},
+ {'code' : 'OMR', 'name' : 'Oman Rial'},
+ {'code' : 'PAB', 'name' : 'Panama Balboa'},
+ {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},
+ {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},
+ {'code' : 'PHP', 'name' : 'Philippines Peso'},
+ {'code' : 'PKR', 'name' : 'Pakistan Rupee'},
+ {'code' : 'PLN', 'name' : 'Poland Zloty'},
+ {'code' : 'PYG', 'name' : 'Paraguay Guarani'},
+ {'code' : 'QAR', 'name' : 'Qatar Riyal'},
+ {'code' : 'RON', 'name' : 'Romania New Leu'},
+ {'code' : 'RSD', 'name' : 'Serbia Dinar'},
+ {'code' : 'RUB', 'name' : 'Russia Ruble'},
+ {'code' : 'RWF', 'name' : 'Rwanda Franc'},
+ {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},
+ {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},
+ {'code' : 'SCR', 'name' : 'Seychelles Rupee'},
+ {'code' : 'SDG', 'name' : 'Sudan Pound'},
+ {'code' : 'SEK', 'name' : 'Sweden Krona'},
+ {'code' : 'SGD', 'name' : 'Singapore Dollar'},
+ {'code' : 'SHP', 'name' : 'Saint Helena Pound'},
+ {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},
+ {'code' : 'SOS', 'name' : 'Somalia Shilling'},
+ {'code' : 'SPL', 'name' : 'Seborga Luigino'},
+ {'code' : 'SRD', 'name' : 'Suriname Dollar'},
+ {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},
+ {'code' : 'SVC', 'name' : 'El Salvador Colon'},
+ {'code' : 'SYP', 'name' : 'Syria Pound'},
+ {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},
+ {'code' : 'THB', 'name' : 'Thailand Baht'},
+ {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},
+ {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},
+ {'code' : 'TND', 'name' : 'Tunisia Dinar'},
+ {'code' : 'TOP', 'name' : 'Tonga Pa\'anga'},
+ {'code' : 'TRY', 'name' : 'Turkey Lira'},
+ {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},
+ {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},
+ {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},
+ {'code' : 'TZS', 'name' : 'Tanzania Shilling'},
+ {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},
+ {'code' : 'UGX', 'name' : 'Uganda Shilling'},
+ {'code' : 'USD', 'name' : 'United States Dollar'},
+ {'code' : 'UYU', 'name' : 'Uruguay Peso'},
+ {'code' : 'UZS', 'name' : 'Uzbekistan Som'},
+ {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},
+ {'code' : 'VND', 'name' : 'Viet Nam Dong'},
+ {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},
+ {'code' : 'WST', 'name' : 'Samoa Tala'},
+ {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},
+ {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},
+ {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},
+ {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},
+ {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},
+ {'code' : 'YER', 'name' : 'Yemen Rial'},
+ {'code' : 'ZAR', 'name' : 'South Africa Rand'},
+ {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},
+ {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}
+ ],
+
+ // return the names of all valide colors
+ colorNames : [ "AliceBlue", "Black", "Navy", "DarkBlue", "MediumBlue", "Blue", "DarkGreen", "Green", "Teal", "DarkCyan", "DeepSkyBlue", "DarkTurquoise", "MediumSpringGreen", "Lime", "SpringGreen",
+ "Aqua", "Cyan", "MidnightBlue", "DodgerBlue", "LightSeaGreen", "ForestGreen", "SeaGreen", "DarkSlateGray", "LimeGreen", "MediumSeaGreen", "Turquoise", "RoyalBlue", "SteelBlue", "DarkSlateBlue", "MediumTurquoise",
+ "Indigo", "DarkOliveGreen", "CadetBlue", "CornflowerBlue", "RebeccaPurple", "MediumAquaMarine", "DimGray", "SlateBlue", "OliveDrab", "SlateGray", "LightSlateGray", "MediumSlateBlue", "LawnGreen", "Chartreuse",
+ "Aquamarine", "Maroon", "Purple", "Olive", "Gray", "SkyBlue", "LightSkyBlue", "BlueViolet", "DarkRed", "DarkMagenta", "SaddleBrown", "Ivory", "White",
+ "DarkSeaGreen", "LightGreen", "MediumPurple", "DarkViolet", "PaleGreen", "DarkOrchid", "YellowGreen", "Sienna", "Brown", "DarkGray", "LightBlue", "GreenYellow", "PaleTurquoise", "LightSteelBlue", "PowderBlue",
+ "FireBrick", "DarkGoldenRod", "MediumOrchid", "RosyBrown", "DarkKhaki", "Silver", "MediumVioletRed", "IndianRed", "Peru", "Chocolate", "Tan", "LightGray", "Thistle", "Orchid", "GoldenRod", "PaleVioletRed",
+ "Crimson", "Gainsboro", "Plum", "BurlyWood", "LightCyan", "Lavender", "DarkSalmon", "Violet", "PaleGoldenRod", "LightCoral", "Khaki", "AliceBlue", "HoneyDew", "Azure", "SandyBrown", "Wheat", "Beige", "WhiteSmoke",
+ "MintCream", "GhostWhite", "Salmon", "AntiqueWhite", "Linen", "LightGoldenRodYellow", "OldLace", "Red", "Fuchsia", "Magenta", "DeepPink", "OrangeRed", "Tomato", "HotPink", "Coral", "DarkOrange", "LightSalmon", "Orange",
+ "LightPink", "Pink", "Gold", "PeachPuff", "NavajoWhite", "Moccasin", "Bisque", "MistyRose", "BlanchedAlmond", "PapayaWhip", "LavenderBlush", "SeaShell", "Cornsilk", "LemonChiffon", "FloralWhite", "Snow", "Yellow", "LightYellow"
+ ],
+
+ // Data taken from https://www.sec.gov/rules/other/4-460list.htm
+ company: [ "3Com Corp",
+ "3M Company",
+ "A.G. Edwards Inc.",
+ "Abbott Laboratories",
+ "Abercrombie & Fitch Co.",
+ "ABM Industries Incorporated",
+ "Ace Hardware Corporation",
+ "ACT Manufacturing Inc.",
+ "Acterna Corp.",
+ "Adams Resources & Energy, Inc.",
+ "ADC Telecommunications, Inc.",
+ "Adelphia Communications Corporation",
+ "Administaff, Inc.",
+ "Adobe Systems Incorporated",
+ "Adolph Coors Company",
+ "Advance Auto Parts, Inc.",
+ "Advanced Micro Devices, Inc.",
+ "AdvancePCS, Inc.",
+ "Advantica Restaurant Group, Inc.",
+ "The AES Corporation",
+ "Aetna Inc.",
+ "Affiliated Computer Services, Inc.",
+ "AFLAC Incorporated",
+ "AGCO Corporation",
+ "Agilent Technologies, Inc.",
+ "Agway Inc.",
+ "Apartment Investment and Management Company",
+ "Air Products and Chemicals, Inc.",
+ "Airborne, Inc.",
+ "Airgas, Inc.",
+ "AK Steel Holding Corporation",
+ "Alaska Air Group, Inc.",
+ "Alberto-Culver Company",
+ "Albertson's, Inc.",
+ "Alcoa Inc.",
+ "Alleghany Corporation",
+ "Allegheny Energy, Inc.",
+ "Allegheny Technologies Incorporated",
+ "Allergan, Inc.",
+ "ALLETE, Inc.",
+ "Alliant Energy Corporation",
+ "Allied Waste Industries, Inc.",
+ "Allmerica Financial Corporation",
+ "The Allstate Corporation",
+ "ALLTEL Corporation",
+ "The Alpine Group, Inc.",
+ "Amazon.com, Inc.",
+ "AMC Entertainment Inc.",
+ "American Power Conversion Corporation",
+ "Amerada Hess Corporation",
+ "AMERCO",
+ "Ameren Corporation",
+ "America West Holdings Corporation",
+ "American Axle & Manufacturing Holdings, Inc.",
+ "American Eagle Outfitters, Inc.",
+ "American Electric Power Company, Inc.",
+ "American Express Company",
+ "American Financial Group, Inc.",
+ "American Greetings Corporation",
+ "American International Group, Inc.",
+ "American Standard Companies Inc.",
+ "American Water Works Company, Inc.",
+ "AmerisourceBergen Corporation",
+ "Ames Department Stores, Inc.",
+ "Amgen Inc.",
+ "Amkor Technology, Inc.",
+ "AMR Corporation",
+ "AmSouth Bancorp.",
+ "Amtran, Inc.",
+ "Anadarko Petroleum Corporation",
+ "Analog Devices, Inc.",
+ "Anheuser-Busch Companies, Inc.",
+ "Anixter International Inc.",
+ "AnnTaylor Inc.",
+ "Anthem, Inc.",
+ "AOL Time Warner Inc.",
+ "Aon Corporation",
+ "Apache Corporation",
+ "Apple Computer, Inc.",
+ "Applera Corporation",
+ "Applied Industrial Technologies, Inc.",
+ "Applied Materials, Inc.",
+ "Aquila, Inc.",
+ "ARAMARK Corporation",
+ "Arch Coal, Inc.",
+ "Archer Daniels Midland Company",
+ "Arkansas Best Corporation",
+ "Armstrong Holdings, Inc.",
+ "Arrow Electronics, Inc.",
+ "ArvinMeritor, Inc.",
+ "Ashland Inc.",
+ "Astoria Financial Corporation",
+ "AT&T Corp.",
+ "Atmel Corporation",
+ "Atmos Energy Corporation",
+ "Audiovox Corporation",
+ "Autoliv, Inc.",
+ "Automatic Data Processing, Inc.",
+ "AutoNation, Inc.",
+ "AutoZone, Inc.",
+ "Avaya Inc.",
+ "Avery Dennison Corporation",
+ "Avista Corporation",
+ "Avnet, Inc.",
+ "Avon Products, Inc.",
+ "Baker Hughes Incorporated",
+ "Ball Corporation",
+ "Bank of America Corporation",
+ "The Bank of New York Company, Inc.",
+ "Bank One Corporation",
+ "Banknorth Group, Inc.",
+ "Banta Corporation",
+ "Barnes & Noble, Inc.",
+ "Bausch & Lomb Incorporated",
+ "Baxter International Inc.",
+ "BB&T Corporation",
+ "The Bear Stearns Companies Inc.",
+ "Beazer Homes USA, Inc.",
+ "Beckman Coulter, Inc.",
+ "Becton, Dickinson and Company",
+ "Bed Bath & Beyond Inc.",
+ "Belk, Inc.",
+ "Bell Microproducts Inc.",
+ "BellSouth Corporation",
+ "Belo Corp.",
+ "Bemis Company, Inc.",
+ "Benchmark Electronics, Inc.",
+ "Berkshire Hathaway Inc.",
+ "Best Buy Co., Inc.",
+ "Bethlehem Steel Corporation",
+ "Beverly Enterprises, Inc.",
+ "Big Lots, Inc.",
+ "BJ Services Company",
+ "BJ's Wholesale Club, Inc.",
+ "The Black & Decker Corporation",
+ "Black Hills Corporation",
+ "BMC Software, Inc.",
+ "The Boeing Company",
+ "Boise Cascade Corporation",
+ "Borders Group, Inc.",
+ "BorgWarner Inc.",
+ "Boston Scientific Corporation",
+ "Bowater Incorporated",
+ "Briggs & Stratton Corporation",
+ "Brightpoint, Inc.",
+ "Brinker International, Inc.",
+ "Bristol-Myers Squibb Company",
+ "Broadwing, Inc.",
+ "Brown Shoe Company, Inc.",
+ "Brown-Forman Corporation",
+ "Brunswick Corporation",
+ "Budget Group, Inc.",
+ "Burlington Coat Factory Warehouse Corporation",
+ "Burlington Industries, Inc.",
+ "Burlington Northern Santa Fe Corporation",
+ "Burlington Resources Inc.",
+ "C. H. Robinson Worldwide Inc.",
+ "Cablevision Systems Corp",
+ "Cabot Corp",
+ "Cadence Design Systems, Inc.",
+ "Calpine Corp.",
+ "Campbell Soup Co.",
+ "Capital One Financial Corp.",
+ "Cardinal Health Inc.",
+ "Caremark Rx Inc.",
+ "Carlisle Cos. Inc.",
+ "Carpenter Technology Corp.",
+ "Casey's General Stores Inc.",
+ "Caterpillar Inc.",
+ "CBRL Group Inc.",
+ "CDI Corp.",
+ "CDW Computer Centers Inc.",
+ "CellStar Corp.",
+ "Cendant Corp",
+ "Cenex Harvest States Cooperatives",
+ "Centex Corp.",
+ "CenturyTel Inc.",
+ "Ceridian Corp.",
+ "CH2M Hill Cos. Ltd.",
+ "Champion Enterprises Inc.",
+ "Charles Schwab Corp.",
+ "Charming Shoppes Inc.",
+ "Charter Communications Inc.",
+ "Charter One Financial Inc.",
+ "ChevronTexaco Corp.",
+ "Chiquita Brands International Inc.",
+ "Chubb Corp",
+ "Ciena Corp.",
+ "Cigna Corp",
+ "Cincinnati Financial Corp.",
+ "Cinergy Corp.",
+ "Cintas Corp.",
+ "Circuit City Stores Inc.",
+ "Cisco Systems Inc.",
+ "Citigroup, Inc",
+ "Citizens Communications Co.",
+ "CKE Restaurants Inc.",
+ "Clear Channel Communications Inc.",
+ "The Clorox Co.",
+ "CMGI Inc.",
+ "CMS Energy Corp.",
+ "CNF Inc.",
+ "Coca-Cola Co.",
+ "Coca-Cola Enterprises Inc.",
+ "Colgate-Palmolive Co.",
+ "Collins & Aikman Corp.",
+ "Comcast Corp.",
+ "Comdisco Inc.",
+ "Comerica Inc.",
+ "Comfort Systems USA Inc.",
+ "Commercial Metals Co.",
+ "Community Health Systems Inc.",
+ "Compass Bancshares Inc",
+ "Computer Associates International Inc.",
+ "Computer Sciences Corp.",
+ "Compuware Corp.",
+ "Comverse Technology Inc.",
+ "ConAgra Foods Inc.",
+ "Concord EFS Inc.",
+ "Conectiv, Inc",
+ "Conoco Inc",
+ "Conseco Inc.",
+ "Consolidated Freightways Corp.",
+ "Consolidated Edison Inc.",
+ "Constellation Brands Inc.",
+ "Constellation Emergy Group Inc.",
+ "Continental Airlines Inc.",
+ "Convergys Corp.",
+ "Cooper Cameron Corp.",
+ "Cooper Industries Ltd.",
+ "Cooper Tire & Rubber Co.",
+ "Corn Products International Inc.",
+ "Corning Inc.",
+ "Costco Wholesale Corp.",
+ "Countrywide Credit Industries Inc.",
+ "Coventry Health Care Inc.",
+ "Cox Communications Inc.",
+ "Crane Co.",
+ "Crompton Corp.",
+ "Crown Cork & Seal Co. Inc.",
+ "CSK Auto Corp.",
+ "CSX Corp.",
+ "Cummins Inc.",
+ "CVS Corp.",
+ "Cytec Industries Inc.",
+ "D&K Healthcare Resources, Inc.",
+ "D.R. Horton Inc.",
+ "Dana Corporation",
+ "Danaher Corporation",
+ "Darden Restaurants Inc.",
+ "DaVita Inc.",
+ "Dean Foods Company",
+ "Deere & Company",
+ "Del Monte Foods Co",
+ "Dell Computer Corporation",
+ "Delphi Corp.",
+ "Delta Air Lines Inc.",
+ "Deluxe Corporation",
+ "Devon Energy Corporation",
+ "Di Giorgio Corporation",
+ "Dial Corporation",
+ "Diebold Incorporated",
+ "Dillard's Inc.",
+ "DIMON Incorporated",
+ "Dole Food Company, Inc.",
+ "Dollar General Corporation",
+ "Dollar Tree Stores, Inc.",
+ "Dominion Resources, Inc.",
+ "Domino's Pizza LLC",
+ "Dover Corporation, Inc.",
+ "Dow Chemical Company",
+ "Dow Jones & Company, Inc.",
+ "DPL Inc.",
+ "DQE Inc.",
+ "Dreyer's Grand Ice Cream, Inc.",
+ "DST Systems, Inc.",
+ "DTE Energy Co.",
+ "E.I. Du Pont de Nemours and Company",
+ "Duke Energy Corp",
+ "Dun & Bradstreet Inc.",
+ "DURA Automotive Systems Inc.",
+ "DynCorp",
+ "Dynegy Inc.",
+ "E*Trade Group, Inc.",
+ "E.W. Scripps Company",
+ "Earthlink, Inc.",
+ "Eastman Chemical Company",
+ "Eastman Kodak Company",
+ "Eaton Corporation",
+ "Echostar Communications Corporation",
+ "Ecolab Inc.",
+ "Edison International",
+ "EGL Inc.",
+ "El Paso Corporation",
+ "Electronic Arts Inc.",
+ "Electronic Data Systems Corp.",
+ "Eli Lilly and Company",
+ "EMC Corporation",
+ "Emcor Group Inc.",
+ "Emerson Electric Co.",
+ "Encompass Services Corporation",
+ "Energizer Holdings Inc.",
+ "Energy East Corporation",
+ "Engelhard Corporation",
+ "Enron Corp.",
+ "Entergy Corporation",
+ "Enterprise Products Partners L.P.",
+ "EOG Resources, Inc.",
+ "Equifax Inc.",
+ "Equitable Resources Inc.",
+ "Equity Office Properties Trust",
+ "Equity Residential Properties Trust",
+ "Estee Lauder Companies Inc.",
+ "Exelon Corporation",
+ "Exide Technologies",
+ "Expeditors International of Washington Inc.",
+ "Express Scripts Inc.",
+ "ExxonMobil Corporation",
+ "Fairchild Semiconductor International Inc.",
+ "Family Dollar Stores Inc.",
+ "Farmland Industries Inc.",
+ "Federal Mogul Corp.",
+ "Federated Department Stores Inc.",
+ "Federal Express Corp.",
+ "Felcor Lodging Trust Inc.",
+ "Ferro Corp.",
+ "Fidelity National Financial Inc.",
+ "Fifth Third Bancorp",
+ "First American Financial Corp.",
+ "First Data Corp.",
+ "First National of Nebraska Inc.",
+ "First Tennessee National Corp.",
+ "FirstEnergy Corp.",
+ "Fiserv Inc.",
+ "Fisher Scientific International Inc.",
+ "FleetBoston Financial Co.",
+ "Fleetwood Enterprises Inc.",
+ "Fleming Companies Inc.",
+ "Flowers Foods Inc.",
+ "Flowserv Corp",
+ "Fluor Corp",
+ "FMC Corp",
+ "Foamex International Inc",
+ "Foot Locker Inc",
+ "Footstar Inc.",
+ "Ford Motor Co",
+ "Forest Laboratories Inc.",
+ "Fortune Brands Inc.",
+ "Foster Wheeler Ltd.",
+ "FPL Group Inc.",
+ "Franklin Resources Inc.",
+ "Freeport McMoran Copper & Gold Inc.",
+ "Frontier Oil Corp",
+ "Furniture Brands International Inc.",
+ "Gannett Co., Inc.",
+ "Gap Inc.",
+ "Gateway Inc.",
+ "GATX Corporation",
+ "Gemstar-TV Guide International Inc.",
+ "GenCorp Inc.",
+ "General Cable Corporation",
+ "General Dynamics Corporation",
+ "General Electric Company",
+ "General Mills Inc",
+ "General Motors Corporation",
+ "Genesis Health Ventures Inc.",
+ "Gentek Inc.",
+ "Gentiva Health Services Inc.",
+ "Genuine Parts Company",
+ "Genuity Inc.",
+ "Genzyme Corporation",
+ "Georgia Gulf Corporation",
+ "Georgia-Pacific Corporation",
+ "Gillette Company",
+ "Gold Kist Inc.",
+ "Golden State Bancorp Inc.",
+ "Golden West Financial Corporation",
+ "Goldman Sachs Group Inc.",
+ "Goodrich Corporation",
+ "The Goodyear Tire & Rubber Company",
+ "Granite Construction Incorporated",
+ "Graybar Electric Company Inc.",
+ "Great Lakes Chemical Corporation",
+ "Great Plains Energy Inc.",
+ "GreenPoint Financial Corp.",
+ "Greif Bros. Corporation",
+ "Grey Global Group Inc.",
+ "Group 1 Automotive Inc.",
+ "Guidant Corporation",
+ "H&R Block Inc.",
+ "H.B. Fuller Company",
+ "H.J. Heinz Company",
+ "Halliburton Co.",
+ "Harley-Davidson Inc.",
+ "Harman International Industries Inc.",
+ "Harrah's Entertainment Inc.",
+ "Harris Corp.",
+ "Harsco Corp.",
+ "Hartford Financial Services Group Inc.",
+ "Hasbro Inc.",
+ "Hawaiian Electric Industries Inc.",
+ "HCA Inc.",
+ "Health Management Associates Inc.",
+ "Health Net Inc.",
+ "Healthsouth Corp",
+ "Henry Schein Inc.",
+ "Hercules Inc.",
+ "Herman Miller Inc.",
+ "Hershey Foods Corp.",
+ "Hewlett-Packard Company",
+ "Hibernia Corp.",
+ "Hillenbrand Industries Inc.",
+ "Hilton Hotels Corp.",
+ "Hollywood Entertainment Corp.",
+ "Home Depot Inc.",
+ "Hon Industries Inc.",
+ "Honeywell International Inc.",
+ "Hormel Foods Corp.",
+ "Host Marriott Corp.",
+ "Household International Corp.",
+ "Hovnanian Enterprises Inc.",
+ "Hub Group Inc.",
+ "Hubbell Inc.",
+ "Hughes Supply Inc.",
+ "Humana Inc.",
+ "Huntington Bancshares Inc.",
+ "Idacorp Inc.",
+ "IDT Corporation",
+ "IKON Office Solutions Inc.",
+ "Illinois Tool Works Inc.",
+ "IMC Global Inc.",
+ "Imperial Sugar Company",
+ "IMS Health Inc.",
+ "Ingles Market Inc",
+ "Ingram Micro Inc.",
+ "Insight Enterprises Inc.",
+ "Integrated Electrical Services Inc.",
+ "Intel Corporation",
+ "International Paper Co.",
+ "Interpublic Group of Companies Inc.",
+ "Interstate Bakeries Corporation",
+ "International Business Machines Corp.",
+ "International Flavors & Fragrances Inc.",
+ "International Multifoods Corporation",
+ "Intuit Inc.",
+ "IT Group Inc.",
+ "ITT Industries Inc.",
+ "Ivax Corp.",
+ "J.B. Hunt Transport Services Inc.",
+ "J.C. Penny Co.",
+ "J.P. Morgan Chase & Co.",
+ "Jabil Circuit Inc.",
+ "Jack In The Box Inc.",
+ "Jacobs Engineering Group Inc.",
+ "JDS Uniphase Corp.",
+ "Jefferson-Pilot Co.",
+ "John Hancock Financial Services Inc.",
+ "Johnson & Johnson",
+ "Johnson Controls Inc.",
+ "Jones Apparel Group Inc.",
+ "KB Home",
+ "Kellogg Company",
+ "Kellwood Company",
+ "Kelly Services Inc.",
+ "Kemet Corp.",
+ "Kennametal Inc.",
+ "Kerr-McGee Corporation",
+ "KeyCorp",
+ "KeySpan Corp.",
+ "Kimball International Inc.",
+ "Kimberly-Clark Corporation",
+ "Kindred Healthcare Inc.",
+ "KLA-Tencor Corporation",
+ "K-Mart Corp.",
+ "Knight-Ridder Inc.",
+ "Kohl's Corp.",
+ "KPMG Consulting Inc.",
+ "Kroger Co.",
+ "L-3 Communications Holdings Inc.",
+ "Laboratory Corporation of America Holdings",
+ "Lam Research Corporation",
+ "LandAmerica Financial Group Inc.",
+ "Lands' End Inc.",
+ "Landstar System Inc.",
+ "La-Z-Boy Inc.",
+ "Lear Corporation",
+ "Legg Mason Inc.",
+ "Leggett & Platt Inc.",
+ "Lehman Brothers Holdings Inc.",
+ "Lennar Corporation",
+ "Lennox International Inc.",
+ "Level 3 Communications Inc.",
+ "Levi Strauss & Co.",
+ "Lexmark International Inc.",
+ "Limited Inc.",
+ "Lincoln National Corporation",
+ "Linens 'n Things Inc.",
+ "Lithia Motors Inc.",
+ "Liz Claiborne Inc.",
+ "Lockheed Martin Corporation",
+ "Loews Corporation",
+ "Longs Drug Stores Corporation",
+ "Louisiana-Pacific Corporation",
+ "Lowe's Companies Inc.",
+ "LSI Logic Corporation",
+ "The LTV Corporation",
+ "The Lubrizol Corporation",
+ "Lucent Technologies Inc.",
+ "Lyondell Chemical Company",
+ "M & T Bank Corporation",
+ "Magellan Health Services Inc.",
+ "Mail-Well Inc.",
+ "Mandalay Resort Group",
+ "Manor Care Inc.",
+ "Manpower Inc.",
+ "Marathon Oil Corporation",
+ "Mariner Health Care Inc.",
+ "Markel Corporation",
+ "Marriott International Inc.",
+ "Marsh & McLennan Companies Inc.",
+ "Marsh Supermarkets Inc.",
+ "Marshall & Ilsley Corporation",
+ "Martin Marietta Materials Inc.",
+ "Masco Corporation",
+ "Massey Energy Company",
+ "MasTec Inc.",
+ "Mattel Inc.",
+ "Maxim Integrated Products Inc.",
+ "Maxtor Corporation",
+ "Maxxam Inc.",
+ "The May Department Stores Company",
+ "Maytag Corporation",
+ "MBNA Corporation",
+ "McCormick & Company Incorporated",
+ "McDonald's Corporation",
+ "The McGraw-Hill Companies Inc.",
+ "McKesson Corporation",
+ "McLeodUSA Incorporated",
+ "M.D.C. Holdings Inc.",
+ "MDU Resources Group Inc.",
+ "MeadWestvaco Corporation",
+ "Medtronic Inc.",
+ "Mellon Financial Corporation",
+ "The Men's Wearhouse Inc.",
+ "Merck & Co., Inc.",
+ "Mercury General Corporation",
+ "Merrill Lynch & Co. Inc.",
+ "Metaldyne Corporation",
+ "Metals USA Inc.",
+ "MetLife Inc.",
+ "Metris Companies Inc",
+ "MGIC Investment Corporation",
+ "MGM Mirage",
+ "Michaels Stores Inc.",
+ "Micron Technology Inc.",
+ "Microsoft Corporation",
+ "Milacron Inc.",
+ "Millennium Chemicals Inc.",
+ "Mirant Corporation",
+ "Mohawk Industries Inc.",
+ "Molex Incorporated",
+ "The MONY Group Inc.",
+ "Morgan Stanley Dean Witter & Co.",
+ "Motorola Inc.",
+ "MPS Group Inc.",
+ "Murphy Oil Corporation",
+ "Nabors Industries Inc",
+ "Nacco Industries Inc",
+ "Nash Finch Company",
+ "National City Corp.",
+ "National Commerce Financial Corporation",
+ "National Fuel Gas Company",
+ "National Oilwell Inc",
+ "National Rural Utilities Cooperative Finance Corporation",
+ "National Semiconductor Corporation",
+ "National Service Industries Inc",
+ "Navistar International Corporation",
+ "NCR Corporation",
+ "The Neiman Marcus Group Inc.",
+ "New Jersey Resources Corporation",
+ "New York Times Company",
+ "Newell Rubbermaid Inc",
+ "Newmont Mining Corporation",
+ "Nextel Communications Inc",
+ "Nicor Inc",
+ "Nike Inc",
+ "NiSource Inc",
+ "Noble Energy Inc",
+ "Nordstrom Inc",
+ "Norfolk Southern Corporation",
+ "Nortek Inc",
+ "North Fork Bancorporation Inc",
+ "Northeast Utilities System",
+ "Northern Trust Corporation",
+ "Northrop Grumman Corporation",
+ "NorthWestern Corporation",
+ "Novellus Systems Inc",
+ "NSTAR",
+ "NTL Incorporated",
+ "Nucor Corp",
+ "Nvidia Corp",
+ "NVR Inc",
+ "Northwest Airlines Corp",
+ "Occidental Petroleum Corp",
+ "Ocean Energy Inc",
+ "Office Depot Inc.",
+ "OfficeMax Inc",
+ "OGE Energy Corp",
+ "Oglethorpe Power Corp.",
+ "Ohio Casualty Corp.",
+ "Old Republic International Corp.",
+ "Olin Corp.",
+ "OM Group Inc",
+ "Omnicare Inc",
+ "Omnicom Group",
+ "On Semiconductor Corp",
+ "ONEOK Inc",
+ "Oracle Corp",
+ "Oshkosh Truck Corp",
+ "Outback Steakhouse Inc.",
+ "Owens & Minor Inc.",
+ "Owens Corning",
+ "Owens-Illinois Inc",
+ "Oxford Health Plans Inc",
+ "Paccar Inc",
+ "PacifiCare Health Systems Inc",
+ "Packaging Corp. of America",
+ "Pactiv Corp",
+ "Pall Corp",
+ "Pantry Inc",
+ "Park Place Entertainment Corp",
+ "Parker Hannifin Corp.",
+ "Pathmark Stores Inc.",
+ "Paychex Inc",
+ "Payless Shoesource Inc",
+ "Penn Traffic Co.",
+ "Pennzoil-Quaker State Company",
+ "Pentair Inc",
+ "Peoples Energy Corp.",
+ "PeopleSoft Inc",
+ "Pep Boys Manny, Moe & Jack",
+ "Potomac Electric Power Co.",
+ "Pepsi Bottling Group Inc.",
+ "PepsiAmericas Inc.",
+ "PepsiCo Inc.",
+ "Performance Food Group Co.",
+ "Perini Corp",
+ "PerkinElmer Inc",
+ "Perot Systems Corp",
+ "Petco Animal Supplies Inc.",
+ "Peter Kiewit Sons', Inc.",
+ "PETsMART Inc",
+ "Pfizer Inc",
+ "Pacific Gas & Electric Corp.",
+ "Pharmacia Corp",
+ "Phar Mor Inc.",
+ "Phelps Dodge Corp.",
+ "Philip Morris Companies Inc.",
+ "Phillips Petroleum Co",
+ "Phillips Van Heusen Corp.",
+ "Phoenix Companies Inc",
+ "Pier 1 Imports Inc.",
+ "Pilgrim's Pride Corporation",
+ "Pinnacle West Capital Corp",
+ "Pioneer-Standard Electronics Inc.",
+ "Pitney Bowes Inc.",
+ "Pittston Brinks Group",
+ "Plains All American Pipeline LP",
+ "PNC Financial Services Group Inc.",
+ "PNM Resources Inc",
+ "Polaris Industries Inc.",
+ "Polo Ralph Lauren Corp",
+ "PolyOne Corp",
+ "Popular Inc",
+ "Potlatch Corp",
+ "PPG Industries Inc",
+ "PPL Corp",
+ "Praxair Inc",
+ "Precision Castparts Corp",
+ "Premcor Inc.",
+ "Pride International Inc",
+ "Primedia Inc",
+ "Principal Financial Group Inc.",
+ "Procter & Gamble Co.",
+ "Pro-Fac Cooperative Inc.",
+ "Progress Energy Inc",
+ "Progressive Corporation",
+ "Protective Life Corp",
+ "Provident Financial Group",
+ "Providian Financial Corp.",
+ "Prudential Financial Inc.",
+ "PSS World Medical Inc",
+ "Public Service Enterprise Group Inc.",
+ "Publix Super Markets Inc.",
+ "Puget Energy Inc.",
+ "Pulte Homes Inc",
+ "Qualcomm Inc",
+ "Quanta Services Inc.",
+ "Quantum Corp",
+ "Quest Diagnostics Inc.",
+ "Questar Corp",
+ "Quintiles Transnational",
+ "Qwest Communications Intl Inc",
+ "R.J. Reynolds Tobacco Company",
+ "R.R. Donnelley & Sons Company",
+ "Radio Shack Corporation",
+ "Raymond James Financial Inc.",
+ "Raytheon Company",
+ "Reader's Digest Association Inc.",
+ "Reebok International Ltd.",
+ "Regions Financial Corp.",
+ "Regis Corporation",
+ "Reliance Steel & Aluminum Co.",
+ "Reliant Energy Inc.",
+ "Rent A Center Inc",
+ "Republic Services Inc",
+ "Revlon Inc",
+ "RGS Energy Group Inc",
+ "Rite Aid Corp",
+ "Riverwood Holding Inc.",
+ "RoadwayCorp",
+ "Robert Half International Inc.",
+ "Rock-Tenn Co",
+ "Rockwell Automation Inc",
+ "Rockwell Collins Inc",
+ "Rohm & Haas Co.",
+ "Ross Stores Inc",
+ "RPM Inc.",
+ "Ruddick Corp",
+ "Ryder System Inc",
+ "Ryerson Tull Inc",
+ "Ryland Group Inc.",
+ "Sabre Holdings Corp",
+ "Safeco Corp",
+ "Safeguard Scientifics Inc.",
+ "Safeway Inc",
+ "Saks Inc",
+ "Sanmina-SCI Inc",
+ "Sara Lee Corp",
+ "SBC Communications Inc",
+ "Scana Corp.",
+ "Schering-Plough Corp",
+ "Scholastic Corp",
+ "SCI Systems Onc.",
+ "Science Applications Intl. Inc.",
+ "Scientific-Atlanta Inc",
+ "Scotts Company",
+ "Seaboard Corp",
+ "Sealed Air Corp",
+ "Sears Roebuck & Co",
+ "Sempra Energy",
+ "Sequa Corp",
+ "Service Corp. International",
+ "ServiceMaster Co",
+ "Shaw Group Inc",
+ "Sherwin-Williams Company",
+ "Shopko Stores Inc",
+ "Siebel Systems Inc",
+ "Sierra Health Services Inc",
+ "Sierra Pacific Resources",
+ "Silgan Holdings Inc.",
+ "Silicon Graphics Inc",
+ "Simon Property Group Inc",
+ "SLM Corporation",
+ "Smith International Inc",
+ "Smithfield Foods Inc",
+ "Smurfit-Stone Container Corp",
+ "Snap-On Inc",
+ "Solectron Corp",
+ "Solutia Inc",
+ "Sonic Automotive Inc.",
+ "Sonoco Products Co.",
+ "Southern Company",
+ "Southern Union Company",
+ "SouthTrust Corp.",
+ "Southwest Airlines Co",
+ "Southwest Gas Corp",
+ "Sovereign Bancorp Inc.",
+ "Spartan Stores Inc",
+ "Spherion Corp",
+ "Sports Authority Inc",
+ "Sprint Corp.",
+ "SPX Corp",
+ "St. Jude Medical Inc",
+ "St. Paul Cos.",
+ "Staff Leasing Inc.",
+ "StanCorp Financial Group Inc",
+ "Standard Pacific Corp.",
+ "Stanley Works",
+ "Staples Inc",
+ "Starbucks Corp",
+ "Starwood Hotels & Resorts Worldwide Inc",
+ "State Street Corp.",
+ "Stater Bros. Holdings Inc.",
+ "Steelcase Inc",
+ "Stein Mart Inc",
+ "Stewart & Stevenson Services Inc",
+ "Stewart Information Services Corp",
+ "Stilwell Financial Inc",
+ "Storage Technology Corporation",
+ "Stryker Corp",
+ "Sun Healthcare Group Inc.",
+ "Sun Microsystems Inc.",
+ "SunGard Data Systems Inc.",
+ "Sunoco Inc.",
+ "SunTrust Banks Inc",
+ "Supervalu Inc",
+ "Swift Transportation, Co., Inc",
+ "Symbol Technologies Inc",
+ "Synovus Financial Corp.",
+ "Sysco Corp",
+ "Systemax Inc.",
+ "Target Corp.",
+ "Tech Data Corporation",
+ "TECO Energy Inc",
+ "Tecumseh Products Company",
+ "Tektronix Inc",
+ "Teleflex Incorporated",
+ "Telephone & Data Systems Inc",
+ "Tellabs Inc.",
+ "Temple-Inland Inc",
+ "Tenet Healthcare Corporation",
+ "Tenneco Automotive Inc.",
+ "Teradyne Inc",
+ "Terex Corp",
+ "Tesoro Petroleum Corp.",
+ "Texas Industries Inc.",
+ "Texas Instruments Incorporated",
+ "Textron Inc",
+ "Thermo Electron Corporation",
+ "Thomas & Betts Corporation",
+ "Tiffany & Co",
+ "Timken Company",
+ "TJX Companies Inc",
+ "TMP Worldwide Inc",
+ "Toll Brothers Inc",
+ "Torchmark Corporation",
+ "Toro Company",
+ "Tower Automotive Inc.",
+ "Toys 'R' Us Inc",
+ "Trans World Entertainment Corp.",
+ "TransMontaigne Inc",
+ "Transocean Inc",
+ "TravelCenters of America Inc.",
+ "Triad Hospitals Inc",
+ "Tribune Company",
+ "Trigon Healthcare Inc.",
+ "Trinity Industries Inc",
+ "Trump Hotels & Casino Resorts Inc.",
+ "TruServ Corporation",
+ "TRW Inc",
+ "TXU Corp",
+ "Tyson Foods Inc",
+ "U.S. Bancorp",
+ "U.S. Industries Inc.",
+ "UAL Corporation",
+ "UGI Corporation",
+ "Unified Western Grocers Inc",
+ "Union Pacific Corporation",
+ "Union Planters Corp",
+ "Unisource Energy Corp",
+ "Unisys Corporation",
+ "United Auto Group Inc",
+ "United Defense Industries Inc.",
+ "United Parcel Service Inc",
+ "United Rentals Inc",
+ "United Stationers Inc",
+ "United Technologies Corporation",
+ "UnitedHealth Group Incorporated",
+ "Unitrin Inc",
+ "Universal Corporation",
+ "Universal Forest Products Inc",
+ "Universal Health Services Inc",
+ "Unocal Corporation",
+ "Unova Inc",
+ "UnumProvident Corporation",
+ "URS Corporation",
+ "US Airways Group Inc",
+ "US Oncology Inc",
+ "USA Interactive",
+ "USFreighways Corporation",
+ "USG Corporation",
+ "UST Inc",
+ "Valero Energy Corporation",
+ "Valspar Corporation",
+ "Value City Department Stores Inc",
+ "Varco International Inc",
+ "Vectren Corporation",
+ "Veritas Software Corporation",
+ "Verizon Communications Inc",
+ "VF Corporation",
+ "Viacom Inc",
+ "Viad Corp",
+ "Viasystems Group Inc",
+ "Vishay Intertechnology Inc",
+ "Visteon Corporation",
+ "Volt Information Sciences Inc",
+ "Vulcan Materials Company",
+ "W.R. Berkley Corporation",
+ "W.R. Grace & Co",
+ "W.W. Grainger Inc",
+ "Wachovia Corporation",
+ "Wakenhut Corporation",
+ "Walgreen Co",
+ "Wallace Computer Services Inc",
+ "Wal-Mart Stores Inc",
+ "Walt Disney Co",
+ "Walter Industries Inc",
+ "Washington Mutual Inc",
+ "Washington Post Co.",
+ "Waste Management Inc",
+ "Watsco Inc",
+ "Weatherford International Inc",
+ "Weis Markets Inc.",
+ "Wellpoint Health Networks Inc",
+ "Wells Fargo & Company",
+ "Wendy's International Inc",
+ "Werner Enterprises Inc",
+ "WESCO International Inc",
+ "Western Digital Inc",
+ "Western Gas Resources Inc",
+ "WestPoint Stevens Inc",
+ "Weyerhauser Company",
+ "WGL Holdings Inc",
+ "Whirlpool Corporation",
+ "Whole Foods Market Inc",
+ "Willamette Industries Inc.",
+ "Williams Companies Inc",
+ "Williams Sonoma Inc",
+ "Winn Dixie Stores Inc",
+ "Wisconsin Energy Corporation",
+ "Wm Wrigley Jr Company",
+ "World Fuel Services Corporation",
+ "WorldCom Inc",
+ "Worthington Industries Inc",
+ "WPS Resources Corporation",
+ "Wyeth",
+ "Wyndham International Inc",
+ "Xcel Energy Inc",
+ "Xerox Corp",
+ "Xilinx Inc",
+ "XO Communications Inc",
+ "Yellow Corporation",
+ "York International Corp",
+ "Yum Brands Inc.",
+ "Zale Corporation",
+ "Zions Bancorporation"
+ ],
+
+ fileExtension : {
+ "raster" : ["bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw", "tiff"],
+ "vector" : ["3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "odg", "svg", "xar"],
+ "3d" : ["3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob", "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d"],
+ "document" : ["doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv", "rtf", "tex", "xhtml", "xps"]
+ },
+
+ // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json
+ timezones: [
+ {
+ "name": "Dateline Standard Time",
+ "abbr": "DST",
+ "offset": -12,
+ "isdst": false,
+ "text": "(UTC-12:00) International Date Line West",
+ "utc": [
+ "Etc/GMT+12"
+ ]
+ },
+ {
+ "name": "UTC-11",
+ "abbr": "U",
+ "offset": -11,
+ "isdst": false,
+ "text": "(UTC-11:00) Coordinated Universal Time-11",
+ "utc": [
+ "Etc/GMT+11",
+ "Pacific/Midway",
+ "Pacific/Niue",
+ "Pacific/Pago_Pago"
+ ]
+ },
+ {
+ "name": "Hawaiian Standard Time",
+ "abbr": "HST",
+ "offset": -10,
+ "isdst": false,
+ "text": "(UTC-10:00) Hawaii",
+ "utc": [
+ "Etc/GMT+10",
+ "Pacific/Honolulu",
+ "Pacific/Johnston",
+ "Pacific/Rarotonga",
+ "Pacific/Tahiti"
+ ]
+ },
+ {
+ "name": "Alaskan Standard Time",
+ "abbr": "AKDT",
+ "offset": -8,
+ "isdst": true,
+ "text": "(UTC-09:00) Alaska",
+ "utc": [
+ "America/Anchorage",
+ "America/Juneau",
+ "America/Nome",
+ "America/Sitka",
+ "America/Yakutat"
+ ]
+ },
+ {
+ "name": "Pacific Standard Time (Mexico)",
+ "abbr": "PDT",
+ "offset": -7,
+ "isdst": true,
+ "text": "(UTC-08:00) Baja California",
+ "utc": [
+ "America/Santa_Isabel"
+ ]
+ },
+ {
+ "name": "Pacific Standard Time",
+ "abbr": "PDT",
+ "offset": -7,
+ "isdst": true,
+ "text": "(UTC-08:00) Pacific Time (US & Canada)",
+ "utc": [
+ "America/Dawson",
+ "America/Los_Angeles",
+ "America/Tijuana",
+ "America/Vancouver",
+ "America/Whitehorse",
+ "PST8PDT"
+ ]
+ },
+ {
+ "name": "US Mountain Standard Time",
+ "abbr": "UMST",
+ "offset": -7,
+ "isdst": false,
+ "text": "(UTC-07:00) Arizona",
+ "utc": [
+ "America/Creston",
+ "America/Dawson_Creek",
+ "America/Hermosillo",
+ "America/Phoenix",
+ "Etc/GMT+7"
+ ]
+ },
+ {
+ "name": "Mountain Standard Time (Mexico)",
+ "abbr": "MDT",
+ "offset": -6,
+ "isdst": true,
+ "text": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
+ "utc": [
+ "America/Chihuahua",
+ "America/Mazatlan"
+ ]
+ },
+ {
+ "name": "Mountain Standard Time",
+ "abbr": "MDT",
+ "offset": -6,
+ "isdst": true,
+ "text": "(UTC-07:00) Mountain Time (US & Canada)",
+ "utc": [
+ "America/Boise",
+ "America/Cambridge_Bay",
+ "America/Denver",
+ "America/Edmonton",
+ "America/Inuvik",
+ "America/Ojinaga",
+ "America/Yellowknife",
+ "MST7MDT"
+ ]
+ },
+ {
+ "name": "Central America Standard Time",
+ "abbr": "CAST",
+ "offset": -6,
+ "isdst": false,
+ "text": "(UTC-06:00) Central America",
+ "utc": [
+ "America/Belize",
+ "America/Costa_Rica",
+ "America/El_Salvador",
+ "America/Guatemala",
+ "America/Managua",
+ "America/Tegucigalpa",
+ "Etc/GMT+6",
+ "Pacific/Galapagos"
+ ]
+ },
+ {
+ "name": "Central Standard Time",
+ "abbr": "CDT",
+ "offset": -5,
+ "isdst": true,
+ "text": "(UTC-06:00) Central Time (US & Canada)",
+ "utc": [
+ "America/Chicago",
+ "America/Indiana/Knox",
+ "America/Indiana/Tell_City",
+ "America/Matamoros",
+ "America/Menominee",
+ "America/North_Dakota/Beulah",
+ "America/North_Dakota/Center",
+ "America/North_Dakota/New_Salem",
+ "America/Rainy_River",
+ "America/Rankin_Inlet",
+ "America/Resolute",
+ "America/Winnipeg",
+ "CST6CDT"
+ ]
+ },
+ {
+ "name": "Central Standard Time (Mexico)",
+ "abbr": "CDT",
+ "offset": -5,
+ "isdst": true,
+ "text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
+ "utc": [
+ "America/Bahia_Banderas",
+ "America/Cancun",
+ "America/Merida",
+ "America/Mexico_City",
+ "America/Monterrey"
+ ]
+ },
+ {
+ "name": "Canada Central Standard Time",
+ "abbr": "CCST",
+ "offset": -6,
+ "isdst": false,
+ "text": "(UTC-06:00) Saskatchewan",
+ "utc": [
+ "America/Regina",
+ "America/Swift_Current"
+ ]
+ },
+ {
+ "name": "SA Pacific Standard Time",
+ "abbr": "SPST",
+ "offset": -5,
+ "isdst": false,
+ "text": "(UTC-05:00) Bogota, Lima, Quito",
+ "utc": [
+ "America/Bogota",
+ "America/Cayman",
+ "America/Coral_Harbour",
+ "America/Eirunepe",
+ "America/Guayaquil",
+ "America/Jamaica",
+ "America/Lima",
+ "America/Panama",
+ "America/Rio_Branco",
+ "Etc/GMT+5"
+ ]
+ },
+ {
+ "name": "Eastern Standard Time",
+ "abbr": "EDT",
+ "offset": -4,
+ "isdst": true,
+ "text": "(UTC-05:00) Eastern Time (US & Canada)",
+ "utc": [
+ "America/Detroit",
+ "America/Havana",
+ "America/Indiana/Petersburg",
+ "America/Indiana/Vincennes",
+ "America/Indiana/Winamac",
+ "America/Iqaluit",
+ "America/Kentucky/Monticello",
+ "America/Louisville",
+ "America/Montreal",
+ "America/Nassau",
+ "America/New_York",
+ "America/Nipigon",
+ "America/Pangnirtung",
+ "America/Port-au-Prince",
+ "America/Thunder_Bay",
+ "America/Toronto",
+ "EST5EDT"
+ ]
+ },
+ {
+ "name": "US Eastern Standard Time",
+ "abbr": "UEDT",
+ "offset": -4,
+ "isdst": true,
+ "text": "(UTC-05:00) Indiana (East)",
+ "utc": [
+ "America/Indiana/Marengo",
+ "America/Indiana/Vevay",
+ "America/Indianapolis"
+ ]
+ },
+ {
+ "name": "Venezuela Standard Time",
+ "abbr": "VST",
+ "offset": -4.5,
+ "isdst": false,
+ "text": "(UTC-04:30) Caracas",
+ "utc": [
+ "America/Caracas"
+ ]
+ },
+ {
+ "name": "Paraguay Standard Time",
+ "abbr": "PST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Asuncion",
+ "utc": [
+ "America/Asuncion"
+ ]
+ },
+ {
+ "name": "Atlantic Standard Time",
+ "abbr": "ADT",
+ "offset": -3,
+ "isdst": true,
+ "text": "(UTC-04:00) Atlantic Time (Canada)",
+ "utc": [
+ "America/Glace_Bay",
+ "America/Goose_Bay",
+ "America/Halifax",
+ "America/Moncton",
+ "America/Thule",
+ "Atlantic/Bermuda"
+ ]
+ },
+ {
+ "name": "Central Brazilian Standard Time",
+ "abbr": "CBST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Cuiaba",
+ "utc": [
+ "America/Campo_Grande",
+ "America/Cuiaba"
+ ]
+ },
+ {
+ "name": "SA Western Standard Time",
+ "abbr": "SWST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
+ "utc": [
+ "America/Anguilla",
+ "America/Antigua",
+ "America/Aruba",
+ "America/Barbados",
+ "America/Blanc-Sablon",
+ "America/Boa_Vista",
+ "America/Curacao",
+ "America/Dominica",
+ "America/Grand_Turk",
+ "America/Grenada",
+ "America/Guadeloupe",
+ "America/Guyana",
+ "America/Kralendijk",
+ "America/La_Paz",
+ "America/Lower_Princes",
+ "America/Manaus",
+ "America/Marigot",
+ "America/Martinique",
+ "America/Montserrat",
+ "America/Port_of_Spain",
+ "America/Porto_Velho",
+ "America/Puerto_Rico",
+ "America/Santo_Domingo",
+ "America/St_Barthelemy",
+ "America/St_Kitts",
+ "America/St_Lucia",
+ "America/St_Thomas",
+ "America/St_Vincent",
+ "America/Tortola",
+ "Etc/GMT+4"
+ ]
+ },
+ {
+ "name": "Pacific SA Standard Time",
+ "abbr": "PSST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Santiago",
+ "utc": [
+ "America/Santiago",
+ "Antarctica/Palmer"
+ ]
+ },
+ {
+ "name": "Newfoundland Standard Time",
+ "abbr": "NDT",
+ "offset": -2.5,
+ "isdst": true,
+ "text": "(UTC-03:30) Newfoundland",
+ "utc": [
+ "America/St_Johns"
+ ]
+ },
+ {
+ "name": "E. South America Standard Time",
+ "abbr": "ESAST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Brasilia",
+ "utc": [
+ "America/Sao_Paulo"
+ ]
+ },
+ {
+ "name": "Argentina Standard Time",
+ "abbr": "AST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Buenos Aires",
+ "utc": [
+ "America/Argentina/La_Rioja",
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Salta",
+ "America/Argentina/San_Juan",
+ "America/Argentina/San_Luis",
+ "America/Argentina/Tucuman",
+ "America/Argentina/Ushuaia",
+ "America/Buenos_Aires",
+ "America/Catamarca",
+ "America/Cordoba",
+ "America/Jujuy",
+ "America/Mendoza"
+ ]
+ },
+ {
+ "name": "SA Eastern Standard Time",
+ "abbr": "SEST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Cayenne, Fortaleza",
+ "utc": [
+ "America/Araguaina",
+ "America/Belem",
+ "America/Cayenne",
+ "America/Fortaleza",
+ "America/Maceio",
+ "America/Paramaribo",
+ "America/Recife",
+ "America/Santarem",
+ "Antarctica/Rothera",
+ "Atlantic/Stanley",
+ "Etc/GMT+3"
+ ]
+ },
+ {
+ "name": "Greenland Standard Time",
+ "abbr": "GDT",
+ "offset": -2,
+ "isdst": true,
+ "text": "(UTC-03:00) Greenland",
+ "utc": [
+ "America/Godthab"
+ ]
+ },
+ {
+ "name": "Montevideo Standard Time",
+ "abbr": "MST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Montevideo",
+ "utc": [
+ "America/Montevideo"
+ ]
+ },
+ {
+ "name": "Bahia Standard Time",
+ "abbr": "BST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Salvador",
+ "utc": [
+ "America/Bahia"
+ ]
+ },
+ {
+ "name": "UTC-02",
+ "abbr": "U",
+ "offset": -2,
+ "isdst": false,
+ "text": "(UTC-02:00) Coordinated Universal Time-02",
+ "utc": [
+ "America/Noronha",
+ "Atlantic/South_Georgia",
+ "Etc/GMT+2"
+ ]
+ },
+ {
+ "name": "Mid-Atlantic Standard Time",
+ "abbr": "MDT",
+ "offset": -1,
+ "isdst": true,
+ "text": "(UTC-02:00) Mid-Atlantic - Old"
+ },
+ {
+ "name": "Azores Standard Time",
+ "abbr": "ADT",
+ "offset": 0,
+ "isdst": true,
+ "text": "(UTC-01:00) Azores",
+ "utc": [
+ "America/Scoresbysund",
+ "Atlantic/Azores"
+ ]
+ },
+ {
+ "name": "Cape Verde Standard Time",
+ "abbr": "CVST",
+ "offset": -1,
+ "isdst": false,
+ "text": "(UTC-01:00) Cape Verde Is.",
+ "utc": [
+ "Atlantic/Cape_Verde",
+ "Etc/GMT+1"
+ ]
+ },
+ {
+ "name": "Morocco Standard Time",
+ "abbr": "MDT",
+ "offset": 1,
+ "isdst": true,
+ "text": "(UTC) Casablanca",
+ "utc": [
+ "Africa/Casablanca",
+ "Africa/El_Aaiun"
+ ]
+ },
+ {
+ "name": "UTC",
+ "abbr": "CUT",
+ "offset": 0,
+ "isdst": false,
+ "text": "(UTC) Coordinated Universal Time",
+ "utc": [
+ "America/Danmarkshavn",
+ "Etc/GMT"
+ ]
+ },
+ {
+ "name": "GMT Standard Time",
+ "abbr": "GDT",
+ "offset": 1,
+ "isdst": true,
+ "text": "(UTC) Dublin, Edinburgh, Lisbon, London",
+ "utc": [
+ "Atlantic/Canary",
+ "Atlantic/Faeroe",
+ "Atlantic/Madeira",
+ "Europe/Dublin",
+ "Europe/Guernsey",
+ "Europe/Isle_of_Man",
+ "Europe/Jersey",
+ "Europe/Lisbon",
+ "Europe/London"
+ ]
+ },
+ {
+ "name": "Greenwich Standard Time",
+ "abbr": "GST",
+ "offset": 0,
+ "isdst": false,
+ "text": "(UTC) Monrovia, Reykjavik",
+ "utc": [
+ "Africa/Abidjan",
+ "Africa/Accra",
+ "Africa/Bamako",
+ "Africa/Banjul",
+ "Africa/Bissau",
+ "Africa/Conakry",
+ "Africa/Dakar",
+ "Africa/Freetown",
+ "Africa/Lome",
+ "Africa/Monrovia",
+ "Africa/Nouakchott",
+ "Africa/Ouagadougou",
+ "Africa/Sao_Tome",
+ "Atlantic/Reykjavik",
+ "Atlantic/St_Helena"
+ ]
+ },
+ {
+ "name": "W. Europe Standard Time",
+ "abbr": "WEDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
+ "utc": [
+ "Arctic/Longyearbyen",
+ "Europe/Amsterdam",
+ "Europe/Andorra",
+ "Europe/Berlin",
+ "Europe/Busingen",
+ "Europe/Gibraltar",
+ "Europe/Luxembourg",
+ "Europe/Malta",
+ "Europe/Monaco",
+ "Europe/Oslo",
+ "Europe/Rome",
+ "Europe/San_Marino",
+ "Europe/Stockholm",
+ "Europe/Vaduz",
+ "Europe/Vatican",
+ "Europe/Vienna",
+ "Europe/Zurich"
+ ]
+ },
+ {
+ "name": "Central Europe Standard Time",
+ "abbr": "CEDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
+ "utc": [
+ "Europe/Belgrade",
+ "Europe/Bratislava",
+ "Europe/Budapest",
+ "Europe/Ljubljana",
+ "Europe/Podgorica",
+ "Europe/Prague",
+ "Europe/Tirane"
+ ]
+ },
+ {
+ "name": "Romance Standard Time",
+ "abbr": "RDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
+ "utc": [
+ "Africa/Ceuta",
+ "Europe/Brussels",
+ "Europe/Copenhagen",
+ "Europe/Madrid",
+ "Europe/Paris"
+ ]
+ },
+ {
+ "name": "Central European Standard Time",
+ "abbr": "CEDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
+ "utc": [
+ "Europe/Sarajevo",
+ "Europe/Skopje",
+ "Europe/Warsaw",
+ "Europe/Zagreb"
+ ]
+ },
+ {
+ "name": "W. Central Africa Standard Time",
+ "abbr": "WCAST",
+ "offset": 1,
+ "isdst": false,
+ "text": "(UTC+01:00) West Central Africa",
+ "utc": [
+ "Africa/Algiers",
+ "Africa/Bangui",
+ "Africa/Brazzaville",
+ "Africa/Douala",
+ "Africa/Kinshasa",
+ "Africa/Lagos",
+ "Africa/Libreville",
+ "Africa/Luanda",
+ "Africa/Malabo",
+ "Africa/Ndjamena",
+ "Africa/Niamey",
+ "Africa/Porto-Novo",
+ "Africa/Tunis",
+ "Etc/GMT-1"
+ ]
+ },
+ {
+ "name": "Namibia Standard Time",
+ "abbr": "NST",
+ "offset": 1,
+ "isdst": false,
+ "text": "(UTC+01:00) Windhoek",
+ "utc": [
+ "Africa/Windhoek"
+ ]
+ },
+ {
+ "name": "GTB Standard Time",
+ "abbr": "GDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Athens, Bucharest",
+ "utc": [
+ "Asia/Nicosia",
+ "Europe/Athens",
+ "Europe/Bucharest",
+ "Europe/Chisinau"
+ ]
+ },
+ {
+ "name": "Middle East Standard Time",
+ "abbr": "MEDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Beirut",
+ "utc": [
+ "Asia/Beirut"
+ ]
+ },
+ {
+ "name": "Egypt Standard Time",
+ "abbr": "EST",
+ "offset": 2,
+ "isdst": false,
+ "text": "(UTC+02:00) Cairo",
+ "utc": [
+ "Africa/Cairo"
+ ]
+ },
+ {
+ "name": "Syria Standard Time",
+ "abbr": "SDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Damascus",
+ "utc": [
+ "Asia/Damascus"
+ ]
+ },
+ {
+ "name": "E. Europe Standard Time",
+ "abbr": "EEDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) E. Europe"
+ },
+ {
+ "name": "South Africa Standard Time",
+ "abbr": "SAST",
+ "offset": 2,
+ "isdst": false,
+ "text": "(UTC+02:00) Harare, Pretoria",
+ "utc": [
+ "Africa/Blantyre",
+ "Africa/Bujumbura",
+ "Africa/Gaborone",
+ "Africa/Harare",
+ "Africa/Johannesburg",
+ "Africa/Kigali",
+ "Africa/Lubumbashi",
+ "Africa/Lusaka",
+ "Africa/Maputo",
+ "Africa/Maseru",
+ "Africa/Mbabane",
+ "Etc/GMT-2"
+ ]
+ },
+ {
+ "name": "FLE Standard Time",
+ "abbr": "FDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
+ "utc": [
+ "Europe/Helsinki",
+ "Europe/Kiev",
+ "Europe/Mariehamn",
+ "Europe/Riga",
+ "Europe/Sofia",
+ "Europe/Tallinn",
+ "Europe/Uzhgorod",
+ "Europe/Vilnius",
+ "Europe/Zaporozhye"
+ ]
+ },
+ {
+ "name": "Turkey Standard Time",
+ "abbr": "TDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Istanbul",
+ "utc": [
+ "Europe/Istanbul"
+ ]
+ },
+ {
+ "name": "Israel Standard Time",
+ "abbr": "JDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Jerusalem",
+ "utc": [
+ "Asia/Jerusalem"
+ ]
+ },
+ {
+ "name": "Libya Standard Time",
+ "abbr": "LST",
+ "offset": 2,
+ "isdst": false,
+ "text": "(UTC+02:00) Tripoli",
+ "utc": [
+ "Africa/Tripoli"
+ ]
+ },
+ {
+ "name": "Jordan Standard Time",
+ "abbr": "JST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Amman",
+ "utc": [
+ "Asia/Amman"
+ ]
+ },
+ {
+ "name": "Arabic Standard Time",
+ "abbr": "AST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Baghdad",
+ "utc": [
+ "Asia/Baghdad"
+ ]
+ },
+ {
+ "name": "Kaliningrad Standard Time",
+ "abbr": "KST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Kaliningrad, Minsk",
+ "utc": [
+ "Europe/Kaliningrad",
+ "Europe/Minsk"
+ ]
+ },
+ {
+ "name": "Arab Standard Time",
+ "abbr": "AST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Kuwait, Riyadh",
+ "utc": [
+ "Asia/Aden",
+ "Asia/Bahrain",
+ "Asia/Kuwait",
+ "Asia/Qatar",
+ "Asia/Riyadh"
+ ]
+ },
+ {
+ "name": "E. Africa Standard Time",
+ "abbr": "EAST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Nairobi",
+ "utc": [
+ "Africa/Addis_Ababa",
+ "Africa/Asmera",
+ "Africa/Dar_es_Salaam",
+ "Africa/Djibouti",
+ "Africa/Juba",
+ "Africa/Kampala",
+ "Africa/Khartoum",
+ "Africa/Mogadishu",
+ "Africa/Nairobi",
+ "Antarctica/Syowa",
+ "Etc/GMT-3",
+ "Indian/Antananarivo",
+ "Indian/Comoro",
+ "Indian/Mayotte"
+ ]
+ },
+ {
+ "name": "Iran Standard Time",
+ "abbr": "IDT",
+ "offset": 4.5,
+ "isdst": true,
+ "text": "(UTC+03:30) Tehran",
+ "utc": [
+ "Asia/Tehran"
+ ]
+ },
+ {
+ "name": "Arabian Standard Time",
+ "abbr": "AST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Abu Dhabi, Muscat",
+ "utc": [
+ "Asia/Dubai",
+ "Asia/Muscat",
+ "Etc/GMT-4"
+ ]
+ },
+ {
+ "name": "Azerbaijan Standard Time",
+ "abbr": "ADT",
+ "offset": 5,
+ "isdst": true,
+ "text": "(UTC+04:00) Baku",
+ "utc": [
+ "Asia/Baku"
+ ]
+ },
+ {
+ "name": "Russian Standard Time",
+ "abbr": "RST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Moscow, St. Petersburg, Volgograd",
+ "utc": [
+ "Europe/Moscow",
+ "Europe/Samara",
+ "Europe/Simferopol",
+ "Europe/Volgograd"
+ ]
+ },
+ {
+ "name": "Mauritius Standard Time",
+ "abbr": "MST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Port Louis",
+ "utc": [
+ "Indian/Mahe",
+ "Indian/Mauritius",
+ "Indian/Reunion"
+ ]
+ },
+ {
+ "name": "Georgian Standard Time",
+ "abbr": "GST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Tbilisi",
+ "utc": [
+ "Asia/Tbilisi"
+ ]
+ },
+ {
+ "name": "Caucasus Standard Time",
+ "abbr": "CST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Yerevan",
+ "utc": [
+ "Asia/Yerevan"
+ ]
+ },
+ {
+ "name": "Afghanistan Standard Time",
+ "abbr": "AST",
+ "offset": 4.5,
+ "isdst": false,
+ "text": "(UTC+04:30) Kabul",
+ "utc": [
+ "Asia/Kabul"
+ ]
+ },
+ {
+ "name": "West Asia Standard Time",
+ "abbr": "WAST",
+ "offset": 5,
+ "isdst": false,
+ "text": "(UTC+05:00) Ashgabat, Tashkent",
+ "utc": [
+ "Antarctica/Mawson",
+ "Asia/Aqtau",
+ "Asia/Aqtobe",
+ "Asia/Ashgabat",
+ "Asia/Dushanbe",
+ "Asia/Oral",
+ "Asia/Samarkand",
+ "Asia/Tashkent",
+ "Etc/GMT-5",
+ "Indian/Kerguelen",
+ "Indian/Maldives"
+ ]
+ },
+ {
+ "name": "Pakistan Standard Time",
+ "abbr": "PST",
+ "offset": 5,
+ "isdst": false,
+ "text": "(UTC+05:00) Islamabad, Karachi",
+ "utc": [
+ "Asia/Karachi"
+ ]
+ },
+ {
+ "name": "India Standard Time",
+ "abbr": "IST",
+ "offset": 5.5,
+ "isdst": false,
+ "text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
+ "utc": [
+ "Asia/Calcutta"
+ ]
+ },
+ {
+ "name": "Sri Lanka Standard Time",
+ "abbr": "SLST",
+ "offset": 5.5,
+ "isdst": false,
+ "text": "(UTC+05:30) Sri Jayawardenepura",
+ "utc": [
+ "Asia/Colombo"
+ ]
+ },
+ {
+ "name": "Nepal Standard Time",
+ "abbr": "NST",
+ "offset": 5.75,
+ "isdst": false,
+ "text": "(UTC+05:45) Kathmandu",
+ "utc": [
+ "Asia/Katmandu"
+ ]
+ },
+ {
+ "name": "Central Asia Standard Time",
+ "abbr": "CAST",
+ "offset": 6,
+ "isdst": false,
+ "text": "(UTC+06:00) Astana",
+ "utc": [
+ "Antarctica/Vostok",
+ "Asia/Almaty",
+ "Asia/Bishkek",
+ "Asia/Qyzylorda",
+ "Asia/Urumqi",
+ "Etc/GMT-6",
+ "Indian/Chagos"
+ ]
+ },
+ {
+ "name": "Bangladesh Standard Time",
+ "abbr": "BST",
+ "offset": 6,
+ "isdst": false,
+ "text": "(UTC+06:00) Dhaka",
+ "utc": [
+ "Asia/Dhaka",
+ "Asia/Thimphu"
+ ]
+ },
+ {
+ "name": "Ekaterinburg Standard Time",
+ "abbr": "EST",
+ "offset": 6,
+ "isdst": false,
+ "text": "(UTC+06:00) Ekaterinburg",
+ "utc": [
+ "Asia/Yekaterinburg"
+ ]
+ },
+ {
+ "name": "Myanmar Standard Time",
+ "abbr": "MST",
+ "offset": 6.5,
+ "isdst": false,
+ "text": "(UTC+06:30) Yangon (Rangoon)",
+ "utc": [
+ "Asia/Rangoon",
+ "Indian/Cocos"
+ ]
+ },
+ {
+ "name": "SE Asia Standard Time",
+ "abbr": "SAST",
+ "offset": 7,
+ "isdst": false,
+ "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
+ "utc": [
+ "Antarctica/Davis",
+ "Asia/Bangkok",
+ "Asia/Hovd",
+ "Asia/Jakarta",
+ "Asia/Phnom_Penh",
+ "Asia/Pontianak",
+ "Asia/Saigon",
+ "Asia/Vientiane",
+ "Etc/GMT-7",
+ "Indian/Christmas"
+ ]
+ },
+ {
+ "name": "N. Central Asia Standard Time",
+ "abbr": "NCAST",
+ "offset": 7,
+ "isdst": false,
+ "text": "(UTC+07:00) Novosibirsk",
+ "utc": [
+ "Asia/Novokuznetsk",
+ "Asia/Novosibirsk",
+ "Asia/Omsk"
+ ]
+ },
+ {
+ "name": "China Standard Time",
+ "abbr": "CST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
+ "utc": [
+ "Asia/Hong_Kong",
+ "Asia/Macau",
+ "Asia/Shanghai"
+ ]
+ },
+ {
+ "name": "North Asia Standard Time",
+ "abbr": "NAST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Krasnoyarsk",
+ "utc": [
+ "Asia/Krasnoyarsk"
+ ]
+ },
+ {
+ "name": "Singapore Standard Time",
+ "abbr": "MPST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Kuala Lumpur, Singapore",
+ "utc": [
+ "Asia/Brunei",
+ "Asia/Kuala_Lumpur",
+ "Asia/Kuching",
+ "Asia/Makassar",
+ "Asia/Manila",
+ "Asia/Singapore",
+ "Etc/GMT-8"
+ ]
+ },
+ {
+ "name": "W. Australia Standard Time",
+ "abbr": "WAST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Perth",
+ "utc": [
+ "Antarctica/Casey",
+ "Australia/Perth"
+ ]
+ },
+ {
+ "name": "Taipei Standard Time",
+ "abbr": "TST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Taipei",
+ "utc": [
+ "Asia/Taipei"
+ ]
+ },
+ {
+ "name": "Ulaanbaatar Standard Time",
+ "abbr": "UST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Ulaanbaatar",
+ "utc": [
+ "Asia/Choibalsan",
+ "Asia/Ulaanbaatar"
+ ]
+ },
+ {
+ "name": "North Asia East Standard Time",
+ "abbr": "NAEST",
+ "offset": 9,
+ "isdst": false,
+ "text": "(UTC+09:00) Irkutsk",
+ "utc": [
+ "Asia/Irkutsk"
+ ]
+ },
+ {
+ "name": "Tokyo Standard Time",
+ "abbr": "TST",
+ "offset": 9,
+ "isdst": false,
+ "text": "(UTC+09:00) Osaka, Sapporo, Tokyo",
+ "utc": [
+ "Asia/Dili",
+ "Asia/Jayapura",
+ "Asia/Tokyo",
+ "Etc/GMT-9",
+ "Pacific/Palau"
+ ]
+ },
+ {
+ "name": "Korea Standard Time",
+ "abbr": "KST",
+ "offset": 9,
+ "isdst": false,
+ "text": "(UTC+09:00) Seoul",
+ "utc": [
+ "Asia/Pyongyang",
+ "Asia/Seoul"
+ ]
+ },
+ {
+ "name": "Cen. Australia Standard Time",
+ "abbr": "CAST",
+ "offset": 9.5,
+ "isdst": false,
+ "text": "(UTC+09:30) Adelaide",
+ "utc": [
+ "Australia/Adelaide",
+ "Australia/Broken_Hill"
+ ]
+ },
+ {
+ "name": "AUS Central Standard Time",
+ "abbr": "ACST",
+ "offset": 9.5,
+ "isdst": false,
+ "text": "(UTC+09:30) Darwin",
+ "utc": [
+ "Australia/Darwin"
+ ]
+ },
+ {
+ "name": "E. Australia Standard Time",
+ "abbr": "EAST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Brisbane",
+ "utc": [
+ "Australia/Brisbane",
+ "Australia/Lindeman"
+ ]
+ },
+ {
+ "name": "AUS Eastern Standard Time",
+ "abbr": "AEST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
+ "utc": [
+ "Australia/Melbourne",
+ "Australia/Sydney"
+ ]
+ },
+ {
+ "name": "West Pacific Standard Time",
+ "abbr": "WPST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Guam, Port Moresby",
+ "utc": [
+ "Antarctica/DumontDUrville",
+ "Etc/GMT-10",
+ "Pacific/Guam",
+ "Pacific/Port_Moresby",
+ "Pacific/Saipan",
+ "Pacific/Truk"
+ ]
+ },
+ {
+ "name": "Tasmania Standard Time",
+ "abbr": "TST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Hobart",
+ "utc": [
+ "Australia/Currie",
+ "Australia/Hobart"
+ ]
+ },
+ {
+ "name": "Yakutsk Standard Time",
+ "abbr": "YST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Yakutsk",
+ "utc": [
+ "Asia/Chita",
+ "Asia/Khandyga",
+ "Asia/Yakutsk"
+ ]
+ },
+ {
+ "name": "Central Pacific Standard Time",
+ "abbr": "CPST",
+ "offset": 11,
+ "isdst": false,
+ "text": "(UTC+11:00) Solomon Is., New Caledonia",
+ "utc": [
+ "Antarctica/Macquarie",
+ "Etc/GMT-11",
+ "Pacific/Efate",
+ "Pacific/Guadalcanal",
+ "Pacific/Kosrae",
+ "Pacific/Noumea",
+ "Pacific/Ponape"
+ ]
+ },
+ {
+ "name": "Vladivostok Standard Time",
+ "abbr": "VST",
+ "offset": 11,
+ "isdst": false,
+ "text": "(UTC+11:00) Vladivostok",
+ "utc": [
+ "Asia/Sakhalin",
+ "Asia/Ust-Nera",
+ "Asia/Vladivostok"
+ ]
+ },
+ {
+ "name": "New Zealand Standard Time",
+ "abbr": "NZST",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Auckland, Wellington",
+ "utc": [
+ "Antarctica/McMurdo",
+ "Pacific/Auckland"
+ ]
+ },
+ {
+ "name": "UTC+12",
+ "abbr": "U",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Coordinated Universal Time+12",
+ "utc": [
+ "Etc/GMT-12",
+ "Pacific/Funafuti",
+ "Pacific/Kwajalein",
+ "Pacific/Majuro",
+ "Pacific/Nauru",
+ "Pacific/Tarawa",
+ "Pacific/Wake",
+ "Pacific/Wallis"
+ ]
+ },
+ {
+ "name": "Fiji Standard Time",
+ "abbr": "FST",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Fiji",
+ "utc": [
+ "Pacific/Fiji"
+ ]
+ },
+ {
+ "name": "Magadan Standard Time",
+ "abbr": "MST",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Magadan",
+ "utc": [
+ "Asia/Anadyr",
+ "Asia/Kamchatka",
+ "Asia/Magadan",
+ "Asia/Srednekolymsk"
+ ]
+ },
+ {
+ "name": "Kamchatka Standard Time",
+ "abbr": "KDT",
+ "offset": 13,
+ "isdst": true,
+ "text": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
+ },
+ {
+ "name": "Tonga Standard Time",
+ "abbr": "TST",
+ "offset": 13,
+ "isdst": false,
+ "text": "(UTC+13:00) Nuku'alofa",
+ "utc": [
+ "Etc/GMT-13",
+ "Pacific/Enderbury",
+ "Pacific/Fakaofo",
+ "Pacific/Tongatapu"
+ ]
+ },
+ {
+ "name": "Samoa Standard Time",
+ "abbr": "SST",
+ "offset": 13,
+ "isdst": false,
+ "text": "(UTC+13:00) Samoa",
+ "utc": [
+ "Pacific/Apia"
+ ]
+ }
+ ],
+ //List source: http://answers.google.com/answers/threadview/id/589312.html
+ profession: [
+ "Airline Pilot",
+ "Academic Team",
+ "Accountant",
+ "Account Executive",
+ "Actor",
+ "Actuary",
+ "Acquisition Analyst",
+ "Administrative Asst.",
+ "Administrative Analyst",
+ "Administrator",
+ "Advertising Director",
+ "Aerospace Engineer",
+ "Agent",
+ "Agricultural Inspector",
+ "Agricultural Scientist",
+ "Air Traffic Controller",
+ "Animal Trainer",
+ "Anthropologist",
+ "Appraiser",
+ "Architect",
+ "Art Director",
+ "Artist",
+ "Astronomer",
+ "Athletic Coach",
+ "Auditor",
+ "Author",
+ "Baker",
+ "Banker",
+ "Bankruptcy Attorney",
+ "Benefits Manager",
+ "Biologist",
+ "Bio-feedback Specialist",
+ "Biomedical Engineer",
+ "Biotechnical Researcher",
+ "Broadcaster",
+ "Broker",
+ "Building Manager",
+ "Building Contractor",
+ "Building Inspector",
+ "Business Analyst",
+ "Business Planner",
+ "Business Manager",
+ "Buyer",
+ "Call Center Manager",
+ "Career Counselor",
+ "Cash Manager",
+ "Ceramic Engineer",
+ "Chief Executive Officer",
+ "Chief Operation Officer",
+ "Chef",
+ "Chemical Engineer",
+ "Chemist",
+ "Child Care Manager",
+ "Chief Medical Officer",
+ "Chiropractor",
+ "Cinematographer",
+ "City Housing Manager",
+ "City Manager",
+ "Civil Engineer",
+ "Claims Manager",
+ "Clinical Research Assistant",
+ "Collections Manager",
+ "Compliance Manager",
+ "Comptroller",
+ "Computer Manager",
+ "Commercial Artist",
+ "Communications Affairs Director",
+ "Communications Director",
+ "Communications Engineer",
+ "Compensation Analyst",
+ "Computer Programmer",
+ "Computer Ops. Manager",
+ "Computer Engineer",
+ "Computer Operator",
+ "Computer Graphics Specialist",
+ "Construction Engineer",
+ "Construction Manager",
+ "Consultant",
+ "Consumer Relations Manager",
+ "Contract Administrator",
+ "Copyright Attorney",
+ "Copywriter",
+ "Corporate Planner",
+ "Corrections Officer",
+ "Cosmetologist",
+ "Credit Analyst",
+ "Cruise Director",
+ "Chief Information Officer",
+ "Chief Technology Officer",
+ "Customer Service Manager",
+ "Cryptologist",
+ "Dancer",
+ "Data Security Manager",
+ "Database Manager",
+ "Day Care Instructor",
+ "Dentist",
+ "Designer",
+ "Design Engineer",
+ "Desktop Publisher",
+ "Developer",
+ "Development Officer",
+ "Diamond Merchant",
+ "Dietitian",
+ "Direct Marketer",
+ "Director",
+ "Distribution Manager",
+ "Diversity Manager",
+ "Economist",
+ "EEO Compliance Manager",
+ "Editor",
+ "Education Adminator",
+ "Electrical Engineer",
+ "Electro Optical Engineer",
+ "Electronics Engineer",
+ "Embassy Management",
+ "Employment Agent",
+ "Engineer Technician",
+ "Entrepreneur",
+ "Environmental Analyst",
+ "Environmental Attorney",
+ "Environmental Engineer",
+ "Environmental Specialist",
+ "Escrow Officer",
+ "Estimator",
+ "Executive Assistant",
+ "Executive Director",
+ "Executive Recruiter",
+ "Facilities Manager",
+ "Family Counselor",
+ "Fashion Events Manager",
+ "Fashion Merchandiser",
+ "Fast Food Manager",
+ "Film Producer",
+ "Film Production Assistant",
+ "Financial Analyst",
+ "Financial Planner",
+ "Financier",
+ "Fine Artist",
+ "Wildlife Specialist",
+ "Fitness Consultant",
+ "Flight Attendant",
+ "Flight Engineer",
+ "Floral Designer",
+ "Food & Beverage Director",
+ "Food Service Manager",
+ "Forestry Technician",
+ "Franchise Management",
+ "Franchise Sales",
+ "Fraud Investigator",
+ "Freelance Writer",
+ "Fund Raiser",
+ "General Manager",
+ "Geologist",
+ "General Counsel",
+ "Geriatric Specialist",
+ "Gerontologist",
+ "Glamour Photographer",
+ "Golf Club Manager",
+ "Gourmet Chef",
+ "Graphic Designer",
+ "Grounds Keeper",
+ "Hazardous Waste Manager",
+ "Health Care Manager",
+ "Health Therapist",
+ "Health Service Administrator",
+ "Hearing Officer",
+ "Home Economist",
+ "Horticulturist",
+ "Hospital Administrator",
+ "Hotel Manager",
+ "Human Resources Manager",
+ "Importer",
+ "Industrial Designer",
+ "Industrial Engineer",
+ "Information Director",
+ "Inside Sales",
+ "Insurance Adjuster",
+ "Interior Decorator",
+ "Internal Controls Director",
+ "International Acct.",
+ "International Courier",
+ "International Lawyer",
+ "Interpreter",
+ "Investigator",
+ "Investment Banker",
+ "Investment Manager",
+ "IT Architect",
+ "IT Project Manager",
+ "IT Systems Analyst",
+ "Jeweler",
+ "Joint Venture Manager",
+ "Journalist",
+ "Labor Negotiator",
+ "Labor Organizer",
+ "Labor Relations Manager",
+ "Lab Services Director",
+ "Lab Technician",
+ "Land Developer",
+ "Landscape Architect",
+ "Law Enforcement Officer",
+ "Lawyer",
+ "Lead Software Engineer",
+ "Lead Software Test Engineer",
+ "Leasing Manager",
+ "Legal Secretary",
+ "Library Manager",
+ "Litigation Attorney",
+ "Loan Officer",
+ "Lobbyist",
+ "Logistics Manager",
+ "Maintenance Manager",
+ "Management Consultant",
+ "Managed Care Director",
+ "Managing Partner",
+ "Manufacturing Director",
+ "Manpower Planner",
+ "Marine Biologist",
+ "Market Res. Analyst",
+ "Marketing Director",
+ "Materials Manager",
+ "Mathematician",
+ "Membership Chairman",
+ "Mechanic",
+ "Mechanical Engineer",
+ "Media Buyer",
+ "Medical Investor",
+ "Medical Secretary",
+ "Medical Technician",
+ "Mental Health Counselor",
+ "Merchandiser",
+ "Metallurgical Engineering",
+ "Meteorologist",
+ "Microbiologist",
+ "MIS Manager",
+ "Motion Picture Director",
+ "Multimedia Director",
+ "Musician",
+ "Network Administrator",
+ "Network Specialist",
+ "Network Operator",
+ "New Product Manager",
+ "Novelist",
+ "Nuclear Engineer",
+ "Nuclear Specialist",
+ "Nutritionist",
+ "Nursing Administrator",
+ "Occupational Therapist",
+ "Oceanographer",
+ "Office Manager",
+ "Operations Manager",
+ "Operations Research Director",
+ "Optical Technician",
+ "Optometrist",
+ "Organizational Development Manager",
+ "Outplacement Specialist",
+ "Paralegal",
+ "Park Ranger",
+ "Patent Attorney",
+ "Payroll Specialist",
+ "Personnel Specialist",
+ "Petroleum Engineer",
+ "Pharmacist",
+ "Photographer",
+ "Physical Therapist",
+ "Physician",
+ "Physician Assistant",
+ "Physicist",
+ "Planning Director",
+ "Podiatrist",
+ "Political Analyst",
+ "Political Scientist",
+ "Politician",
+ "Portfolio Manager",
+ "Preschool Management",
+ "Preschool Teacher",
+ "Principal",
+ "Private Banker",
+ "Private Investigator",
+ "Probation Officer",
+ "Process Engineer",
+ "Producer",
+ "Product Manager",
+ "Product Engineer",
+ "Production Engineer",
+ "Production Planner",
+ "Professional Athlete",
+ "Professional Coach",
+ "Professor",
+ "Project Engineer",
+ "Project Manager",
+ "Program Manager",
+ "Property Manager",
+ "Public Administrator",
+ "Public Safety Director",
+ "PR Specialist",
+ "Publisher",
+ "Purchasing Agent",
+ "Publishing Director",
+ "Quality Assurance Specialist",
+ "Quality Control Engineer",
+ "Quality Control Inspector",
+ "Radiology Manager",
+ "Railroad Engineer",
+ "Real Estate Broker",
+ "Recreational Director",
+ "Recruiter",
+ "Redevelopment Specialist",
+ "Regulatory Affairs Manager",
+ "Registered Nurse",
+ "Rehabilitation Counselor",
+ "Relocation Manager",
+ "Reporter",
+ "Research Specialist",
+ "Restaurant Manager",
+ "Retail Store Manager",
+ "Risk Analyst",
+ "Safety Engineer",
+ "Sales Engineer",
+ "Sales Trainer",
+ "Sales Promotion Manager",
+ "Sales Representative",
+ "Sales Manager",
+ "Service Manager",
+ "Sanitation Engineer",
+ "Scientific Programmer",
+ "Scientific Writer",
+ "Securities Analyst",
+ "Security Consultant",
+ "Security Director",
+ "Seminar Presenter",
+ "Ship's Officer",
+ "Singer",
+ "Social Director",
+ "Social Program Planner",
+ "Social Research",
+ "Social Scientist",
+ "Social Worker",
+ "Sociologist",
+ "Software Developer",
+ "Software Engineer",
+ "Software Test Engineer",
+ "Soil Scientist",
+ "Special Events Manager",
+ "Special Education Teacher",
+ "Special Projects Director",
+ "Speech Pathologist",
+ "Speech Writer",
+ "Sports Event Manager",
+ "Statistician",
+ "Store Manager",
+ "Strategic Alliance Director",
+ "Strategic Planning Director",
+ "Stress Reduction Specialist",
+ "Stockbroker",
+ "Surveyor",
+ "Structural Engineer",
+ "Superintendent",
+ "Supply Chain Director",
+ "System Engineer",
+ "Systems Analyst",
+ "Systems Programmer",
+ "System Administrator",
+ "Tax Specialist",
+ "Teacher",
+ "Technical Support Specialist",
+ "Technical Illustrator",
+ "Technical Writer",
+ "Technology Director",
+ "Telecom Analyst",
+ "Telemarketer",
+ "Theatrical Director",
+ "Title Examiner",
+ "Tour Escort",
+ "Tour Guide Director",
+ "Traffic Manager",
+ "Trainer Translator",
+ "Transportation Manager",
+ "Travel Agent",
+ "Treasurer",
+ "TV Programmer",
+ "Underwriter",
+ "Union Representative",
+ "University Administrator",
+ "University Dean",
+ "Urban Planner",
+ "Veterinarian",
+ "Vendor Relations Director",
+ "Viticulturist",
+ "Warehouse Manager"
+ ],
+ animals : {
+ //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals
+ "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"],
+ //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/
+ "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"],
+ "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"],
+ "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"],
+ //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html
+ "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"],
+ //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm
+ "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"],
+ //list of zoo animals comes from https://bronxzoo.com/animals
+ "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"]
+ },
+ primes: [
+ // 1230 first primes, i.e. all primes up to the first one greater than 10000, inclusive.
+ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023,5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297,5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653,5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,5779,5783,5791,5801,5807,5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,5903,5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,6211,6217,6221,6229,6247,6257,6263,6269,6271,6277,6287,6299,6301,6311,6317,6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,6397,6421,6427,6449,6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,6733,6737,6761,6763,6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,6863,6869,6871,6883,6899,6907,6911,6917,6947,6949,6959,6961,6967,6971,6977,6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,7103,7109,7121,7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,7253,7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451,7457,7459,7477,7481,7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,7549,7559,7561,7573,7577,7583,7589,7591,7603,7607,7621,7639,7643,7649,7669,7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,7789,7793,7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919,7927,7933,7937,7949,7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8087,8089,8093,8101,8111,8117,8123,8147,8161,8167,8171,8179,8191,8209,8219,8221,8231,8233,8237,8243,8263,8269,8273,8287,8291,8293,8297,8311,8317,8329,8353,8363,8369,8377,8387,8389,8419,8423,8429,8431,8443,8447,8461,8467,8501,8513,8521,8527,8537,8539,8543,8563,8573,8581,8597,8599,8609,8623,8627,8629,8641,8647,8663,8669,8677,8681,8689,8693,8699,8707,8713,8719,8731,8737,8741,8747,8753,8761,8779,8783,8803,8807,8819,8821,8831,8837,8839,8849,8861,8863,8867,8887,8893,8923,8929,8933,8941,8951,8963,8969,8971,8999,9001,9007,9011,9013,9029,9041,9043,9049,9059,9067,9091,9103,9109,9127,9133,9137,9151,9157,9161,9173,9181,9187,9199,9203,9209,9221,9227,9239,9241,9257,9277,9281,9283,9293,9311,9319,9323,9337,9341,9343,9349,9371,9377,9391,9397,9403,9413,9419,9421,9431,9433,9437,9439,9461,9463,9467,9473,9479,9491,9497,9511,9521,9533,9539,9547,9551,9587,9601,9613,9619,9623,9629,9631,9643,9649,9661,9677,9679,9689,9697,9719,9721,9733,9739,9743,9749,9767,9769,9781,9787,9791,9803,9811,9817,9829,9833,9839,9851,9857,9859,9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,9967,9973,10007
+ ],
+ emotions: [
+ "love",
+ "joy",
+ "surprise",
+ "anger",
+ "sadness",
+ "fear"
+ ],
+ };
+
+ var o_hasOwnProperty = Object.prototype.hasOwnProperty;
+ var o_keys = (Object.keys || function(obj) {
+ var result = [];
+ for (var key in obj) {
+ if (o_hasOwnProperty.call(obj, key)) {
+ result.push(key);
+ }
+ }
+
+ return result;
+ });
+
+
+ function _copyObject(source, target) {
+ var keys = o_keys(source);
+ var key;
+
+ for (var i = 0, l = keys.length; i < l; i++) {
+ key = keys[i];
+ target[key] = source[key] || target[key];
+ }
+ }
+
+ function _copyArray(source, target) {
+ for (var i = 0, l = source.length; i < l; i++) {
+ target[i] = source[i];
+ }
+ }
+
+ function copyObject(source, _target) {
+ var isArray = Array.isArray(source);
+ var target = _target || (isArray ? new Array(source.length) : {});
+
+ if (isArray) {
+ _copyArray(source, target);
+ } else {
+ _copyObject(source, target);
+ }
+
+ return target;
+ }
+
+ /** Get the data based on key**/
+ Chance.prototype.get = function (name) {
+ return copyObject(data[name]);
+ };
+
+ // Mac Address
+ Chance.prototype.mac_address = function(options){
+ // typically mac addresses are separated by ":"
+ // however they can also be separated by "-"
+ // the network variant uses a dot every fourth byte
+
+ options = initOptions(options);
+ if(!options.separator) {
+ options.separator = options.networkVersion ? "." : ":";
+ }
+
+ var mac_pool="ABCDEF1234567890",
+ mac = "";
+ if(!options.networkVersion) {
+ mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);
+ } else {
+ mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);
+ }
+
+ return mac;
+ };
+
+ Chance.prototype.normal = function (options) {
+ options = initOptions(options, {mean : 0, dev : 1, pool : []});
+
+ testRange(
+ options.pool.constructor !== Array,
+ "Chance: The pool option must be a valid array."
+ );
+ testRange(
+ typeof options.mean !== 'number',
+ "Chance: Mean (mean) must be a number"
+ );
+ testRange(
+ typeof options.dev !== 'number',
+ "Chance: Standard deviation (dev) must be a number"
+ );
+
+ // If a pool has been passed, then we are returning an item from that pool,
+ // using the normal distribution settings that were passed in
+ if (options.pool.length > 0) {
+ return this.normal_pool(options);
+ }
+
+ // The Marsaglia Polar method
+ var s, u, v, norm,
+ mean = options.mean,
+ dev = options.dev;
+
+ do {
+ // U and V are from the uniform distribution on (-1, 1)
+ u = this.random() * 2 - 1;
+ v = this.random() * 2 - 1;
+
+ s = u * u + v * v;
+ } while (s >= 1);
+
+ // Compute the standard normal variate
+ norm = u * Math.sqrt(-2 * Math.log(s) / s);
+
+ // Shape and scale
+ return dev * norm + mean;
+ };
+
+ Chance.prototype.normal_pool = function(options) {
+ var performanceCounter = 0;
+ do {
+ var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));
+ if (idx < options.pool.length && idx >= 0) {
+ return options.pool[idx];
+ } else {
+ performanceCounter++;
+ }
+ } while(performanceCounter < 100);
+
+ throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.");
+ };
+
+ Chance.prototype.radio = function (options) {
+ // Initial Letter (Typically Designated by Side of Mississippi River)
+ options = initOptions(options, {side : "?"});
+ var fl = "";
+ switch (options.side.toLowerCase()) {
+ case "east":
+ case "e":
+ fl = "W";
+ break;
+ case "west":
+ case "w":
+ fl = "K";
+ break;
+ default:
+ fl = this.character({pool: "KW"});
+ break;
+ }
+
+ return fl + this.character({alpha: true, casing: "upper"}) +
+ this.character({alpha: true, casing: "upper"}) +
+ this.character({alpha: true, casing: "upper"});
+ };
+
+ // Set the data as key and data or the data map
+ Chance.prototype.set = function (name, values) {
+ if (typeof name === "string") {
+ data[name] = values;
+ } else {
+ data = copyObject(name, data);
+ }
+ };
+
+ Chance.prototype.tv = function (options) {
+ return this.radio(options);
+ };
+
+ // ID number for Brazil companies
+ Chance.prototype.cnpj = function () {
+ var n = this.n(this.natural, 8, { max: 9 });
+ 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;
+ d1 = 11 - (d1 % 11);
+ if (d1>=10){
+ d1 = 0;
+ }
+ 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;
+ d2 = 11 - (d2 % 11);
+ if (d2>=10){
+ d2 = 0;
+ }
+ return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;
+ };
+
+ Chance.prototype.emotion = function () {
+ return this.pick(this.get("emotions"));
+ };
+
+ // -- End Miscellaneous --
+
+ Chance.prototype.mersenne_twister = function (seed) {
+ return new MersenneTwister(seed);
+ };
+
+ Chance.prototype.blueimp_md5 = function () {
+ return new BlueImpMD5();
+ };
+
+ // Mersenne Twister from https://gist.github.com/banksean/300494
+ /*
+ A C-program for MT19937, with initialization improved 2002/1/26.
+ Coded by Takuji Nishimura and Makoto Matsumoto.
+
+ Before using, initialize the state by using init_genrand(seed)
+ or init_by_array(init_key, key_length).
+
+ Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. The names of its contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ Any feedback is very welcome.
+ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+ email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
+ */
+ var MersenneTwister = function (seed) {
+ if (seed === undefined) {
+ // kept random number same size as time used previously to ensure no unexpected results downstream
+ seed = Math.floor(Math.random()*Math.pow(10,13));
+ }
+ /* Period parameters */
+ this.N = 624;
+ this.M = 397;
+ this.MATRIX_A = 0x9908b0df; /* constant vector a */
+ this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
+ this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
+
+ this.mt = new Array(this.N); /* the array for the state vector */
+ this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */
+
+ this.init_genrand(seed);
+ };
+
+ /* initializes mt[N] with a seed */
+ MersenneTwister.prototype.init_genrand = function (s) {
+ this.mt[0] = s >>> 0;
+ for (this.mti = 1; this.mti < this.N; this.mti++) {
+ s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);
+ this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;
+ /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
+ /* In the previous versions, MSBs of the seed affect */
+ /* only MSBs of the array mt[]. */
+ /* 2002/01/09 modified by Makoto Matsumoto */
+ this.mt[this.mti] >>>= 0;
+ /* for >32 bit machines */
+ }
+ };
+
+ /* initialize by an array with array-length */
+ /* init_key is the array for initializing keys */
+ /* key_length is its length */
+ /* slight change for C++, 2004/2/26 */
+ MersenneTwister.prototype.init_by_array = function (init_key, key_length) {
+ var i = 1, j = 0, k, s;
+ this.init_genrand(19650218);
+ k = (this.N > key_length ? this.N : key_length);
+ for (; k; k--) {
+ s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
+ this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */
+ this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
+ i++;
+ j++;
+ if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
+ if (j >= key_length) { j = 0; }
+ }
+ for (k = this.N - 1; k; k--) {
+ s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
+ this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */
+ this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
+ i++;
+ if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
+ }
+
+ this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
+ };
+
+ /* generates a random number on [0,0xffffffff]-interval */
+ MersenneTwister.prototype.genrand_int32 = function () {
+ var y;
+ var mag01 = new Array(0x0, this.MATRIX_A);
+ /* mag01[x] = x * MATRIX_A for x=0,1 */
+
+ if (this.mti >= this.N) { /* generate N words at one time */
+ var kk;
+
+ if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */
+ this.init_genrand(5489); /* a default initial seed is used */
+ }
+ for (kk = 0; kk < this.N - this.M; kk++) {
+ y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
+ this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
+ }
+ for (;kk < this.N - 1; kk++) {
+ y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
+ this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
+ }
+ y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
+ this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
+
+ this.mti = 0;
+ }
+
+ y = this.mt[this.mti++];
+
+ /* Tempering */
+ y ^= (y >>> 11);
+ y ^= (y << 7) & 0x9d2c5680;
+ y ^= (y << 15) & 0xefc60000;
+ y ^= (y >>> 18);
+
+ return y >>> 0;
+ };
+
+ /* generates a random number on [0,0x7fffffff]-interval */
+ MersenneTwister.prototype.genrand_int31 = function () {
+ return (this.genrand_int32() >>> 1);
+ };
+
+ /* generates a random number on [0,1]-real-interval */
+ MersenneTwister.prototype.genrand_real1 = function () {
+ return this.genrand_int32() * (1.0 / 4294967295.0);
+ /* divided by 2^32-1 */
+ };
+
+ /* generates a random number on [0,1)-real-interval */
+ MersenneTwister.prototype.random = function () {
+ return this.genrand_int32() * (1.0 / 4294967296.0);
+ /* divided by 2^32 */
+ };
+
+ /* generates a random number on (0,1)-real-interval */
+ MersenneTwister.prototype.genrand_real3 = function () {
+ return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
+ /* divided by 2^32 */
+ };
+
+ /* generates a random number on [0,1) with 53-bit resolution*/
+ MersenneTwister.prototype.genrand_res53 = function () {
+ var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;
+ return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
+ };
+
+ // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5
+ var BlueImpMD5 = function () {};
+
+ BlueImpMD5.prototype.VERSION = '1.0.1';
+
+ /*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+ BlueImpMD5.prototype.safe_add = function safe_add(x, y) {
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF),
+ msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+ };
+
+ /*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+ BlueImpMD5.prototype.bit_roll = function (num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+ };
+
+ /*
+ * These functions implement the five basic operations the algorithm uses.
+ */
+ BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {
+ return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);
+ };
+ BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+ };
+ BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+ };
+ BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);
+ };
+ BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+ };
+
+ /*
+ * Calculate the MD5 of an array of little-endian words, and a bit length.
+ */
+ BlueImpMD5.prototype.binl_md5 = function (x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i, olda, oldb, oldc, oldd,
+ a = 1732584193,
+ b = -271733879,
+ c = -1732584194,
+ d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);
+ d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);
+ a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);
+ c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);
+ d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = this.safe_add(a, olda);
+ b = this.safe_add(b, oldb);
+ c = this.safe_add(c, oldc);
+ d = this.safe_add(d, oldd);
+ }
+ return [a, b, c, d];
+ };
+
+ /*
+ * Convert an array of little-endian words to a string
+ */
+ BlueImpMD5.prototype.binl2rstr = function (input) {
+ var i,
+ output = '';
+ for (i = 0; i < input.length * 32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
+ }
+ return output;
+ };
+
+ /*
+ * Convert a raw string to an array of little-endian words
+ * Characters >255 have their high-byte silently ignored.
+ */
+ BlueImpMD5.prototype.rstr2binl = function (input) {
+ var i,
+ output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ for (i = 0; i < input.length * 8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
+ }
+ return output;
+ };
+
+ /*
+ * Calculate the MD5 of a raw string
+ */
+ BlueImpMD5.prototype.rstr_md5 = function (s) {
+ return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));
+ };
+
+ /*
+ * Calculate the HMAC-MD5, of a key and some data (raw strings)
+ */
+ BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {
+ var i,
+ bkey = this.rstr2binl(key),
+ ipad = [],
+ opad = [],
+ hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = this.binl_md5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+ hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
+ return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));
+ };
+
+ /*
+ * Convert a raw string to a hex string
+ */
+ BlueImpMD5.prototype.rstr2hex = function (input) {
+ var hex_tab = '0123456789abcdef',
+ output = '',
+ x,
+ i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hex_tab.charAt((x >>> 4) & 0x0F) +
+ hex_tab.charAt(x & 0x0F);
+ }
+ return output;
+ };
+
+ /*
+ * Encode a string as utf-8
+ */
+ BlueImpMD5.prototype.str2rstr_utf8 = function (input) {
+ return unescape(encodeURIComponent(input));
+ };
+
+ /*
+ * Take string arguments and return either raw or hex encoded strings
+ */
+ BlueImpMD5.prototype.raw_md5 = function (s) {
+ return this.rstr_md5(this.str2rstr_utf8(s));
+ };
+ BlueImpMD5.prototype.hex_md5 = function (s) {
+ return this.rstr2hex(this.raw_md5(s));
+ };
+ BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {
+ return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));
+ };
+ BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {
+ return this.rstr2hex(this.raw_hmac_md5(k, d));
+ };
+
+ BlueImpMD5.prototype.md5 = function (string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return this.hex_md5(string);
+ }
+
+ return this.raw_md5(string);
+ }
+
+ if (!raw) {
+ return this.hex_hmac_md5(key, string);
+ }
+
+ return this.raw_hmac_md5(key, string);
+ };
+
+ // CommonJS module
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = Chance;
+ }
+ exports.Chance = Chance;
+ }
+
+ // Register as an anonymous AMD module
+ if (typeof define === 'function' && define.amd) {
+ define([], function () {
+ return Chance;
+ });
+ }
+
+ // if there is a importsScrips object define chance for worker
+ // allows worker to use full Chance functionality with seed
+ if (typeof importScripts !== 'undefined') {
+ chance = new Chance();
+ self.Chance = Chance;
+ }
+
+ // If there is a window object, that at least has a document property,
+ // instantiate and define chance on the window
+ if (typeof window === "object" && typeof window.document === "object") {
+ window.Chance = Chance;
+ window.chance = new Chance();
+ }
+})();
diff --git a/src/node_modules/chance/dist/chance.min.js b/src/node_modules/chance/dist/chance.min.js
new file mode 100644
index 0000000..da9dce7
--- /dev/null
+++ b/src/node_modules/chance/dist/chance.min.js
@@ -0,0 +1,2 @@
+!function(){function a(e){if(!(this instanceof a))return e||(e=null),null===e?new a:new a(e);if("function"==typeof e)return this.random=e,this;arguments.length&&(this.seed=0);for(var n=0;n<arguments.length;n++){var i=0;if("[object String]"===Object.prototype.toString.call(arguments[n]))for(var r=0;r<arguments[n].length;r++){for(var o=0,t=0;t<arguments[n].length;t++)o=arguments[n].charCodeAt(t)+(o<<6)+(o<<16)-o;i+=o}else i=arguments[n];this.seed+=(arguments.length-n)*i}return this.mt=this.mersenne_twister(this.seed),this.bimd5=this.blueimp_md5(),this.random=function(){return this.mt.random(this.seed)},this}function e(a,e){if(a=a||{},e)for(var n in e)void 0===a[n]&&(a[n]=e[n]);return a}function n(a,e){if(a)throw new RangeError(e)}function i(a){return function(){return this.natural(a)}}function r(a,e){for(var n,i=p(a),r=0,o=i.length;r<o;r++)e[n=i[r]]=a[n]||e[n]}function o(a,e){for(var n=0,i=a.length;n<i;n++)e[n]=a[n]}function t(a,e){var n=Array.isArray(a),i=e||(n?new Array(a.length):{});return n?o(a,i):r(a,i),i}var s=9007199254740992,l="abcdefghijklmnopqrstuvwxyz",c=l.toUpperCase(),m="0123456789abcdef",u=Array.prototype.slice;a.prototype.VERSION="1.0.13";var d=function(){throw new Error("No Base64 encoder available.")};"function"==typeof btoa?d=btoa:"function"==typeof Buffer&&(d=function(a){return new Buffer(a).toString("base64")}),a.prototype.bool=function(a){return a=e(a,{likelihood:50}),n(a.likelihood<0||a.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()<a.likelihood},a.prototype.animal=function(a){return void 0!==(a=e(a)).type?(n(!this.get("animals")[a.type.toLowerCase()],"Please pick from desert, ocean, grassland, forest, zoo, pets, farm."),this.pick(this.get("animals")[a.type.toLowerCase()])):(animalTypeArray=["desert","forest","ocean","zoo","farm","pet","grassland"],this.pick(this.get("animals")[this.pick(animalTypeArray)]))},a.prototype.character=function(a){n((a=e(a)).alpha&&a.symbols,"Chance: Cannot specify both alpha and symbols.");var i,r;return i="lower"===a.casing?l:"upper"===a.casing?c:l+c,(r=a.pool?a.pool:a.alpha?i:a.symbols?"!@#$%^&*()[]":i+"0123456789!@#$%^&*()[]").charAt(this.natural({max:r.length-1}))},a.prototype.floating=function(a){n((a=e(a,{fixed:4})).fixed&&a.precision,"Chance: Cannot specify both fixed and precision.");var i,r=Math.pow(10,a.fixed),o=s/r,t=-o;n(a.min&&a.fixed&&a.min<t,"Chance: Min specified is out of range with fixed. Min should be, at least, "+t),n(a.max&&a.fixed&&a.max>o,"Chance: Max specified is out of range with fixed. Max should be, at most, "+o),a=e(a,{min:t,max:o});var l=((i=this.integer({min:a.min*r,max:a.max*r}))/r).toFixed(a.fixed);return parseFloat(l)},a.prototype.integer=function(a){return a=e(a,{min:-9007199254740992,max:s}),n(a.min>a.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(a.max-a.min+1)+a.min)},a.prototype.natural=function(a){return"number"==typeof(a=e(a,{min:0,max:s})).numerals&&(n(a.numerals<1,"Chance: Numerals cannot be less than one."),a.min=Math.pow(10,a.numerals-1),a.max=Math.pow(10,a.numerals)-1),n(a.min<0,"Chance: Min cannot be less than zero."),this.integer(a)},a.prototype.hex=function(a){n((a=e(a,{min:0,max:s,casing:"lower"})).min<0,"Chance: Min cannot be less than zero.");var i=this.natural({min:a.min,max:a.max});return"upper"===a.casing?i.toString(16).toUpperCase():i.toString(16)},a.prototype.letter=function(a){a=e(a,{casing:"lower"});var n=this.character({pool:"abcdefghijklmnopqrstuvwxyz"});return"upper"===a.casing&&(n=n.toUpperCase()),n},a.prototype.string=function(a){n((a=e(a,{length:this.natural({min:5,max:20})})).length<0,"Chance: Length cannot be less than zero.");var i=a.length;return this.n(this.character,i,a).join("")},a.prototype.capitalize=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},a.prototype.mixin=function(e){for(var n in e)a.prototype[n]=e[n];return this},a.prototype.unique=function(a,e,i){n("function"!=typeof a,"Chance: The first argument must be a function.");var r=function(a,e){return-1!==a.indexOf(e)};i&&(r=i.comparator||r);for(var o,t=[],s=0,l=50*e,c=u.call(arguments,2);t.length<e;){var m=JSON.parse(JSON.stringify(c));if(o=a.apply(this,m),r(t,o)||(t.push(o),s=0),++s>l)throw new RangeError("Chance: num is likely too large for sample set")}return t},a.prototype.n=function(a,e){n("function"!=typeof a,"Chance: The first argument must be a function."),void 0===e&&(e=1);var i=e,r=[],o=u.call(arguments,2);for(i=Math.max(0,i),null;i--;null)r.push(a.apply(this,o));return r},a.prototype.pad=function(a,e,n){return n=n||"0",(a+="").length>=e?a:new Array(e-a.length+1).join(n)+a},a.prototype.pick=function(a,e){if(0===a.length)throw new RangeError("Chance: Cannot pick() from an empty array");return e&&1!==e?this.shuffle(a).slice(0,e):a[this.natural({max:a.length-1})]},a.prototype.pickone=function(a){if(0===a.length)throw new RangeError("Chance: Cannot pickone() from an empty array");return a[this.natural({max:a.length-1})]},a.prototype.pickset=function(a,e){if(0===e)return[];if(0===a.length)throw new RangeError("Chance: Cannot pickset() from an empty array");if(e<0)throw new RangeError("Chance: Count must be a positive number");return e&&1!==e?this.shuffle(a).slice(0,e):[this.pickone(a)]},a.prototype.shuffle=function(a){for(var e=a.slice(0),n=[],i=0,r=Number(e.length),o=0;o<r;o++)i=this.natural({max:e.length-1}),n[o]=e[i],e.splice(i,1);return n},a.prototype.weighted=function(a,e,n){if(a.length!==e.length)throw new RangeError("Chance: Length of array and weights must match");for(var i,r=0,o=0;o<e.length;++o){if(i=e[o],isNaN(i))throw new RangeError("Chance: All weights must be numbers");i>0&&(r+=i)}if(0===r)throw new RangeError("Chance: No valid entries in array weights");var t,s=this.random()*r,l=0,c=-1;for(o=0;o<e.length;++o){if(i=e[o],l+=i,i>0){if(s<=l){t=o;break}c=o}o===e.length-1&&(t=c)}var m=a[t];return(n=void 0!==n&&n)&&(a.splice(t,1),e.splice(t,1)),m},a.prototype.paragraph=function(a){var n=(a=e(a)).sentences||this.natural({min:3,max:7});return this.n(this.sentence,n).join(" ")},a.prototype.sentence=function(a){var n,i=(a=e(a)).words||this.natural({min:12,max:18}),r=a.punctuation;return n=this.n(this.word,i).join(" "),n=this.capitalize(n),!1===r||/^[\.\?;!:]$/.test(r)||(r="."),r&&(n+=r),n},a.prototype.syllable=function(a){for(var n,i=(a=e(a)).length||this.natural({min:2,max:3}),r="",o=0;o<i;o++)r+=n=0===o?this.character({pool:"bcdfghjklmnprstvwzaeiou"}):-1==="bcdfghjklmnprstvwz".indexOf(n)?this.character({pool:"bcdfghjklmnprstvwz"}):this.character({pool:"aeiou"});return a.capitalize&&(r=this.capitalize(r)),r},a.prototype.word=function(a){n((a=e(a)).syllables&&a.length,"Chance: Cannot specify both syllables AND length.");var i=a.syllables||this.natural({min:1,max:3}),r="";if(a.length){do{r+=this.syllable()}while(r.length<a.length);r=r.substring(0,a.length)}else for(var o=0;o<i;o++)r+=this.syllable();return a.capitalize&&(r=this.capitalize(r)),r},a.prototype.age=function(a){var n;switch((a=e(a)).type){case"child":n={min:0,max:12};break;case"teen":n={min:13,max:19};break;case"adult":n={min:18,max:65};break;case"senior":n={min:65,max:100};break;case"all":n={min:0,max:100};break;default:n={min:18,max:65}}return this.natural(n)},a.prototype.birthday=function(a){var n=this.age(a),i=(new Date).getFullYear();if(a&&a.type){var r=new Date,o=new Date;r.setFullYear(i-n-1),o.setFullYear(i-n),a=e(a,{min:r,max:o})}else a=e(a,{year:i-n});return this.date(a)},a.prototype.cpf=function(a){a=e(a,{formatted:!0});var n=this.n(this.natural,9,{max:9}),i=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];(i=11-i%11)>=10&&(i=0);var r=2*i+3*n[8]+4*n[7]+5*n[6]+6*n[5]+7*n[4]+8*n[3]+9*n[2]+10*n[1]+11*n[0];(r=11-r%11)>=10&&(r=0);var o=""+n[0]+n[1]+n[2]+"."+n[3]+n[4]+n[5]+"."+n[6]+n[7]+n[8]+"-"+i+r;return a.formatted?o:o.replace(/\D/g,"")},a.prototype.cnpj=function(a){a=e(a,{formatted:!0});var n=this.n(this.natural,12,{max:12}),i=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];(i=11-i%11)<2&&(i=0);var r=2*i+3*n[11]+4*n[10]+5*n[9]+6*n[8]+7*n[7]+8*n[6]+9*n[5]+2*n[4]+3*n[3]+4*n[2]+5*n[1]+6*n[0];(r=11-r%11)<2&&(r=0);var o=""+n[0]+n[1]+"."+n[2]+n[3]+n[4]+"."+n[5]+n[6]+n[7]+"/"+n[8]+n[9]+n[10]+n[11]+"-"+i+r;return a.formatted?o:o.replace(/\D/g,"")},a.prototype.first=function(a){return a=e(a,{gender:this.gender(),nationality:"en"}),this.pick(this.get("firstNames")[a.gender.toLowerCase()][a.nationality.toLowerCase()])},a.prototype.profession=function(a){return(a=e(a)).rank?this.pick(["Apprentice ","Junior ","Senior ","Lead "])+this.pick(this.get("profession")):this.pick(this.get("profession"))},a.prototype.company=function(){return this.pick(this.get("company"))},a.prototype.gender=function(a){return a=e(a,{extraGenders:[]}),this.pick(["Male","Female"].concat(a.extraGenders))},a.prototype.last=function(a){return a=e(a,{nationality:"en"}),this.pick(this.get("lastNames")[a.nationality.toLowerCase()])},a.prototype.israelId=function(){for(var a=this.string({pool:"0123456789",length:8}),e=0,n=0;n<a.length;n++){var i=a[n]*(n/2===parseInt(n/2)?1:2);i=this.pad(i,2).toString(),e+=i=parseInt(i[0])+parseInt(i[1])}return a+=(10-parseInt(e.toString().slice(-1))).toString().slice(-1)},a.prototype.mrz=function(a){var n=function(a){var e="<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(""),n=[7,3,1],i=0;return"string"!=typeof a&&(a=a.toString()),a.split("").forEach(function(a,r){var o=e.indexOf(a);a=-1!==o?0===o?0:o+9:parseInt(a,10),i+=a*=n[r%n.length]}),i%10},i=this;return a=e(a,{first:this.first(),last:this.last(),passportNumber:this.integer({min:1e8,max:999999999}),dob:function(){var a=i.birthday({type:"adult"});return[a.getFullYear().toString().substr(2),i.pad(a.getMonth()+1,2),i.pad(a.getDate(),2)].join("")}(),expiry:function(){var a=new Date;return[(a.getFullYear()+5).toString().substr(2),i.pad(a.getMonth()+1,2),i.pad(a.getDate(),2)].join("")}(),gender:"Female"===this.gender()?"F":"M",issuer:"GBR",nationality:"GBR"}),function(a){var e=function(a){return new Array(a+1).join("<")},i=["P<",a.issuer,a.last.toUpperCase(),"<<",a.first.toUpperCase(),e(39-(a.last.length+a.first.length+2)),a.passportNumber,n(a.passportNumber),a.nationality,a.dob,n(a.dob),a.gender,a.expiry,n(a.expiry),e(14),n(e(14))].join("");return i+n(i.substr(44,10)+i.substr(57,7)+i.substr(65,7))}(a)},a.prototype.name=function(a){a=e(a);var n,i=this.first(a),r=this.last(a);return n=a.middle?i+" "+this.first(a)+" "+r:a.middle_initial?i+" "+this.character({alpha:!0,casing:"upper"})+". "+r:i+" "+r,a.prefix&&(n=this.prefix(a)+" "+n),a.suffix&&(n=n+" "+this.suffix(a)),n},a.prototype.name_prefixes=function(a){var e=[{name:"Doctor",abbreviation:"Dr."}];return"male"!==(a=(a=a||"all").toLowerCase())&&"all"!==a||e.push({name:"Mister",abbreviation:"Mr."}),"female"!==a&&"all"!==a||(e.push({name:"Miss",abbreviation:"Miss"}),e.push({name:"Misses",abbreviation:"Mrs."})),e},a.prototype.prefix=function(a){return this.name_prefix(a)},a.prototype.name_prefix=function(a){return(a=e(a,{gender:"all"})).full?this.pick(this.name_prefixes(a.gender)).name:this.pick(this.name_prefixes(a.gender)).abbreviation},a.prototype.HIDN=function(){var a="";return a+=this.string({pool:"0123456789",length:6}),a+=this.string({pool:"ABCDEFGHIJKLMNOPQRSTUVWXYXZ",length:2})},a.prototype.ssn=function(a){var n=(a=e(a,{ssnFour:!1,dashes:!0})).dashes?"-":"";return a.ssnFour?this.string({pool:"1234567890",length:4}):this.string({pool:"1234567890",length:3})+n+this.string({pool:"1234567890",length:2})+n+this.string({pool:"1234567890",length:4})},a.prototype.name_suffixes=function(){return[{name:"Doctor of Osteopathic Medicine",abbreviation:"D.O."},{name:"Doctor of Philosophy",abbreviation:"Ph.D."},{name:"Esquire",abbreviation:"Esq."},{name:"Junior",abbreviation:"Jr."},{name:"Juris Doctor",abbreviation:"J.D."},{name:"Master of Arts",abbreviation:"M.A."},{name:"Master of Business Administration",abbreviation:"M.B.A."},{name:"Master of Science",abbreviation:"M.S."},{name:"Medical Doctor",abbreviation:"M.D."},{name:"Senior",abbreviation:"Sr."},{name:"The Third",abbreviation:"III"},{name:"The Fourth",abbreviation:"IV"},{name:"Bachelor of Engineering",abbreviation:"B.E"},{name:"Bachelor of Technology",abbreviation:"B.TECH"}]},a.prototype.suffix=function(a){return this.name_suffix(a)},a.prototype.name_suffix=function(a){return(a=e(a)).full?this.pick(this.name_suffixes()).name:this.pick(this.name_suffixes()).abbreviation},a.prototype.nationalities=function(){return this.get("nationalities")},a.prototype.nationality=function(){return this.pick(this.nationalities()).name},a.prototype.android_id=function(){return"APA91"+this.string({pool:"0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_",length:178})},a.prototype.apple_token=function(){return this.string({pool:"abcdef1234567890",length:64})},a.prototype.wp8_anid2=function(){return d(this.hash({length:32}))},a.prototype.wp7_anid=function(){return"A="+this.guid().replace(/-/g,"").toUpperCase()+"&E="+this.hash({length:3})+"&W="+this.integer({min:0,max:9})},a.prototype.bb_pin=function(){return this.hash({length:8})},a.prototype.avatar=function(a){var n={protocol:null,email:null,fileExtension:null,size:null,fallback:null,rating:null};if(a)if("string"==typeof a)n.email=a,a={};else{if("object"!=typeof a)return null;if("Array"===a.constructor)return null}else n.email=this.email(),a={};return(n=e(a,n)).email||(n.email=this.email()),n.protocol={http:"http",https:"https"}[n.protocol]?n.protocol+":":"",n.size=parseInt(n.size,0)?n.size:"",n.rating={g:"g",pg:"pg",r:"r",x:"x"}[n.rating]?n.rating:"",n.fallback={404:"404",mm:"mm",identicon:"identicon",monsterid:"monsterid",wavatar:"wavatar",retro:"retro",blank:"blank"}[n.fallback]?n.fallback:"",n.fileExtension={bmp:"bmp",gif:"gif",jpg:"jpg",png:"png"}[n.fileExtension]?n.fileExtension:"",n.protocol+"//www.gravatar.com/avatar/"+this.bimd5.md5(n.email)+(n.fileExtension?"."+n.fileExtension:"")+(n.size||n.rating||n.fallback?"?":"")+(n.size?"&s="+n.size.toString():"")+(n.rating?"&r="+n.rating:"")+(n.fallback?"&d="+n.fallback:"")},a.prototype.color=function(a){function n(a,e){return[a,a,a].join(e||"")}function i(a){var e=a?"rgba":"rgb",i=a?","+this.floating({min:b,max:p}):"";return e+"("+(o?n(this.natural({min:t,max:s}),","):this.natural({min:m,max:u})+","+this.natural({min:d,max:h})+","+this.natural({max:255}))+i+")"}function r(e,i,r){var b=r?"#":"",p="";return o?(p=n(this.pad(this.hex({min:t,max:s}),2)),"shorthex"===a.format&&(p=n(this.hex({min:0,max:15})))):p="shorthex"===a.format?this.pad(this.hex({min:Math.floor(l/16),max:Math.floor(c/16)}),1)+this.pad(this.hex({min:Math.floor(m/16),max:Math.floor(u/16)}),1)+this.pad(this.hex({min:Math.floor(d/16),max:Math.floor(h/16)}),1):void 0!==l||void 0!==c||void 0!==m||void 0!==u||void 0!==d||void 0!==h?this.pad(this.hex({min:l,max:c}),2)+this.pad(this.hex({min:m,max:u}),2)+this.pad(this.hex({min:d,max:h}),2):this.pad(this.hex({min:t,max:s}),2)+this.pad(this.hex({min:t,max:s}),2)+this.pad(this.hex({min:t,max:s}),2),b+p}var o=(a=e(a,{format:this.pick(["hex","shorthex","rgb","rgba","0x","name"]),grayscale:!1,casing:"lower",min:0,max:255,min_red:void 0,max_red:void 0,min_green:void 0,max_green:void 0,min_blue:void 0,max_blue:void 0,min_alpha:0,max_alpha:1})).grayscale,t=a.min,s=a.max,l=a.min_red,c=a.max_red,m=a.min_green,u=a.max_green,d=a.min_blue,h=a.max_blue,b=a.min_alpha,p=a.max_alpha;void 0===a.min_red&&(l=t),void 0===a.max_red&&(c=s),void 0===a.min_green&&(m=t),void 0===a.max_green&&(u=s),void 0===a.min_blue&&(d=t),void 0===a.max_blue&&(h=s),void 0===a.min_alpha&&(b=0),void 0===a.max_alpha&&(p=1),o&&0===t&&255===s&&void 0!==l&&void 0!==c&&(t=(l+m+d)/3,s=(c+u+h)/3);var C;if("hex"===a.format)C=r.call(this,2,6,!0);else if("shorthex"===a.format)C=r.call(this,1,3,!0);else if("rgb"===a.format)C=i.call(this,!1);else if("rgba"===a.format)C=i.call(this,!0);else{if("0x"!==a.format){if("name"===a.format)return this.pick(this.get("colorNames"));throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".')}C="0x"+r.call(this,2,6)}return"upper"===a.casing&&(C=C.toUpperCase()),C},a.prototype.domain=function(a){return a=e(a),this.word()+"."+(a.tld||this.tld())},a.prototype.email=function(a){return a=e(a),this.word({length:a.length})+"@"+(a.domain||this.domain())},a.prototype.fbid=function(){return"10000"+this.string({pool:"1234567890",length:11})},a.prototype.google_analytics=function(){return"UA-"+this.pad(this.natural({max:999999}),6)+"-"+this.pad(this.natural({max:99}),2)},a.prototype.hashtag=function(){return"#"+this.word()},a.prototype.ip=function(){return this.natural({min:1,max:254})+"."+this.natural({max:255})+"."+this.natural({max:255})+"."+this.natural({min:1,max:254})},a.prototype.ipv6=function(){return this.n(this.hash,8,{length:4}).join(":")},a.prototype.klout=function(){return this.natural({min:1,max:99})},a.prototype.semver=function(a){a=e(a,{include_prerelease:!0});var n=this.pickone(["^","~","<",">","<=",">=","="]);a.range&&(n=a.range);var i="";return a.include_prerelease&&(i=this.weighted(["","-dev","-beta","-alpha"],[50,10,5,1])),n+this.rpg("3d10").join(".")+i},a.prototype.tlds=function(){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"]},a.prototype.tld=function(){return this.pick(this.tlds())},a.prototype.twitter=function(){return"@"+this.word()},a.prototype.url=function(a){var n=(a=e(a,{protocol:"http",domain:this.domain(a),domain_prefix:"",path:this.word(),extensions:[]})).extensions.length>0?"."+this.pick(a.extensions):"",i=a.domain_prefix?a.domain_prefix+"."+a.domain:a.domain;return a.protocol+"://"+i+"/"+a.path+n},a.prototype.port=function(){return this.integer({min:0,max:65535})},a.prototype.locale=function(a){return(a=e(a)).region?this.pick(this.get("locale_regions")):this.pick(this.get("locale_languages"))},a.prototype.locales=function(a){return(a=e(a)).region?this.get("locale_regions"):this.get("locale_languages")},a.prototype.address=function(a){return a=e(a),this.natural({min:5,max:2e3})+" "+this.street(a)},a.prototype.altitude=function(a){return a=e(a,{fixed:5,min:0,max:8848}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.areacode=function(a){a=e(a,{parens:!0});var n=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return a.parens?"("+n+")":n},a.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},a.prototype.coordinates=function(a){return this.latitude(a)+", "+this.longitude(a)},a.prototype.countries=function(){return this.get("countries")},a.prototype.country=function(a){a=e(a);var n=this.pick(this.countries());return a.full?n.name:n.abbreviation},a.prototype.depth=function(a){return a=e(a,{fixed:5,min:-10994,max:0}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.geohash=function(a){return a=e(a,{length:7}),this.string({length:a.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},a.prototype.geojson=function(a){return this.latitude(a)+", "+this.longitude(a)+", "+this.altitude(a)},a.prototype.latitude=function(a){return a=e(a,{fixed:5,min:-90,max:90}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.longitude=function(a){return a=e(a,{fixed:5,min:-180,max:180}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.phone=function(a){var n,i=this,r=function(a){var e=[];return a.sections.forEach(function(a){e.push(i.string({pool:"0123456789",length:a}))}),a.area+e.join(" ")};(a=e(a,{formatted:!0,country:"us",mobile:!1})).formatted||(a.parens=!1);var o;switch(a.country){case"fr":a.mobile?(n=this.pick(["06","07"])+i.string({pool:"0123456789",length:8}),o=a.formatted?n.match(/../g).join(" "):n):(n=this.pick(["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"])+i.string({pool:"0123456789",length:6}),"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"])+i.string({pool:"0123456789",length:6}),"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"])+i.string({pool:"0123456789",length:6}),"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"])+i.string({pool:"0123456789",length:6}),"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"])+i.string({pool:"0123456789",length:6}),"09"+i.string({pool:"0123456789",length:8})]),o=a.formatted?n.match(/../g).join(" "):n);break;case"uk":a.mobile?(n=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),o=a.formatted?r(n):r(n).replace(" ","")):(n=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[6]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[6]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[6]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[6]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[6]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[6]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[6]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[6]}]),o=a.formatted?r(n):r(n).replace(" ","","g"));break;case"za":a.mobile?(n=this.pick(["060"+this.pick(["3","4","5","6","7","8","9"])+i.string({pool:"0123456789",length:6}),"061"+this.pick(["0","1","2","3","4","5","8"])+i.string({pool:"0123456789",length:6}),"06"+i.string({pool:"0123456789",length:7}),"071"+this.pick(["0","1","2","3","4","5","6","7","8","9"])+i.string({pool:"0123456789",length:6}),"07"+this.pick(["2","3","4","6","7","8","9"])+i.string({pool:"0123456789",length:7}),"08"+this.pick(["0","1","2","3","4","5"])+i.string({pool:"0123456789",length:7})]),o=a.formatted||n):(n=this.pick(["01"+this.pick(["0","1","2","3","4","5","6","7","8"])+i.string({pool:"0123456789",length:7}),"02"+this.pick(["1","2","3","4","7","8"])+i.string({pool:"0123456789",length:7}),"03"+this.pick(["1","2","3","5","6","9"])+i.string({pool:"0123456789",length:7}),"04"+this.pick(["1","2","3","4","5","6","7","8","9"])+i.string({pool:"0123456789",length:7}),"05"+this.pick(["1","3","4","6","7","8"])+i.string({pool:"0123456789",length:7})]),o=a.formatted||n);break;case"us":var t=this.areacode(a).toString(),s=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),l=this.natural({min:1e3,max:9999}).toString();o=a.formatted?t+" "+s+"-"+l:t+s+l}return o},a.prototype.postal=function(){return this.character({pool:"XVTSRPNKLMHJGECBA"})+this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+" "+(this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9}))},a.prototype.counties=function(a){return a=e(a,{country:"uk"}),this.get("counties")[a.country.toLowerCase()]},a.prototype.county=function(a){return this.pick(this.counties(a)).name},a.prototype.provinces=function(a){return a=e(a,{country:"ca"}),this.get("provinces")[a.country.toLowerCase()]},a.prototype.province=function(a){return a&&a.full?this.pick(this.provinces(a)).name:this.pick(this.provinces(a)).abbreviation},a.prototype.state=function(a){return a&&a.full?this.pick(this.states(a)).name:this.pick(this.states(a)).abbreviation},a.prototype.states=function(a){var n;switch((a=e(a,{country:"us",us_states_and_dc:!0})).country.toLowerCase()){case"us":var i=this.get("us_states_and_dc"),r=this.get("territories"),o=this.get("armed_forces");n=[],a.us_states_and_dc&&(n=n.concat(i)),a.territories&&(n=n.concat(r)),a.armed_forces&&(n=n.concat(o));break;case"it":n=this.get("country_regions")[a.country.toLowerCase()];break;case"uk":n=this.get("counties")[a.country.toLowerCase()]}return n},a.prototype.street=function(a){var n;switch((a=e(a,{country:"us",syllables:2})).country.toLowerCase()){case"us":n=this.word({syllables:a.syllables}),n=this.capitalize(n),n+=" ",n+=a.short_suffix?this.street_suffix(a).abbreviation:this.street_suffix(a).name;break;case"it":n=this.word({syllables:a.syllables}),n=this.capitalize(n),n=(a.short_suffix?this.street_suffix(a).abbreviation:this.street_suffix(a).name)+" "+n}return n},a.prototype.street_suffix=function(a){return a=e(a,{country:"us"}),this.pick(this.street_suffixes(a))},a.prototype.street_suffixes=function(a){return a=e(a,{country:"us"}),this.get("street_suffixes")[a.country.toLowerCase()]},a.prototype.zip=function(a){var e=this.n(this.natural,5,{max:9});return a&&!0===a.plusfour&&(e.push("-"),e=e.concat(this.n(this.natural,4,{max:9}))),e.join("")},a.prototype.ampm=function(){return this.bool()?"am":"pm"},a.prototype.date=function(a){var n,i;if(a&&(a.min||a.max)){var r=void 0!==(a=e(a,{american:!0,string:!1})).min?a.min.getTime():1,o=void 0!==a.max?a.max.getTime():864e13;i=new Date(this.integer({min:r,max:o}))}else{var t=this.month({raw:!0}),s=t.days;a&&a.month&&(s=this.get("months")[(a.month%12+12)%12].days),a=e(a,{year:parseInt(this.year(),10),month:t.numeric-1,day:this.natural({min:1,max:s}),hour:this.hour({twentyfour:!0}),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),i=new Date(a.year,a.month,a.day,a.hour,a.minute,a.second,a.millisecond)}return n=a.american?i.getMonth()+1+"/"+i.getDate()+"/"+i.getFullYear():i.getDate()+"/"+(i.getMonth()+1)+"/"+i.getFullYear(),a.string?n:i},a.prototype.hammertime=function(a){return this.date(a).getTime()},a.prototype.hour=function(a){return a=e(a,{min:a&&a.twentyfour?0:1,max:a&&a.twentyfour?23:12}),n(a.min<0,"Chance: Min cannot be less than 0."),n(a.twentyfour&&a.max>23,"Chance: Max cannot be greater than 23 for twentyfour option."),n(!a.twentyfour&&a.max>12,"Chance: Max cannot be greater than 12."),n(a.min>a.max,"Chance: Min cannot be greater than Max."),this.natural({min:a.min,max:a.max})},a.prototype.millisecond=function(){return this.natural({max:999})},a.prototype.minute=a.prototype.second=function(a){return a=e(a,{min:0,max:59}),n(a.min<0,"Chance: Min cannot be less than 0."),n(a.max>59,"Chance: Max cannot be greater than 59."),n(a.min>a.max,"Chance: Min cannot be greater than Max."),this.natural({min:a.min,max:a.max})},a.prototype.month=function(a){n((a=e(a,{min:1,max:12})).min<1,"Chance: Min cannot be less than 1."),n(a.max>12,"Chance: Max cannot be greater than 12."),n(a.min>a.max,"Chance: Min cannot be greater than Max.");var i=this.pick(this.months().slice(a.min-1,a.max));return a.raw?i:i.name},a.prototype.months=function(){return this.get("months")},a.prototype.second=function(){return this.natural({max:59})},a.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},a.prototype.weekday=function(a){var n=["Monday","Tuesday","Wednesday","Thursday","Friday"];return(a=e(a,{weekday_only:!1})).weekday_only||(n.push("Saturday"),n.push("Sunday")),this.pickone(n)},a.prototype.year=function(a){return a=e(a,{min:(new Date).getFullYear()}),a.max=void 0!==a.max?a.max:a.min+100,this.natural(a).toString()},a.prototype.cc=function(a){var n,i,r;return n=(a=e(a)).type?this.cc_type({name:a.type,raw:!0}):this.cc_type({raw:!0}),i=n.prefix.split(""),r=n.length-n.prefix.length-1,(i=i.concat(this.n(this.integer,r,{min:0,max:9}))).push(this.luhn_calculate(i.join(""))),i.join("")},a.prototype.cc_types=function(){return this.get("cc_types")},a.prototype.cc_type=function(a){a=e(a);var n=this.cc_types(),i=null;if(a.name){for(var r=0;r<n.length;r++)if(n[r].name===a.name||n[r].short_name===a.name){i=n[r];break}if(null===i)throw new RangeError("Chance: Credit card type '"+a.name+"' is not supported")}else i=this.pick(n);return a.raw?i:i.name},a.prototype.currency_types=function(){return this.get("currency_types")},a.prototype.currency=function(){return this.pick(this.currency_types())},a.prototype.timezones=function(){return this.get("timezones")},a.prototype.timezone=function(){return this.pick(this.timezones())},a.prototype.currency_pair=function(a){var e=this.unique(this.currency,2,{comparator:function(a,e){return a.reduce(function(a,n){return a||n.code===e.code},!1)}});return a?e[0].code+"/"+e[1].code:e},a.prototype.dollar=function(a){a=e(a,{max:1e4,min:0});var n=this.floating({min:a.min,max:a.max,fixed:2}).toString(),i=n.split(".")[1];return void 0===i?n+=".00":i.length<2&&(n+="0"),n<0?"-$"+n.replace("-",""):"$"+n},a.prototype.euro=function(a){return Number(this.dollar(a).replace("$","")).toLocaleString()+"€"},a.prototype.exp=function(a){a=e(a);var n={};return n.year=this.exp_year(),n.year===(new Date).getFullYear().toString()?n.month=this.exp_month({future:!0}):n.month=this.exp_month(),a.raw?n:n.month+"/"+n.year},a.prototype.exp_month=function(a){a=e(a);var n,i,r=(new Date).getMonth()+1;if(a.future&&12!==r)do{n=this.month({raw:!0}).numeric,i=parseInt(n,10)}while(i<=r);else n=this.month({raw:!0}).numeric;return n},a.prototype.exp_year=function(){var a=(new Date).getMonth()+1,e=(new Date).getFullYear();return this.year({min:12===a?e+1:e,max:e+10})},a.prototype.vat=function(a){switch((a=e(a,{country:"it"})).country.toLowerCase()){case"it":return this.it_vat()}},a.prototype.iban=function(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZ";return this.string({length:2,pool:a})+this.pad(this.integer({min:0,max:99}),2)+this.string({length:4,pool:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"})+this.pad(this.natural(),this.natural({min:6,max:26}))},a.prototype.it_vat=function(){var a=this.natural({min:1,max:18e5});return(a=this.pad(a,7)+this.pad(this.pick(this.provinces({country:"it"})).code,3))+this.luhn_calculate(a)},a.prototype.cf=function(a){var e=(a=a||{}).gender?a.gender:this.gender(),n=a.first?a.first:this.first({gender:e,nationality:"it"}),i=a.last?a.last:this.last({nationality:"it"}),r=a.birthday?a.birthday:this.birthday(),o=a.city?a.city:this.pickone(["A","B","C","D","E","F","G","H","I","L","M","Z"])+this.pad(this.natural({max:999}),3),t=[],s=function(a,e){var n,i=[];return a.length<3?i=a.split("").concat("XXX".split("")).splice(0,3):((n=a.toUpperCase().split("").map(function(a){return-1!=="BCDFGHJKLMNPRSTVWZ".indexOf(a)?a:void 0}).join("")).length>3&&(n=e?n.substr(0,3):n[0]+n.substr(2,2)),n.length<3&&(i=n,n=a.toUpperCase().split("").map(function(a){return-1!=="AEIOU".indexOf(a)?a:void 0}).join("").substr(0,3-i.length)),i+=n),i};return t=t.concat(s(i,!0),s(n),function(a,e,n){return a.getFullYear().toString().substr(2)+["A","B","C","D","E","H","L","M","P","R","S","T"][a.getMonth()]+n.pad(a.getDate()+("female"===e.toLowerCase()?40:0),2)}(r,e,this),o.toUpperCase().split("")).join(""),(t+=function(a){for(var e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",n="ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",i="ABCDEFGHIJKLMNOPQRSTUVWXYZ",r=0,o=0;o<15;o++)r+=o%2!=0?i.indexOf(n[e.indexOf(a[o])]):"BAKPLCQDREVOSFTGUHMINJWZYX".indexOf(n[e.indexOf(a[o])]);return i[r%26]}(t.toUpperCase())).toUpperCase()},a.prototype.pl_pesel=function(){for(var a=this.natural({min:1,max:9999999999}),e=this.pad(a,10).split(""),n=0;n<e.length;n++)e[n]=parseInt(e[n]);var i=(1*e[0]+3*e[1]+7*e[2]+9*e[3]+1*e[4]+3*e[5]+7*e[6]+9*e[7]+1*e[8]+3*e[9])%10;return 0!==i&&(i=10-i),e.join("")+i},a.prototype.pl_nip=function(){for(var a=this.natural({min:1,max:999999999}),e=this.pad(a,9).split(""),n=0;n<e.length;n++)e[n]=parseInt(e[n]);var i=(6*e[0]+5*e[1]+7*e[2]+2*e[3]+3*e[4]+4*e[5]+5*e[6]+6*e[7]+7*e[8])%11;return 10===i?this.pl_nip():e.join("")+i},a.prototype.pl_regon=function(){for(var a=this.natural({min:1,max:99999999}),e=this.pad(a,8).split(""),n=0;n<e.length;n++)e[n]=parseInt(e[n]);var i=(8*e[0]+9*e[1]+2*e[2]+3*e[3]+4*e[4]+5*e[5]+6*e[6]+7*e[7])%11;return 10===i&&(i=0),e.join("")+i},a.prototype.note=function(a){a=e(a,{notes:"flatKey"});var n={naturals:["C","D","E","F","G","A","B"],flats:["D♭","E♭","G♭","A♭","B♭"],sharps:["C♯","D♯","F♯","G♯","A♯"]};return n.all=n.naturals.concat(n.flats.concat(n.sharps)),n.flatKey=n.naturals.concat(n.flats),n.sharpKey=n.naturals.concat(n.sharps),this.pickone(n[a.notes])},a.prototype.midi_note=function(a){return a=e(a,{min:0,max:127}),this.integer({min:a.min,max:a.max})},a.prototype.chord_quality=function(a){var n=["maj","min","aug","dim"];return(a=e(a,{jazz:!0})).jazz&&(n=["maj7","min7","7","sus","dim","ø"]),this.pickone(n)},a.prototype.chord=function(a){return a=e(a),this.note(a)+this.chord_quality(a)},a.prototype.tempo=function(a){return a=e(a,{min:40,max:320}),this.integer({min:a.min,max:a.max})},a.prototype.coin=function(a){return this.bool()?"heads":"tails"},a.prototype.d4=i({min:1,max:4}),a.prototype.d6=i({min:1,max:6}),a.prototype.d8=i({min:1,max:8}),a.prototype.d10=i({min:1,max:10}),a.prototype.d12=i({min:1,max:12}),a.prototype.d20=i({min:1,max:20}),a.prototype.d30=i({min:1,max:30}),a.prototype.d100=i({min:1,max:100}),a.prototype.rpg=function(a,n){if(n=e(n),a){var i=a.toLowerCase().split("d"),r=[];if(2!==i.length||!parseInt(i[0],10)||!parseInt(i[1],10))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");for(var o=i[0];o>0;o--)r[o-1]=this.natural({min:1,max:i[1]});return void 0!==n.sum&&n.sum?r.reduce(function(a,e){return a+e}):r}throw new RangeError("Chance: A type of die roll must be included")},a.prototype.guid=function(a){a=e(a,{version:5});var n="abcdef1234567890";return this.string({pool:n,length:8})+"-"+this.string({pool:n,length:4})+"-"+a.version+this.string({pool:n,length:3})+"-"+this.string({pool:"ab89",length:1})+this.string({pool:n,length:3})+"-"+this.string({pool:n,length:12})},a.prototype.hash=function(a){var n="upper"===(a=e(a,{length:40,casing:"lower"})).casing?m.toUpperCase():m;return this.string({pool:n,length:a.length})},a.prototype.luhn_check=function(a){var e=a.toString();return+e.substring(e.length-1)===this.luhn_calculate(+e.substring(0,e.length-1))},a.prototype.luhn_calculate=function(a){for(var e,n=a.toString().split("").reverse(),i=0,r=0,o=n.length;o>r;++r)e=+n[r],r%2==0&&(e*=2)>9&&(e-=9),i+=e;return 9*i%10},a.prototype.md5=function(a){var n={str:"",key:null,raw:!1};if(a)if("string"==typeof a)n.str=a,a={};else{if("object"!=typeof a)return null;if("Array"===a.constructor)return null}else n.str=this.string(),a={};if(!(n=e(a,n)).str)throw new Error("A parameter is required to return an md5 hash.");return this.bimd5.md5(n.str,n.key,n.raw)},a.prototype.file=function(a){var e,n,i=a||{},r=Object.keys(this.get("fileExtension"));if(e=this.word({length:i.length}),i.extension)return n=i.extension,e+"."+n;if(i.extensions){if(Array.isArray(i.extensions))return n=this.pickone(i.extensions),e+"."+n;if(i.extensions.constructor===Object){var o=i.extensions,t=Object.keys(o);return n=this.pickone(o[this.pickone(t)]),e+"."+n}throw new Error("Chance: Extensions must be an Array or Object")}if(i.fileType){var s=i.fileType;if(-1!==r.indexOf(s))return n=this.pickone(this.get("fileExtension")[s]),e+"."+n;throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'")}return n=this.pickone(this.get("fileExtension")[this.pickone(r)]),e+"."+n};var h={firstNames:{male:{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"],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"],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"]},female:{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"],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"],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ë"]}},lastNames:{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"],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"],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"]},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"}],counties:{uk:[{name:"Bath and North East Somerset"},{name:"Aberdeenshire"},{name:"Anglesey"},{name:"Angus"},{name:"Bedford"},{name:"Blackburn with Darwen"},{name:"Blackpool"},{name:"Bournemouth"},{name:"Bracknell Forest"},{name:"Brighton & Hove"},{name:"Bristol"},{name:"Buckinghamshire"},{name:"Cambridgeshire"},{name:"Carmarthenshire"},{name:"Central Bedfordshire"},{name:"Ceredigion"},{name:"Cheshire East"},{name:"Cheshire West and Chester"},{name:"Clackmannanshire"},{name:"Conwy"},{name:"Cornwall"},{name:"County Antrim"},{name:"County Armagh"},{name:"County Down"},{name:"County Durham"},{name:"County Fermanagh"},{name:"County Londonderry"},{name:"County Tyrone"},{name:"Cumbria"},{name:"Darlington"},{name:"Denbighshire"},{name:"Derby"},{name:"Derbyshire"},{name:"Devon"},{name:"Dorset"},{name:"Dumfries and Galloway"},{name:"Dundee"},{name:"East Lothian"},{name:"East Riding of Yorkshire"},{name:"East Sussex"},{name:"Edinburgh?"},{name:"Essex"},{name:"Falkirk"},{name:"Fife"},{name:"Flintshire"},{name:"Gloucestershire"},{name:"Greater London"},{name:"Greater Manchester"},{name:"Gwent"},{name:"Gwynedd"},{name:"Halton"},{name:"Hampshire"},{name:"Hartlepool"},{name:"Herefordshire"},{name:"Hertfordshire"},{name:"Highlands"},{name:"Hull"},{name:"Isle of Wight"},{name:"Isles of Scilly"},{name:"Kent"},{name:"Lancashire"},{name:"Leicester"},{name:"Leicestershire"},{name:"Lincolnshire"},{name:"Lothian"},{name:"Luton"},{name:"Medway"},{name:"Merseyside"},{name:"Mid Glamorgan"},{name:"Middlesbrough"},{name:"Milton Keynes"},{name:"Monmouthshire"},{name:"Moray"},{name:"Norfolk"},{name:"North East Lincolnshire"},{name:"North Lincolnshire"},{name:"North Somerset"},{name:"North Yorkshire"},{name:"Northamptonshire"},{name:"Northumberland"},{name:"Nottingham"},{name:"Nottinghamshire"},{name:"Oxfordshire"},{name:"Pembrokeshire"},{name:"Perth and Kinross"},{name:"Peterborough"},{name:"Plymouth"},{name:"Poole"},{name:"Portsmouth"},{name:"Powys"},{name:"Reading"},{name:"Redcar and Cleveland"},{name:"Rutland"},{name:"Scottish Borders"},{name:"Shropshire"},{name:"Slough"},{name:"Somerset"},{name:"South Glamorgan"},{name:"South Gloucestershire"},{name:"South Yorkshire"},{name:"Southampton"},{name:"Southend-on-Sea"},{name:"Staffordshire"},{name:"Stirlingshire"},{name:"Stockton-on-Tees"},{name:"Stoke-on-Trent"},{name:"Strathclyde"},{name:"Suffolk"},{name:"Surrey"},{name:"Swindon"},{name:"Telford and Wrekin"},{name:"Thurrock"},{name:"Torbay"},{name:"Tyne and Wear"},{name:"Warrington"},{name:"Warwickshire"},{name:"West Berkshire"},{name:"West Glamorgan"},{name:"West Lothian"},{name:"West Midlands"},{name:"West Sussex"},{name:"West Yorkshire"},{name:"Western Isles"},{name:"Wiltshire"},{name:"Windsor and Maidenhead"},{name:"Wokingham"},{name:"Worcestershire"},{name:"Wrexham"},{name:"York"}]},provinces:{ca:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],it:[{name:"Agrigento",abbreviation:"AG",code:84},{name:"Alessandria",abbreviation:"AL",code:6},{name:"Ancona",abbreviation:"AN",code:42},{name:"Aosta",abbreviation:"AO",code:7},{name:"L'Aquila",abbreviation:"AQ",code:66},{name:"Arezzo",abbreviation:"AR",code:51},{name:"Ascoli-Piceno",abbreviation:"AP",code:44},{name:"Asti",abbreviation:"AT",code:5},{name:"Avellino",abbreviation:"AV",code:64},{name:"Bari",abbreviation:"BA",code:72},{name:"Barletta-Andria-Trani",abbreviation:"BT",code:72},{name:"Belluno",abbreviation:"BL",code:25},{name:"Benevento",abbreviation:"BN",code:62},{name:"Bergamo",abbreviation:"BG",code:16},{name:"Biella",abbreviation:"BI",code:96},{name:"Bologna",abbreviation:"BO",code:37},{name:"Bolzano",abbreviation:"BZ",code:21},{name:"Brescia",abbreviation:"BS",code:17},{name:"Brindisi",abbreviation:"BR",code:74},{name:"Cagliari",abbreviation:"CA",code:92},{name:"Caltanissetta",abbreviation:"CL",code:85},{name:"Campobasso",abbreviation:"CB",code:70},{name:"Carbonia Iglesias",abbreviation:"CI",code:70},{name:"Caserta",abbreviation:"CE",code:61},{name:"Catania",abbreviation:"CT",code:87},{name:"Catanzaro",abbreviation:"CZ",code:79},{name:"Chieti",abbreviation:"CH",code:69},{name:"Como",abbreviation:"CO",code:13},{name:"Cosenza",abbreviation:"CS",code:78},{name:"Cremona",abbreviation:"CR",code:19},{name:"Crotone",abbreviation:"KR",code:101},{name:"Cuneo",abbreviation:"CN",code:4},{name:"Enna",abbreviation:"EN",code:86},{name:"Fermo",abbreviation:"FM",code:86},{name:"Ferrara",abbreviation:"FE",code:38},{name:"Firenze",abbreviation:"FI",code:48},{name:"Foggia",abbreviation:"FG",code:71},{name:"Forli-Cesena",abbreviation:"FC",code:71},{name:"Frosinone",abbreviation:"FR",code:60},{name:"Genova",abbreviation:"GE",code:10},{name:"Gorizia",abbreviation:"GO",code:31},{name:"Grosseto",abbreviation:"GR",code:53},{name:"Imperia",abbreviation:"IM",code:8},{name:"Isernia",abbreviation:"IS",code:94},{name:"La-Spezia",abbreviation:"SP",code:66},{name:"Latina",abbreviation:"LT",code:59},{name:"Lecce",abbreviation:"LE",code:75},{name:"Lecco",abbreviation:"LC",code:97},{name:"Livorno",abbreviation:"LI",code:49},{name:"Lodi",abbreviation:"LO",code:98},{name:"Lucca",abbreviation:"LU",code:46},{name:"Macerata",abbreviation:"MC",code:43},{name:"Mantova",abbreviation:"MN",code:20},{name:"Massa-Carrara",abbreviation:"MS",code:45},{name:"Matera",abbreviation:"MT",code:77},{name:"Medio Campidano",abbreviation:"VS",code:77},{name:"Messina",abbreviation:"ME",code:83},{name:"Milano",abbreviation:"MI",code:15},{name:"Modena",abbreviation:"MO",code:36},{name:"Monza-Brianza",abbreviation:"MB",code:36},{name:"Napoli",abbreviation:"NA",code:63},{name:"Novara",abbreviation:"NO",code:3},{name:"Nuoro",abbreviation:"NU",code:91},{name:"Ogliastra",abbreviation:"OG",code:91},{name:"Olbia Tempio",abbreviation:"OT",code:91},{name:"Oristano",abbreviation:"OR",code:95},{name:"Padova",abbreviation:"PD",code:28},{name:"Palermo",abbreviation:"PA",code:82},{name:"Parma",abbreviation:"PR",code:34},{name:"Pavia",abbreviation:"PV",code:18},{name:"Perugia",abbreviation:"PG",code:54},{name:"Pesaro-Urbino",abbreviation:"PU",code:41},{name:"Pescara",abbreviation:"PE",code:68},{name:"Piacenza",abbreviation:"PC",code:33},{name:"Pisa",abbreviation:"PI",code:50},{name:"Pistoia",abbreviation:"PT",code:47},{name:"Pordenone",abbreviation:"PN",code:93},{name:"Potenza",abbreviation:"PZ",code:76},{name:"Prato",abbreviation:"PO",code:100},{name:"Ragusa",abbreviation:"RG",code:88},{name:"Ravenna",abbreviation:"RA",code:39},{name:"Reggio-Calabria",abbreviation:"RC",code:35},{name:"Reggio-Emilia",abbreviation:"RE",code:35},{name:"Rieti",abbreviation:"RI",code:57},{name:"Rimini",abbreviation:"RN",code:99},{name:"Roma",abbreviation:"Roma",code:58},{name:"Rovigo",abbreviation:"RO",code:29},{name:"Salerno",abbreviation:"SA",code:65},{name:"Sassari",abbreviation:"SS",code:90},{name:"Savona",abbreviation:"SV",code:9},{name:"Siena",abbreviation:"SI",code:52},{name:"Siracusa",abbreviation:"SR",code:89},{name:"Sondrio",abbreviation:"SO",code:14},{name:"Taranto",abbreviation:"TA",code:73},{name:"Teramo",abbreviation:"TE",code:67},{name:"Terni",abbreviation:"TR",code:55},{name:"Torino",abbreviation:"TO",code:1},{name:"Trapani",abbreviation:"TP",code:81},{name:"Trento",abbreviation:"TN",code:22},{name:"Treviso",abbreviation:"TV",code:26},{name:"Trieste",abbreviation:"TS",code:32},{name:"Udine",abbreviation:"UD",code:30},{name:"Varese",abbreviation:"VA",code:12},{name:"Venezia",abbreviation:"VE",code:27},{name:"Verbania",abbreviation:"VB",code:27},{name:"Vercelli",abbreviation:"VC",code:2},{name:"Verona",abbreviation:"VR",code:23},{name:"Vibo-Valentia",abbreviation:"VV",code:102},{name:"Vicenza",abbreviation:"VI",code:24},{name:"Viterbo",abbreviation:"VT",code:56}]},nationalities:[{name:"Afghan"},{name:"Albanian"},{name:"Algerian"},{name:"American"},{name:"Andorran"},{name:"Angolan"},{name:"Antiguans"},{name:"Argentinean"},{name:"Armenian"},{name:"Australian"},{name:"Austrian"},{name:"Azerbaijani"},{name:"Bahami"},{name:"Bahraini"},{name:"Bangladeshi"},{name:"Barbadian"},{name:"Barbudans"},{name:"Batswana"},{name:"Belarusian"},{name:"Belgian"},{name:"Belizean"},{name:"Beninese"},{name:"Bhutanese"},{name:"Bolivian"},{name:"Bosnian"},{name:"Brazilian"},{name:"British"},{name:"Bruneian"},{name:"Bulgarian"},{name:"Burkinabe"},{name:"Burmese"},{name:"Burundian"},{name:"Cambodian"},{name:"Cameroonian"},{name:"Canadian"},{name:"Cape Verdean"},{name:"Central African"},{name:"Chadian"},{name:"Chilean"},{name:"Chinese"},{name:"Colombian"},{name:"Comoran"},{name:"Congolese"},{name:"Costa Rican"},{name:"Croatian"},{name:"Cuban"},{name:"Cypriot"},{name:"Czech"},{name:"Danish"},{name:"Djibouti"},{name:"Dominican"},{name:"Dutch"},{name:"East Timorese"},{name:"Ecuadorean"},{name:"Egyptian"},{name:"Emirian"},{name:"Equatorial Guinean"},{name:"Eritrean"},{name:"Estonian"},{name:"Ethiopian"},{name:"Fijian"},{name:"Filipino"},{name:"Finnish"},{name:"French"},{name:"Gabonese"},{name:"Gambian"},{name:"Georgian"},{name:"German"},{name:"Ghanaian"},{name:"Greek"},{name:"Grenadian"},{name:"Guatemalan"},{name:"Guinea-Bissauan"},{name:"Guinean"},{name:"Guyanese"},{name:"Haitian"},{name:"Herzegovinian"},{name:"Honduran"},{name:"Hungarian"},{name:"I-Kiribati"},{name:"Icelander"},{name:"Indian"},{name:"Indonesian"},{name:"Iranian"},{name:"Iraqi"},{name:"Irish"},{name:"Israeli"},{name:"Italian"},{name:"Ivorian"},{name:"Jamaican"},{name:"Japanese"},{name:"Jordanian"},{name:"Kazakhstani"},{name:"Kenyan"},{name:"Kittian and Nevisian"},{name:"Kuwaiti"},{name:"Kyrgyz"},{name:"Laotian"},{name:"Latvian"},{name:"Lebanese"},{name:"Liberian"},{name:"Libyan"},{name:"Liechtensteiner"},{name:"Lithuanian"},{name:"Luxembourger"},{name:"Macedonian"},{name:"Malagasy"},{name:"Malawian"},{name:"Malaysian"},{name:"Maldivan"},{name:"Malian"},{name:"Maltese"},{name:"Marshallese"},{name:"Mauritanian"},{name:"Mauritian"},{name:"Mexican"},{name:"Micronesian"},{name:"Moldovan"},{name:"Monacan"},{name:"Mongolian"},{name:"Moroccan"},{name:"Mosotho"},{name:"Motswana"},{name:"Mozambican"},{name:"Namibian"},{name:"Nauruan"},{name:"Nepalese"},{name:"New Zealander"},{name:"Nicaraguan"},{name:"Nigerian"},{name:"Nigerien"},{name:"North Korean"},{name:"Northern Irish"},{name:"Norwegian"},{name:"Omani"},{name:"Pakistani"},{name:"Palauan"},{name:"Panamanian"},{name:"Papua New Guinean"},{name:"Paraguayan"},{name:"Peruvian"},{name:"Polish"},{name:"Portuguese"},{name:"Qatari"},{name:"Romani"},{name:"Russian"},{name:"Rwandan"},{name:"Saint Lucian"},{name:"Salvadoran"},{name:"Samoan"},{name:"San Marinese"},{name:"Sao Tomean"},{name:"Saudi"},{name:"Scottish"},{name:"Senegalese"},{name:"Serbian"},{name:"Seychellois"},{name:"Sierra Leonean"},{name:"Singaporean"},{name:"Slovakian"},{name:"Slovenian"},{name:"Solomon Islander"},{name:"Somali"},{name:"South African"},{name:"South Korean"},{name:"Spanish"},{name:"Sri Lankan"},{name:"Sudanese"},{name:"Surinamer"},{name:"Swazi"},{name:"Swedish"},{name:"Swiss"},{name:"Syrian"},{name:"Taiwanese"},{name:"Tajik"},{name:"Tanzanian"},{name:"Thai"},{name:"Togolese"},{name:"Tongan"},{name:"Trinidadian or Tobagonian"},{name:"Tunisian"},{name:"Turkish"},{name:"Tuvaluan"},{name:"Ugandan"},{name:"Ukrainian"},{name:"Uruguaya"},{name:"Uzbekistani"},{name:"Venezuela"},{name:"Vietnamese"},{name:"Wels"},{name:"Yemenit"},{name:"Zambia"},{name:"Zimbabwe"}],locale_languages:["aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","id","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu"],locale_regions:["agq-CM","asa-TZ","ast-ES","bas-CM","bem-ZM","bez-TZ","brx-IN","cgg-UG","chr-US","dav-KE","dje-NE","dsb-DE","dua-CM","dyo-SN","ebu-KE","ewo-CM","fil-PH","fur-IT","gsw-CH","gsw-FR","gsw-LI","guz-KE","haw-US","hsb-DE","jgo-CM","jmc-TZ","kab-DZ","kam-KE","kde-TZ","kea-CV","khq-ML","kkj-CM","kln-KE","kok-IN","ksb-TZ","ksf-CM","ksh-DE","lag-TZ","lkt-US","luo-KE","luy-KE","mas-KE","mas-TZ","mer-KE","mfe-MU","mgh-MZ","mgo-CM","mua-CM","naq-NA","nmg-CM","nnh-CM","nus-SD","nyn-UG","rof-TZ","rwk-TZ","sah-RU","saq-KE","sbp-TZ","seh-MZ","ses-ML","shi-Latn","shi-Latn-MA","shi-Tfng","shi-Tfng-MA","smn-FI","teo-KE","teo-UG","twq-NE","tzm-Latn","tzm-Latn-MA","vai-Latn","vai-Latn-LR","vai-Vaii","vai-Vaii-LR","vun-TZ","wae-CH","xog-UG","yav-CM","zgh-MA","af-NA","af-ZA","ak-GH","am-ET","ar-001","ar-AE","ar-BH","ar-DJ","ar-DZ","ar-EG","ar-EH","ar-ER","ar-IL","ar-IQ","ar-JO","ar-KM","ar-KW","ar-LB","ar-LY","ar-MA","ar-MR","ar-OM","ar-PS","ar-QA","ar-SA","ar-SD","ar-SO","ar-SS","ar-SY","ar-TD","ar-TN","ar-YE","as-IN","az-Cyrl","az-Cyrl-AZ","az-Latn","az-Latn-AZ","be-BY","bg-BG","bm-Latn","bm-Latn-ML","bn-BD","bn-IN","bo-CN","bo-IN","br-FR","bs-Cyrl","bs-Cyrl-BA","bs-Latn","bs-Latn-BA","ca-AD","ca-ES","ca-ES-VALENCIA","ca-FR","ca-IT","cs-CZ","cy-GB","da-DK","da-GL","de-AT","de-BE","de-CH","de-DE","de-LI","de-LU","dz-BT","ee-GH","ee-TG","el-CY","el-GR","en-001","en-150","en-AG","en-AI","en-AS","en-AU","en-BB","en-BE","en-BM","en-BS","en-BW","en-BZ","en-CA","en-CC","en-CK","en-CM","en-CX","en-DG","en-DM","en-ER","en-FJ","en-FK","en-FM","en-GB","en-GD","en-GG","en-GH","en-GI","en-GM","en-GU","en-GY","en-HK","en-IE","en-IM","en-IN","en-IO","en-JE","en-JM","en-KE","en-KI","en-KN","en-KY","en-LC","en-LR","en-LS","en-MG","en-MH","en-MO","en-MP","en-MS","en-MT","en-MU","en-MW","en-MY","en-NA","en-NF","en-NG","en-NR","en-NU","en-NZ","en-PG","en-PH","en-PK","en-PN","en-PR","en-PW","en-RW","en-SB","en-SC","en-SD","en-SG","en-SH","en-SL","en-SS","en-SX","en-SZ","en-TC","en-TK","en-TO","en-TT","en-TV","en-TZ","en-UG","en-UM","en-US","en-US-POSIX","en-VC","en-VG","en-VI","en-VU","en-WS","en-ZA","en-ZM","en-ZW","eo-001","es-419","es-AR","es-BO","es-CL","es-CO","es-CR","es-CU","es-DO","es-EA","es-EC","es-ES","es-GQ","es-GT","es-HN","es-IC","es-MX","es-NI","es-PA","es-PE","es-PH","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","et-EE","eu-ES","fa-AF","fa-IR","ff-CM","ff-GN","ff-MR","ff-SN","fi-FI","fo-FO","fr-BE","fr-BF","fr-BI","fr-BJ","fr-BL","fr-CA","fr-CD","fr-CF","fr-CG","fr-CH","fr-CI","fr-CM","fr-DJ","fr-DZ","fr-FR","fr-GA","fr-GF","fr-GN","fr-GP","fr-GQ","fr-HT","fr-KM","fr-LU","fr-MA","fr-MC","fr-MF","fr-MG","fr-ML","fr-MQ","fr-MR","fr-MU","fr-NC","fr-NE","fr-PF","fr-PM","fr-RE","fr-RW","fr-SC","fr-SN","fr-SY","fr-TD","fr-TG","fr-TN","fr-VU","fr-WF","fr-YT","fy-NL","ga-IE","gd-GB","gl-ES","gu-IN","gv-IM","ha-Latn","ha-Latn-GH","ha-Latn-NE","ha-Latn-NG","he-IL","hi-IN","hr-BA","hr-HR","hu-HU","hy-AM","id-ID","ig-NG","ii-CN","is-IS","it-CH","it-IT","it-SM","ja-JP","ka-GE","ki-KE","kk-Cyrl","kk-Cyrl-KZ","kl-GL","km-KH","kn-IN","ko-KP","ko-KR","ks-Arab","ks-Arab-IN","kw-GB","ky-Cyrl","ky-Cyrl-KG","lb-LU","lg-UG","ln-AO","ln-CD","ln-CF","ln-CG","lo-LA","lt-LT","lu-CD","lv-LV","mg-MG","mk-MK","ml-IN","mn-Cyrl","mn-Cyrl-MN","mr-IN","ms-Latn","ms-Latn-BN","ms-Latn-MY","ms-Latn-SG","mt-MT","my-MM","nb-NO","nb-SJ","nd-ZW","ne-IN","ne-NP","nl-AW","nl-BE","nl-BQ","nl-CW","nl-NL","nl-SR","nl-SX","nn-NO","om-ET","om-KE","or-IN","os-GE","os-RU","pa-Arab","pa-Arab-PK","pa-Guru","pa-Guru-IN","pl-PL","ps-AF","pt-AO","pt-BR","pt-CV","pt-GW","pt-MO","pt-MZ","pt-PT","pt-ST","pt-TL","qu-BO","qu-EC","qu-PE","rm-CH","rn-BI","ro-MD","ro-RO","ru-BY","ru-KG","ru-KZ","ru-MD","ru-RU","ru-UA","rw-RW","se-FI","se-NO","se-SE","sg-CF","si-LK","sk-SK","sl-SI","sn-ZW","so-DJ","so-ET","so-KE","so-SO","sq-AL","sq-MK","sq-XK","sr-Cyrl","sr-Cyrl-BA","sr-Cyrl-ME","sr-Cyrl-RS","sr-Cyrl-XK","sr-Latn","sr-Latn-BA","sr-Latn-ME","sr-Latn-RS","sr-Latn-XK","sv-AX","sv-FI","sv-SE","sw-CD","sw-KE","sw-TZ","sw-UG","ta-IN","ta-LK","ta-MY","ta-SG","te-IN","th-TH","ti-ER","ti-ET","to-TO","tr-CY","tr-TR","ug-Arab","ug-Arab-CN","uk-UA","ur-IN","ur-PK","uz-Arab","uz-Arab-AF","uz-Cyrl","uz-Cyrl-UZ","uz-Latn","uz-Latn-UZ","vi-VN","yi-001","yo-BJ","yo-NG","zh-Hans","zh-Hans-CN","zh-Hans-HK","zh-Hans-MO","zh-Hans-SG","zh-Hant","zh-Hant-HK","zh-Hant-MO","zh-Hant-TW","zu-ZA"],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],country_regions:{it:[{name:"Valle d'Aosta",abbreviation:"VDA"},{name:"Piemonte",abbreviation:"PIE"},{name:"Lombardia",abbreviation:"LOM"},{name:"Veneto",abbreviation:"VEN"},{name:"Trentino Alto Adige",abbreviation:"TAA"},{name:"Friuli Venezia Giulia",abbreviation:"FVG"},{name:"Liguria",abbreviation:"LIG"},{name:"Emilia Romagna",abbreviation:"EMR"},{name:"Toscana",abbreviation:"TOS"},{name:"Umbria",abbreviation:"UMB"},{name:"Marche",abbreviation:"MAR"},{name:"Abruzzo",abbreviation:"ABR"},{name:"Lazio",abbreviation:"LAZ"},{name:"Campania",abbreviation:"CAM"},{name:"Puglia",abbreviation:"PUG"},{name:"Basilicata",abbreviation:"BAS"},{name:"Molise",abbreviation:"MOL"},{name:"Calabria",abbreviation:"CAL"},{name:"Sicilia",abbreviation:"SIC"},{name:"Sardegna",abbreviation:"SAR"}]},street_suffixes:{us:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],it:[{name:"Accesso",abbreviation:"Acc."},{name:"Alzaia",abbreviation:"Alz."},{name:"Arco",abbreviation:"Arco"},{name:"Archivolto",abbreviation:"Acv."},{name:"Arena",abbreviation:"Arena"},{name:"Argine",abbreviation:"Argine"},{name:"Bacino",abbreviation:"Bacino"},{name:"Banchi",abbreviation:"Banchi"},{name:"Banchina",abbreviation:"Ban."},{name:"Bastioni",abbreviation:"Bas."},{name:"Belvedere",abbreviation:"Belv."},{name:"Borgata",abbreviation:"B.ta"},{name:"Borgo",abbreviation:"B.go"},{name:"Calata",abbreviation:"Cal."},{name:"Calle",abbreviation:"Calle"},{name:"Campiello",abbreviation:"Cam."},{name:"Campo",abbreviation:"Cam."},{name:"Canale",abbreviation:"Can."},{name:"Carraia",abbreviation:"Carr."},{name:"Cascina",abbreviation:"Cascina"},{name:"Case sparse",abbreviation:"c.s."},{name:"Cavalcavia",abbreviation:"Cv."},{name:"Circonvallazione",abbreviation:"Cv."},{name:"Complanare",abbreviation:"C.re"},{name:"Contrada",abbreviation:"C.da"},{name:"Corso",abbreviation:"C.so"},{name:"Corte",abbreviation:"C.te"},{name:"Cortile",abbreviation:"C.le"},{name:"Diramazione",abbreviation:"Dir."},{name:"Fondaco",abbreviation:"F.co"},{name:"Fondamenta",abbreviation:"F.ta"},{name:"Fondo",abbreviation:"F.do"},{name:"Frazione",abbreviation:"Fr."},{name:"Isola",abbreviation:"Is."},{name:"Largo",abbreviation:"L.go"},{name:"Litoranea",abbreviation:"Lit."},{name:"Lungolago",abbreviation:"L.go lago"},{name:"Lungo Po",abbreviation:"l.go Po"},{name:"Molo",abbreviation:"Molo"},{name:"Mura",abbreviation:"Mura"},{name:"Passaggio privato",abbreviation:"pass. priv."},{name:"Passeggiata",abbreviation:"Pass."},{name:"Piazza",abbreviation:"P.zza"},{name:"Piazzale",abbreviation:"P.le"},{name:"Ponte",abbreviation:"P.te"},{name:"Portico",abbreviation:"P.co"},{name:"Rampa",abbreviation:"Rampa"},{name:"Regione",abbreviation:"Reg."},{name:"Rione",abbreviation:"R.ne"},{name:"Rio",abbreviation:"Rio"},{name:"Ripa",abbreviation:"Ripa"},{name:"Riva",abbreviation:"Riva"},{name:"Rondò",abbreviation:"Rondò"},{name:"Rotonda",abbreviation:"Rot."},{name:"Sagrato",abbreviation:"Sagr."},{name:"Salita",abbreviation:"Sal."},{name:"Scalinata",abbreviation:"Scal."},{name:"Scalone",abbreviation:"Scal."},{name:"Slargo",abbreviation:"Sl."},{name:"Sottoportico",abbreviation:"Sott."},{name:"Strada",abbreviation:"Str."},{name:"Stradale",abbreviation:"Str.le"},{name:"Strettoia",abbreviation:"Strett."},{name:"Traversa",abbreviation:"Trav."},{name:"Via",abbreviation:"V."},{name:"Viale",abbreviation:"V.le"},{name:"Vicinale",abbreviation:"Vic.le"},{name:"Vicolo",abbreviation:"Vic."}],uk:[{name:"Avenue",abbreviation:"Ave"},{name:"Close",abbreviation:"Cl"},{name:"Court",abbreviation:"Ct"},{name:"Crescent",abbreviation:"Cr"},{name:"Drive",abbreviation:"Dr"},{name:"Garden",abbreviation:"Gdn"},{name:"Gardens",abbreviation:"Gdns"},{name:"Green",abbreviation:"Gn"},{name:"Grove",abbreviation:"Gr"},{name:"Lane",abbreviation:"Ln"},{name:"Mount",abbreviation:"Mt"},{name:"Place",abbreviation:"Pl"},{name:"Park",abbreviation:"Pk"},{name:"Ridge",abbreviation:"Rdg"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Valley",abbreviation:"Val"}]},months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN",name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso"},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som"},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba"},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}],colorNames:["AliceBlue","Black","Navy","DarkBlue","MediumBlue","Blue","DarkGreen","Green","Teal","DarkCyan","DeepSkyBlue","DarkTurquoise","MediumSpringGreen","Lime","SpringGreen","Aqua","Cyan","MidnightBlue","DodgerBlue","LightSeaGreen","ForestGreen","SeaGreen","DarkSlateGray","LimeGreen","MediumSeaGreen","Turquoise","RoyalBlue","SteelBlue","DarkSlateBlue","MediumTurquoise","Indigo","DarkOliveGreen","CadetBlue","CornflowerBlue","RebeccaPurple","MediumAquaMarine","DimGray","SlateBlue","OliveDrab","SlateGray","LightSlateGray","MediumSlateBlue","LawnGreen","Chartreuse","Aquamarine","Maroon","Purple","Olive","Gray","SkyBlue","LightSkyBlue","BlueViolet","DarkRed","DarkMagenta","SaddleBrown","Ivory","White","DarkSeaGreen","LightGreen","MediumPurple","DarkViolet","PaleGreen","DarkOrchid","YellowGreen","Sienna","Brown","DarkGray","LightBlue","GreenYellow","PaleTurquoise","LightSteelBlue","PowderBlue","FireBrick","DarkGoldenRod","MediumOrchid","RosyBrown","DarkKhaki","Silver","MediumVioletRed","IndianRed","Peru","Chocolate","Tan","LightGray","Thistle","Orchid","GoldenRod","PaleVioletRed","Crimson","Gainsboro","Plum","BurlyWood","LightCyan","Lavender","DarkSalmon","Violet","PaleGoldenRod","LightCoral","Khaki","AliceBlue","HoneyDew","Azure","SandyBrown","Wheat","Beige","WhiteSmoke","MintCream","GhostWhite","Salmon","AntiqueWhite","Linen","LightGoldenRodYellow","OldLace","Red","Fuchsia","Magenta","DeepPink","OrangeRed","Tomato","HotPink","Coral","DarkOrange","LightSalmon","Orange","LightPink","Pink","Gold","PeachPuff","NavajoWhite","Moccasin","Bisque","MistyRose","BlanchedAlmond","PapayaWhip","LavenderBlush","SeaShell","Cornsilk","LemonChiffon","FloralWhite","Snow","Yellow","LightYellow"],company:["3Com Corp","3M Company","A.G. Edwards Inc.","Abbott Laboratories","Abercrombie & Fitch Co.","ABM Industries Incorporated","Ace Hardware Corporation","ACT Manufacturing Inc.","Acterna Corp.","Adams Resources & Energy, Inc.","ADC Telecommunications, Inc.","Adelphia Communications Corporation","Administaff, Inc.","Adobe Systems Incorporated","Adolph Coors Company","Advance Auto Parts, Inc.","Advanced Micro Devices, Inc.","AdvancePCS, Inc.","Advantica Restaurant Group, Inc.","The AES Corporation","Aetna Inc.","Affiliated Computer Services, Inc.","AFLAC Incorporated","AGCO Corporation","Agilent Technologies, Inc.","Agway Inc.","Apartment Investment and Management Company","Air Products and Chemicals, Inc.","Airborne, Inc.","Airgas, Inc.","AK Steel Holding Corporation","Alaska Air Group, Inc.","Alberto-Culver Company","Albertson's, Inc.","Alcoa Inc.","Alleghany Corporation","Allegheny Energy, Inc.","Allegheny Technologies Incorporated","Allergan, Inc.","ALLETE, Inc.","Alliant Energy Corporation","Allied Waste Industries, Inc.","Allmerica Financial Corporation","The Allstate Corporation","ALLTEL Corporation","The Alpine Group, Inc.","Amazon.com, Inc.","AMC Entertainment Inc.","American Power Conversion Corporation","Amerada Hess Corporation","AMERCO","Ameren Corporation","America West Holdings Corporation","American Axle & Manufacturing Holdings, Inc.","American Eagle Outfitters, Inc.","American Electric Power Company, Inc.","American Express Company","American Financial Group, Inc.","American Greetings Corporation","American International Group, Inc.","American Standard Companies Inc.","American Water Works Company, Inc.","AmerisourceBergen Corporation","Ames Department Stores, Inc.","Amgen Inc.","Amkor Technology, Inc.","AMR Corporation","AmSouth Bancorp.","Amtran, Inc.","Anadarko Petroleum Corporation","Analog Devices, Inc.","Anheuser-Busch Companies, Inc.","Anixter International Inc.","AnnTaylor Inc.","Anthem, Inc.","AOL Time Warner Inc.","Aon Corporation","Apache Corporation","Apple Computer, Inc.","Applera Corporation","Applied Industrial Technologies, Inc.","Applied Materials, Inc.","Aquila, Inc.","ARAMARK Corporation","Arch Coal, Inc.","Archer Daniels Midland Company","Arkansas Best Corporation","Armstrong Holdings, Inc.","Arrow Electronics, Inc.","ArvinMeritor, Inc.","Ashland Inc.","Astoria Financial Corporation","AT&T Corp.","Atmel Corporation","Atmos Energy Corporation","Audiovox Corporation","Autoliv, Inc.","Automatic Data Processing, Inc.","AutoNation, Inc.","AutoZone, Inc.","Avaya Inc.","Avery Dennison Corporation","Avista Corporation","Avnet, Inc.","Avon Products, Inc.","Baker Hughes Incorporated","Ball Corporation","Bank of America Corporation","The Bank of New York Company, Inc.","Bank One Corporation","Banknorth Group, Inc.","Banta Corporation","Barnes & Noble, Inc.","Bausch & Lomb Incorporated","Baxter International Inc.","BB&T Corporation","The Bear Stearns Companies Inc.","Beazer Homes USA, Inc.","Beckman Coulter, Inc.","Becton, Dickinson and Company","Bed Bath & Beyond Inc.","Belk, Inc.","Bell Microproducts Inc.","BellSouth Corporation","Belo Corp.","Bemis Company, Inc.","Benchmark Electronics, Inc.","Berkshire Hathaway Inc.","Best Buy Co., Inc.","Bethlehem Steel Corporation","Beverly Enterprises, Inc.","Big Lots, Inc.","BJ Services Company","BJ's Wholesale Club, Inc.","The Black & Decker Corporation","Black Hills Corporation","BMC Software, Inc.","The Boeing Company","Boise Cascade Corporation","Borders Group, Inc.","BorgWarner Inc.","Boston Scientific Corporation","Bowater Incorporated","Briggs & Stratton Corporation","Brightpoint, Inc.","Brinker International, Inc.","Bristol-Myers Squibb Company","Broadwing, Inc.","Brown Shoe Company, Inc.","Brown-Forman Corporation","Brunswick Corporation","Budget Group, Inc.","Burlington Coat Factory Warehouse Corporation","Burlington Industries, Inc.","Burlington Northern Santa Fe Corporation","Burlington Resources Inc.","C. H. Robinson Worldwide Inc.","Cablevision Systems Corp","Cabot Corp","Cadence Design Systems, Inc.","Calpine Corp.","Campbell Soup Co.","Capital One Financial Corp.","Cardinal Health Inc.","Caremark Rx Inc.","Carlisle Cos. Inc.","Carpenter Technology Corp.","Casey's General Stores Inc.","Caterpillar Inc.","CBRL Group Inc.","CDI Corp.","CDW Computer Centers Inc.","CellStar Corp.","Cendant Corp","Cenex Harvest States Cooperatives","Centex Corp.","CenturyTel Inc.","Ceridian Corp.","CH2M Hill Cos. Ltd.","Champion Enterprises Inc.","Charles Schwab Corp.","Charming Shoppes Inc.","Charter Communications Inc.","Charter One Financial Inc.","ChevronTexaco Corp.","Chiquita Brands International Inc.","Chubb Corp","Ciena Corp.","Cigna Corp","Cincinnati Financial Corp.","Cinergy Corp.","Cintas Corp.","Circuit City Stores Inc.","Cisco Systems Inc.","Citigroup, Inc","Citizens Communications Co.","CKE Restaurants Inc.","Clear Channel Communications Inc.","The Clorox Co.","CMGI Inc.","CMS Energy Corp.","CNF Inc.","Coca-Cola Co.","Coca-Cola Enterprises Inc.","Colgate-Palmolive Co.","Collins & Aikman Corp.","Comcast Corp.","Comdisco Inc.","Comerica Inc.","Comfort Systems USA Inc.","Commercial Metals Co.","Community Health Systems Inc.","Compass Bancshares Inc","Computer Associates International Inc.","Computer Sciences Corp.","Compuware Corp.","Comverse Technology Inc.","ConAgra Foods Inc.","Concord EFS Inc.","Conectiv, Inc","Conoco Inc","Conseco Inc.","Consolidated Freightways Corp.","Consolidated Edison Inc.","Constellation Brands Inc.","Constellation Emergy Group Inc.","Continental Airlines Inc.","Convergys Corp.","Cooper Cameron Corp.","Cooper Industries Ltd.","Cooper Tire & Rubber Co.","Corn Products International Inc.","Corning Inc.","Costco Wholesale Corp.","Countrywide Credit Industries Inc.","Coventry Health Care Inc.","Cox Communications Inc.","Crane Co.","Crompton Corp.","Crown Cork & Seal Co. Inc.","CSK Auto Corp.","CSX Corp.","Cummins Inc.","CVS Corp.","Cytec Industries Inc.","D&K Healthcare Resources, Inc.","D.R. Horton Inc.","Dana Corporation","Danaher Corporation","Darden Restaurants Inc.","DaVita Inc.","Dean Foods Company","Deere & Company","Del Monte Foods Co","Dell Computer Corporation","Delphi Corp.","Delta Air Lines Inc.","Deluxe Corporation","Devon Energy Corporation","Di Giorgio Corporation","Dial Corporation","Diebold Incorporated","Dillard's Inc.","DIMON Incorporated","Dole Food Company, Inc.","Dollar General Corporation","Dollar Tree Stores, Inc.","Dominion Resources, Inc.","Domino's Pizza LLC","Dover Corporation, Inc.","Dow Chemical Company","Dow Jones & Company, Inc.","DPL Inc.","DQE Inc.","Dreyer's Grand Ice Cream, Inc.","DST Systems, Inc.","DTE Energy Co.","E.I. Du Pont de Nemours and Company","Duke Energy Corp","Dun & Bradstreet Inc.","DURA Automotive Systems Inc.","DynCorp","Dynegy Inc.","E*Trade Group, Inc.","E.W. Scripps Company","Earthlink, Inc.","Eastman Chemical Company","Eastman Kodak Company","Eaton Corporation","Echostar Communications Corporation","Ecolab Inc.","Edison International","EGL Inc.","El Paso Corporation","Electronic Arts Inc.","Electronic Data Systems Corp.","Eli Lilly and Company","EMC Corporation","Emcor Group Inc.","Emerson Electric Co.","Encompass Services Corporation","Energizer Holdings Inc.","Energy East Corporation","Engelhard Corporation","Enron Corp.","Entergy Corporation","Enterprise Products Partners L.P.","EOG Resources, Inc.","Equifax Inc.","Equitable Resources Inc.","Equity Office Properties Trust","Equity Residential Properties Trust","Estee Lauder Companies Inc.","Exelon Corporation","Exide Technologies","Expeditors International of Washington Inc.","Express Scripts Inc.","ExxonMobil Corporation","Fairchild Semiconductor International Inc.","Family Dollar Stores Inc.","Farmland Industries Inc.","Federal Mogul Corp.","Federated Department Stores Inc.","Federal Express Corp.","Felcor Lodging Trust Inc.","Ferro Corp.","Fidelity National Financial Inc.","Fifth Third Bancorp","First American Financial Corp.","First Data Corp.","First National of Nebraska Inc.","First Tennessee National Corp.","FirstEnergy Corp.","Fiserv Inc.","Fisher Scientific International Inc.","FleetBoston Financial Co.","Fleetwood Enterprises Inc.","Fleming Companies Inc.","Flowers Foods Inc.","Flowserv Corp","Fluor Corp","FMC Corp","Foamex International Inc","Foot Locker Inc","Footstar Inc.","Ford Motor Co","Forest Laboratories Inc.","Fortune Brands Inc.","Foster Wheeler Ltd.","FPL Group Inc.","Franklin Resources Inc.","Freeport McMoran Copper & Gold Inc.","Frontier Oil Corp","Furniture Brands International Inc.","Gannett Co., Inc.","Gap Inc.","Gateway Inc.","GATX Corporation","Gemstar-TV Guide International Inc.","GenCorp Inc.","General Cable Corporation","General Dynamics Corporation","General Electric Company","General Mills Inc","General Motors Corporation","Genesis Health Ventures Inc.","Gentek Inc.","Gentiva Health Services Inc.","Genuine Parts Company","Genuity Inc.","Genzyme Corporation","Georgia Gulf Corporation","Georgia-Pacific Corporation","Gillette Company","Gold Kist Inc.","Golden State Bancorp Inc.","Golden West Financial Corporation","Goldman Sachs Group Inc.","Goodrich Corporation","The Goodyear Tire & Rubber Company","Granite Construction Incorporated","Graybar Electric Company Inc.","Great Lakes Chemical Corporation","Great Plains Energy Inc.","GreenPoint Financial Corp.","Greif Bros. Corporation","Grey Global Group Inc.","Group 1 Automotive Inc.","Guidant Corporation","H&R Block Inc.","H.B. Fuller Company","H.J. Heinz Company","Halliburton Co.","Harley-Davidson Inc.","Harman International Industries Inc.","Harrah's Entertainment Inc.","Harris Corp.","Harsco Corp.","Hartford Financial Services Group Inc.","Hasbro Inc.","Hawaiian Electric Industries Inc.","HCA Inc.","Health Management Associates Inc.","Health Net Inc.","Healthsouth Corp","Henry Schein Inc.","Hercules Inc.","Herman Miller Inc.","Hershey Foods Corp.","Hewlett-Packard Company","Hibernia Corp.","Hillenbrand Industries Inc.","Hilton Hotels Corp.","Hollywood Entertainment Corp.","Home Depot Inc.","Hon Industries Inc.","Honeywell International Inc.","Hormel Foods Corp.","Host Marriott Corp.","Household International Corp.","Hovnanian Enterprises Inc.","Hub Group Inc.","Hubbell Inc.","Hughes Supply Inc.","Humana Inc.","Huntington Bancshares Inc.","Idacorp Inc.","IDT Corporation","IKON Office Solutions Inc.","Illinois Tool Works Inc.","IMC Global Inc.","Imperial Sugar Company","IMS Health Inc.","Ingles Market Inc","Ingram Micro Inc.","Insight Enterprises Inc.","Integrated Electrical Services Inc.","Intel Corporation","International Paper Co.","Interpublic Group of Companies Inc.","Interstate Bakeries Corporation","International Business Machines Corp.","International Flavors & Fragrances Inc.","International Multifoods Corporation","Intuit Inc.","IT Group Inc.","ITT Industries Inc.","Ivax Corp.","J.B. Hunt Transport Services Inc.","J.C. Penny Co.","J.P. Morgan Chase & Co.","Jabil Circuit Inc.","Jack In The Box Inc.","Jacobs Engineering Group Inc.","JDS Uniphase Corp.","Jefferson-Pilot Co.","John Hancock Financial Services Inc.","Johnson & Johnson","Johnson Controls Inc.","Jones Apparel Group Inc.","KB Home","Kellogg Company","Kellwood Company","Kelly Services Inc.","Kemet Corp.","Kennametal Inc.","Kerr-McGee Corporation","KeyCorp","KeySpan Corp.","Kimball International Inc.","Kimberly-Clark Corporation","Kindred Healthcare Inc.","KLA-Tencor Corporation","K-Mart Corp.","Knight-Ridder Inc.","Kohl's Corp.","KPMG Consulting Inc.","Kroger Co.","L-3 Communications Holdings Inc.","Laboratory Corporation of America Holdings","Lam Research Corporation","LandAmerica Financial Group Inc.","Lands' End Inc.","Landstar System Inc.","La-Z-Boy Inc.","Lear Corporation","Legg Mason Inc.","Leggett & Platt Inc.","Lehman Brothers Holdings Inc.","Lennar Corporation","Lennox International Inc.","Level 3 Communications Inc.","Levi Strauss & Co.","Lexmark International Inc.","Limited Inc.","Lincoln National Corporation","Linens 'n Things Inc.","Lithia Motors Inc.","Liz Claiborne Inc.","Lockheed Martin Corporation","Loews Corporation","Longs Drug Stores Corporation","Louisiana-Pacific Corporation","Lowe's Companies Inc.","LSI Logic Corporation","The LTV Corporation","The Lubrizol Corporation","Lucent Technologies Inc.","Lyondell Chemical Company","M & T Bank Corporation","Magellan Health Services Inc.","Mail-Well Inc.","Mandalay Resort Group","Manor Care Inc.","Manpower Inc.","Marathon Oil Corporation","Mariner Health Care Inc.","Markel Corporation","Marriott International Inc.","Marsh & McLennan Companies Inc.","Marsh Supermarkets Inc.","Marshall & Ilsley Corporation","Martin Marietta Materials Inc.","Masco Corporation","Massey Energy Company","MasTec Inc.","Mattel Inc.","Maxim Integrated Products Inc.","Maxtor Corporation","Maxxam Inc.","The May Department Stores Company","Maytag Corporation","MBNA Corporation","McCormick & Company Incorporated","McDonald's Corporation","The McGraw-Hill Companies Inc.","McKesson Corporation","McLeodUSA Incorporated","M.D.C. Holdings Inc.","MDU Resources Group Inc.","MeadWestvaco Corporation","Medtronic Inc.","Mellon Financial Corporation","The Men's Wearhouse Inc.","Merck & Co., Inc.","Mercury General Corporation","Merrill Lynch & Co. Inc.","Metaldyne Corporation","Metals USA Inc.","MetLife Inc.","Metris Companies Inc","MGIC Investment Corporation","MGM Mirage","Michaels Stores Inc.","Micron Technology Inc.","Microsoft Corporation","Milacron Inc.","Millennium Chemicals Inc.","Mirant Corporation","Mohawk Industries Inc.","Molex Incorporated","The MONY Group Inc.","Morgan Stanley Dean Witter & Co.","Motorola Inc.","MPS Group Inc.","Murphy Oil Corporation","Nabors Industries Inc","Nacco Industries Inc","Nash Finch Company","National City Corp.","National Commerce Financial Corporation","National Fuel Gas Company","National Oilwell Inc","National Rural Utilities Cooperative Finance Corporation","National Semiconductor Corporation","National Service Industries Inc","Navistar International Corporation","NCR Corporation","The Neiman Marcus Group Inc.","New Jersey Resources Corporation","New York Times Company","Newell Rubbermaid Inc","Newmont Mining Corporation","Nextel Communications Inc","Nicor Inc","Nike Inc","NiSource Inc","Noble Energy Inc","Nordstrom Inc","Norfolk Southern Corporation","Nortek Inc","North Fork Bancorporation Inc","Northeast Utilities System","Northern Trust Corporation","Northrop Grumman Corporation","NorthWestern Corporation","Novellus Systems Inc","NSTAR","NTL Incorporated","Nucor Corp","Nvidia Corp","NVR Inc","Northwest Airlines Corp","Occidental Petroleum Corp","Ocean Energy Inc","Office Depot Inc.","OfficeMax Inc","OGE Energy Corp","Oglethorpe Power Corp.","Ohio Casualty Corp.","Old Republic International Corp.","Olin Corp.","OM Group Inc","Omnicare Inc","Omnicom Group","On Semiconductor Corp","ONEOK Inc","Oracle Corp","Oshkosh Truck Corp","Outback Steakhouse Inc.","Owens & Minor Inc.","Owens Corning","Owens-Illinois Inc","Oxford Health Plans Inc","Paccar Inc","PacifiCare Health Systems Inc","Packaging Corp. of America","Pactiv Corp","Pall Corp","Pantry Inc","Park Place Entertainment Corp","Parker Hannifin Corp.","Pathmark Stores Inc.","Paychex Inc","Payless Shoesource Inc","Penn Traffic Co.","Pennzoil-Quaker State Company","Pentair Inc","Peoples Energy Corp.","PeopleSoft Inc","Pep Boys Manny, Moe & Jack","Potomac Electric Power Co.","Pepsi Bottling Group Inc.","PepsiAmericas Inc.","PepsiCo Inc.","Performance Food Group Co.","Perini Corp","PerkinElmer Inc","Perot Systems Corp","Petco Animal Supplies Inc.","Peter Kiewit Sons', Inc.","PETsMART Inc","Pfizer Inc","Pacific Gas & Electric Corp.","Pharmacia Corp","Phar Mor Inc.","Phelps Dodge Corp.","Philip Morris Companies Inc.","Phillips Petroleum Co","Phillips Van Heusen Corp.","Phoenix Companies Inc","Pier 1 Imports Inc.","Pilgrim's Pride Corporation","Pinnacle West Capital Corp","Pioneer-Standard Electronics Inc.","Pitney Bowes Inc.","Pittston Brinks Group","Plains All American Pipeline LP","PNC Financial Services Group Inc.","PNM Resources Inc","Polaris Industries Inc.","Polo Ralph Lauren Corp","PolyOne Corp","Popular Inc","Potlatch Corp","PPG Industries Inc","PPL Corp","Praxair Inc","Precision Castparts Corp","Premcor Inc.","Pride International Inc","Primedia Inc","Principal Financial Group Inc.","Procter & Gamble Co.","Pro-Fac Cooperative Inc.","Progress Energy Inc","Progressive Corporation","Protective Life Corp","Provident Financial Group","Providian Financial Corp.","Prudential Financial Inc.","PSS World Medical Inc","Public Service Enterprise Group Inc.","Publix Super Markets Inc.","Puget Energy Inc.","Pulte Homes Inc","Qualcomm Inc","Quanta Services Inc.","Quantum Corp","Quest Diagnostics Inc.","Questar Corp","Quintiles Transnational","Qwest Communications Intl Inc","R.J. Reynolds Tobacco Company","R.R. Donnelley & Sons Company","Radio Shack Corporation","Raymond James Financial Inc.","Raytheon Company","Reader's Digest Association Inc.","Reebok International Ltd.","Regions Financial Corp.","Regis Corporation","Reliance Steel & Aluminum Co.","Reliant Energy Inc.","Rent A Center Inc","Republic Services Inc","Revlon Inc","RGS Energy Group Inc","Rite Aid Corp","Riverwood Holding Inc.","RoadwayCorp","Robert Half International Inc.","Rock-Tenn Co","Rockwell Automation Inc","Rockwell Collins Inc","Rohm & Haas Co.","Ross Stores Inc","RPM Inc.","Ruddick Corp","Ryder System Inc","Ryerson Tull Inc","Ryland Group Inc.","Sabre Holdings Corp","Safeco Corp","Safeguard Scientifics Inc.","Safeway Inc","Saks Inc","Sanmina-SCI Inc","Sara Lee Corp","SBC Communications Inc","Scana Corp.","Schering-Plough Corp","Scholastic Corp","SCI Systems Onc.","Science Applications Intl. Inc.","Scientific-Atlanta Inc","Scotts Company","Seaboard Corp","Sealed Air Corp","Sears Roebuck & Co","Sempra Energy","Sequa Corp","Service Corp. International","ServiceMaster Co","Shaw Group Inc","Sherwin-Williams Company","Shopko Stores Inc","Siebel Systems Inc","Sierra Health Services Inc","Sierra Pacific Resources","Silgan Holdings Inc.","Silicon Graphics Inc","Simon Property Group Inc","SLM Corporation","Smith International Inc","Smithfield Foods Inc","Smurfit-Stone Container Corp","Snap-On Inc","Solectron Corp","Solutia Inc","Sonic Automotive Inc.","Sonoco Products Co.","Southern Company","Southern Union Company","SouthTrust Corp.","Southwest Airlines Co","Southwest Gas Corp","Sovereign Bancorp Inc.","Spartan Stores Inc","Spherion Corp","Sports Authority Inc","Sprint Corp.","SPX Corp","St. Jude Medical Inc","St. Paul Cos.","Staff Leasing Inc.","StanCorp Financial Group Inc","Standard Pacific Corp.","Stanley Works","Staples Inc","Starbucks Corp","Starwood Hotels & Resorts Worldwide Inc","State Street Corp.","Stater Bros. Holdings Inc.","Steelcase Inc","Stein Mart Inc","Stewart & Stevenson Services Inc","Stewart Information Services Corp","Stilwell Financial Inc","Storage Technology Corporation","Stryker Corp","Sun Healthcare Group Inc.","Sun Microsystems Inc.","SunGard Data Systems Inc.","Sunoco Inc.","SunTrust Banks Inc","Supervalu Inc","Swift Transportation, Co., Inc","Symbol Technologies Inc","Synovus Financial Corp.","Sysco Corp","Systemax Inc.","Target Corp.","Tech Data Corporation","TECO Energy Inc","Tecumseh Products Company","Tektronix Inc","Teleflex Incorporated","Telephone & Data Systems Inc","Tellabs Inc.","Temple-Inland Inc","Tenet Healthcare Corporation","Tenneco Automotive Inc.","Teradyne Inc","Terex Corp","Tesoro Petroleum Corp.","Texas Industries Inc.","Texas Instruments Incorporated","Textron Inc","Thermo Electron Corporation","Thomas & Betts Corporation","Tiffany & Co","Timken Company","TJX Companies Inc","TMP Worldwide Inc","Toll Brothers Inc","Torchmark Corporation","Toro Company","Tower Automotive Inc.","Toys 'R' Us Inc","Trans World Entertainment Corp.","TransMontaigne Inc","Transocean Inc","TravelCenters of America Inc.","Triad Hospitals Inc","Tribune Company","Trigon Healthcare Inc.","Trinity Industries Inc","Trump Hotels & Casino Resorts Inc.","TruServ Corporation","TRW Inc","TXU Corp","Tyson Foods Inc","U.S. Bancorp","U.S. Industries Inc.","UAL Corporation","UGI Corporation","Unified Western Grocers Inc","Union Pacific Corporation","Union Planters Corp","Unisource Energy Corp","Unisys Corporation","United Auto Group Inc","United Defense Industries Inc.","United Parcel Service Inc","United Rentals Inc","United Stationers Inc","United Technologies Corporation","UnitedHealth Group Incorporated","Unitrin Inc","Universal Corporation","Universal Forest Products Inc","Universal Health Services Inc","Unocal Corporation","Unova Inc","UnumProvident Corporation","URS Corporation","US Airways Group Inc","US Oncology Inc","USA Interactive","USFreighways Corporation","USG Corporation","UST Inc","Valero Energy Corporation","Valspar Corporation","Value City Department Stores Inc","Varco International Inc","Vectren Corporation","Veritas Software Corporation","Verizon Communications Inc","VF Corporation","Viacom Inc","Viad Corp","Viasystems Group Inc","Vishay Intertechnology Inc","Visteon Corporation","Volt Information Sciences Inc","Vulcan Materials Company","W.R. Berkley Corporation","W.R. Grace & Co","W.W. Grainger Inc","Wachovia Corporation","Wakenhut Corporation","Walgreen Co","Wallace Computer Services Inc","Wal-Mart Stores Inc","Walt Disney Co","Walter Industries Inc","Washington Mutual Inc","Washington Post Co.","Waste Management Inc","Watsco Inc","Weatherford International Inc","Weis Markets Inc.","Wellpoint Health Networks Inc","Wells Fargo & Company","Wendy's International Inc","Werner Enterprises Inc","WESCO International Inc","Western Digital Inc","Western Gas Resources Inc","WestPoint Stevens Inc","Weyerhauser Company","WGL Holdings Inc","Whirlpool Corporation","Whole Foods Market Inc","Willamette Industries Inc.","Williams Companies Inc","Williams Sonoma Inc","Winn Dixie Stores Inc","Wisconsin Energy Corporation","Wm Wrigley Jr Company","World Fuel Services Corporation","WorldCom Inc","Worthington Industries Inc","WPS Resources Corporation","Wyeth","Wyndham International Inc","Xcel Energy Inc","Xerox Corp","Xilinx Inc","XO Communications Inc","Yellow Corporation","York International Corp","Yum Brands Inc.","Zale Corporation","Zions Bancorporation"],fileExtension:{raster:["bmp","gif","gpl","ico","jpeg","psd","png","psp","raw","tiff"],vector:["3dv","amf","awg","ai","cgm","cdr","cmx","dxf","e2d","egt","eps","fs","odg","svg","xar"],"3d":["3dmf","3dm","3mf","3ds","an8","aoi","blend","cal3d","cob","ctm","iob","jas","max","mb","mdx","obj","x","x3d"],document:["doc","docx","dot","html","xml","odt","odm","ott","csv","rtf","tex","xhtml","xps"]},timezones:[{name:"Dateline Standard Time",abbr:"DST",offset:-12,isdst:!1,text:"(UTC-12:00) International Date Line West",utc:["Etc/GMT+12"]},{name:"UTC-11",abbr:"U",offset:-11,isdst:!1,text:"(UTC-11:00) Coordinated Universal Time-11",utc:["Etc/GMT+11","Pacific/Midway","Pacific/Niue","Pacific/Pago_Pago"]},{name:"Hawaiian Standard Time",abbr:"HST",offset:-10,isdst:!1,text:"(UTC-10:00) Hawaii",utc:["Etc/GMT+10","Pacific/Honolulu","Pacific/Johnston","Pacific/Rarotonga","Pacific/Tahiti"]},{name:"Alaskan Standard Time",abbr:"AKDT",offset:-8,isdst:!0,text:"(UTC-09:00) Alaska",utc:["America/Anchorage","America/Juneau","America/Nome","America/Sitka","America/Yakutat"]},{name:"Pacific Standard Time (Mexico)",abbr:"PDT",offset:-7,isdst:!0,text:"(UTC-08:00) Baja California",utc:["America/Santa_Isabel"]},{name:"Pacific Standard Time",abbr:"PDT",offset:-7,isdst:!0,text:"(UTC-08:00) Pacific Time (US & Canada)",utc:["America/Dawson","America/Los_Angeles","America/Tijuana","America/Vancouver","America/Whitehorse","PST8PDT"]},{name:"US Mountain Standard Time",abbr:"UMST",offset:-7,isdst:!1,text:"(UTC-07:00) Arizona",utc:["America/Creston","America/Dawson_Creek","America/Hermosillo","America/Phoenix","Etc/GMT+7"]},{name:"Mountain Standard Time (Mexico)",abbr:"MDT",offset:-6,isdst:!0,text:"(UTC-07:00) Chihuahua, La Paz, Mazatlan",utc:["America/Chihuahua","America/Mazatlan"]},{name:"Mountain Standard Time",abbr:"MDT",offset:-6,isdst:!0,text:"(UTC-07:00) Mountain Time (US & Canada)",utc:["America/Boise","America/Cambridge_Bay","America/Denver","America/Edmonton","America/Inuvik","America/Ojinaga","America/Yellowknife","MST7MDT"]},{name:"Central America Standard Time",abbr:"CAST",offset:-6,isdst:!1,text:"(UTC-06:00) Central America",utc:["America/Belize","America/Costa_Rica","America/El_Salvador","America/Guatemala","America/Managua","America/Tegucigalpa","Etc/GMT+6","Pacific/Galapagos"]},{name:"Central Standard Time",abbr:"CDT",offset:-5,isdst:!0,text:"(UTC-06:00) Central Time (US & Canada)",utc:["America/Chicago","America/Indiana/Knox","America/Indiana/Tell_City","America/Matamoros","America/Menominee","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Rainy_River","America/Rankin_Inlet","America/Resolute","America/Winnipeg","CST6CDT"]},{name:"Central Standard Time (Mexico)",abbr:"CDT",offset:-5,isdst:!0,text:"(UTC-06:00) Guadalajara, Mexico City, Monterrey",utc:["America/Bahia_Banderas","America/Cancun","America/Merida","America/Mexico_City","America/Monterrey"]},{name:"Canada Central Standard Time",abbr:"CCST",offset:-6,isdst:!1,text:"(UTC-06:00) Saskatchewan",utc:["America/Regina","America/Swift_Current"]},{name:"SA Pacific Standard Time",abbr:"SPST",offset:-5,isdst:!1,text:"(UTC-05:00) Bogota, Lima, Quito",utc:["America/Bogota","America/Cayman","America/Coral_Harbour","America/Eirunepe","America/Guayaquil","America/Jamaica","America/Lima","America/Panama","America/Rio_Branco","Etc/GMT+5"]},{name:"Eastern Standard Time",abbr:"EDT",offset:-4,isdst:!0,text:"(UTC-05:00) Eastern Time (US & Canada)",utc:["America/Detroit","America/Havana","America/Indiana/Petersburg","America/Indiana/Vincennes","America/Indiana/Winamac","America/Iqaluit","America/Kentucky/Monticello","America/Louisville","America/Montreal","America/Nassau","America/New_York","America/Nipigon","America/Pangnirtung","America/Port-au-Prince","America/Thunder_Bay","America/Toronto","EST5EDT"]},{name:"US Eastern Standard Time",abbr:"UEDT",offset:-4,isdst:!0,text:"(UTC-05:00) Indiana (East)",utc:["America/Indiana/Marengo","America/Indiana/Vevay","America/Indianapolis"]},{name:"Venezuela Standard Time",abbr:"VST",offset:-4.5,isdst:!1,text:"(UTC-04:30) Caracas",utc:["America/Caracas"]},{name:"Paraguay Standard Time",abbr:"PST",offset:-4,isdst:!1,text:"(UTC-04:00) Asuncion",utc:["America/Asuncion"]},{name:"Atlantic Standard Time",abbr:"ADT",offset:-3,isdst:!0,text:"(UTC-04:00) Atlantic Time (Canada)",utc:["America/Glace_Bay","America/Goose_Bay","America/Halifax","America/Moncton","America/Thule","Atlantic/Bermuda"]},{name:"Central Brazilian Standard Time",abbr:"CBST",offset:-4,isdst:!1,text:"(UTC-04:00) Cuiaba",utc:["America/Campo_Grande","America/Cuiaba"]},{name:"SA Western Standard Time",abbr:"SWST",offset:-4,isdst:!1,text:"(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",utc:["America/Anguilla","America/Antigua","America/Aruba","America/Barbados","America/Blanc-Sablon","America/Boa_Vista","America/Curacao","America/Dominica","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guyana","America/Kralendijk","America/La_Paz","America/Lower_Princes","America/Manaus","America/Marigot","America/Martinique","America/Montserrat","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Santo_Domingo","America/St_Barthelemy","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Tortola","Etc/GMT+4"]},{name:"Pacific SA Standard Time",abbr:"PSST",offset:-4,isdst:!1,text:"(UTC-04:00) Santiago",utc:["America/Santiago","Antarctica/Palmer"]},{name:"Newfoundland Standard Time",abbr:"NDT",offset:-2.5,isdst:!0,text:"(UTC-03:30) Newfoundland",utc:["America/St_Johns"]},{name:"E. South America Standard Time",abbr:"ESAST",offset:-3,isdst:!1,text:"(UTC-03:00) Brasilia",utc:["America/Sao_Paulo"]},{name:"Argentina Standard Time",abbr:"AST",offset:-3,isdst:!1,text:"(UTC-03:00) Buenos Aires",utc:["America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Buenos_Aires","America/Catamarca","America/Cordoba","America/Jujuy","America/Mendoza"]},{name:"SA Eastern Standard Time",abbr:"SEST",offset:-3,isdst:!1,text:"(UTC-03:00) Cayenne, Fortaleza",utc:["America/Araguaina","America/Belem","America/Cayenne","America/Fortaleza","America/Maceio","America/Paramaribo","America/Recife","America/Santarem","Antarctica/Rothera","Atlantic/Stanley","Etc/GMT+3"]},{name:"Greenland Standard Time",abbr:"GDT",offset:-2,isdst:!0,text:"(UTC-03:00) Greenland",utc:["America/Godthab"]},{name:"Montevideo Standard Time",abbr:"MST",offset:-3,isdst:!1,text:"(UTC-03:00) Montevideo",utc:["America/Montevideo"]},{name:"Bahia Standard Time",abbr:"BST",offset:-3,isdst:!1,text:"(UTC-03:00) Salvador",utc:["America/Bahia"]},{name:"UTC-02",abbr:"U",offset:-2,isdst:!1,text:"(UTC-02:00) Coordinated Universal Time-02",utc:["America/Noronha","Atlantic/South_Georgia","Etc/GMT+2"]},{name:"Mid-Atlantic Standard Time",abbr:"MDT",offset:-1,isdst:!0,text:"(UTC-02:00) Mid-Atlantic - Old"},{name:"Azores Standard Time",abbr:"ADT",offset:0,isdst:!0,text:"(UTC-01:00) Azores",utc:["America/Scoresbysund","Atlantic/Azores"]},{name:"Cape Verde Standard Time",abbr:"CVST",offset:-1,isdst:!1,text:"(UTC-01:00) Cape Verde Is.",utc:["Atlantic/Cape_Verde","Etc/GMT+1"]},{name:"Morocco Standard Time",abbr:"MDT",offset:1,isdst:!0,text:"(UTC) Casablanca",utc:["Africa/Casablanca","Africa/El_Aaiun"]},{name:"UTC",abbr:"CUT",offset:0,isdst:!1,text:"(UTC) Coordinated Universal Time",utc:["America/Danmarkshavn","Etc/GMT"]},{name:"GMT Standard Time",abbr:"GDT",offset:1,isdst:!0,text:"(UTC) Dublin, Edinburgh, Lisbon, London",utc:["Atlantic/Canary","Atlantic/Faeroe","Atlantic/Madeira","Europe/Dublin","Europe/Guernsey","Europe/Isle_of_Man","Europe/Jersey","Europe/Lisbon","Europe/London"]},{name:"Greenwich Standard Time",abbr:"GST",offset:0,isdst:!1,text:"(UTC) Monrovia, Reykjavik",utc:["Africa/Abidjan","Africa/Accra","Africa/Bamako","Africa/Banjul","Africa/Bissau","Africa/Conakry","Africa/Dakar","Africa/Freetown","Africa/Lome","Africa/Monrovia","Africa/Nouakchott","Africa/Ouagadougou","Africa/Sao_Tome","Atlantic/Reykjavik","Atlantic/St_Helena"]},{name:"W. Europe Standard Time",abbr:"WEDT",offset:2,isdst:!0,text:"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",utc:["Arctic/Longyearbyen","Europe/Amsterdam","Europe/Andorra","Europe/Berlin","Europe/Busingen","Europe/Gibraltar","Europe/Luxembourg","Europe/Malta","Europe/Monaco","Europe/Oslo","Europe/Rome","Europe/San_Marino","Europe/Stockholm","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Zurich"]},{name:"Central Europe Standard Time",abbr:"CEDT",offset:2,isdst:!0,text:"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",utc:["Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Podgorica","Europe/Prague","Europe/Tirane"]},{name:"Romance Standard Time",abbr:"RDT",offset:2,isdst:!0,text:"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",utc:["Africa/Ceuta","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris"]},{name:"Central European Standard Time",abbr:"CEDT",offset:2,isdst:!0,text:"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",utc:["Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb"]},{name:"W. Central Africa Standard Time",abbr:"WCAST",offset:1,isdst:!1,text:"(UTC+01:00) West Central Africa",utc:["Africa/Algiers","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Luanda","Africa/Malabo","Africa/Ndjamena","Africa/Niamey","Africa/Porto-Novo","Africa/Tunis","Etc/GMT-1"]},{name:"Namibia Standard Time",abbr:"NST",offset:1,isdst:!1,text:"(UTC+01:00) Windhoek",utc:["Africa/Windhoek"]},{name:"GTB Standard Time",abbr:"GDT",offset:3,isdst:!0,text:"(UTC+02:00) Athens, Bucharest",utc:["Asia/Nicosia","Europe/Athens","Europe/Bucharest","Europe/Chisinau"]},{name:"Middle East Standard Time",abbr:"MEDT",offset:3,isdst:!0,text:"(UTC+02:00) Beirut",utc:["Asia/Beirut"]},{name:"Egypt Standard Time",abbr:"EST",offset:2,isdst:!1,text:"(UTC+02:00) Cairo",utc:["Africa/Cairo"]},{name:"Syria Standard Time",abbr:"SDT",offset:3,isdst:!0,text:"(UTC+02:00) Damascus",utc:["Asia/Damascus"]},{name:"E. Europe Standard Time",abbr:"EEDT",offset:3,isdst:!0,text:"(UTC+02:00) E. Europe"},{name:"South Africa Standard Time",abbr:"SAST",offset:2,isdst:!1,text:"(UTC+02:00) Harare, Pretoria",utc:["Africa/Blantyre","Africa/Bujumbura","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Kigali","Africa/Lubumbashi","Africa/Lusaka","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Etc/GMT-2"]},{name:"FLE Standard Time",abbr:"FDT",offset:3,isdst:!0,text:"(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",utc:["Europe/Helsinki","Europe/Kiev","Europe/Mariehamn","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Uzhgorod","Europe/Vilnius","Europe/Zaporozhye"]},{name:"Turkey Standard Time",abbr:"TDT",offset:3,isdst:!0,text:"(UTC+02:00) Istanbul",utc:["Europe/Istanbul"]},{name:"Israel Standard Time",abbr:"JDT",offset:3,isdst:!0,text:"(UTC+02:00) Jerusalem",utc:["Asia/Jerusalem"]},{name:"Libya Standard Time",abbr:"LST",offset:2,isdst:!1,text:"(UTC+02:00) Tripoli",utc:["Africa/Tripoli"]},{name:"Jordan Standard Time",abbr:"JST",offset:3,isdst:!1,text:"(UTC+03:00) Amman",utc:["Asia/Amman"]},{name:"Arabic Standard Time",abbr:"AST",offset:3,isdst:!1,text:"(UTC+03:00) Baghdad",utc:["Asia/Baghdad"]},{name:"Kaliningrad Standard Time",abbr:"KST",offset:3,isdst:!1,text:"(UTC+03:00) Kaliningrad, Minsk",utc:["Europe/Kaliningrad","Europe/Minsk"]},{name:"Arab Standard Time",abbr:"AST",offset:3,isdst:!1,text:"(UTC+03:00) Kuwait, Riyadh",utc:["Asia/Aden","Asia/Bahrain","Asia/Kuwait","Asia/Qatar","Asia/Riyadh"]},{name:"E. Africa Standard Time",abbr:"EAST",offset:3,isdst:!1,text:"(UTC+03:00) Nairobi",utc:["Africa/Addis_Ababa","Africa/Asmera","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Mogadishu","Africa/Nairobi","Antarctica/Syowa","Etc/GMT-3","Indian/Antananarivo","Indian/Comoro","Indian/Mayotte"]},{name:"Iran Standard Time",abbr:"IDT",offset:4.5,isdst:!0,text:"(UTC+03:30) Tehran",utc:["Asia/Tehran"]},{name:"Arabian Standard Time",abbr:"AST",offset:4,isdst:!1,text:"(UTC+04:00) Abu Dhabi, Muscat",utc:["Asia/Dubai","Asia/Muscat","Etc/GMT-4"]},{name:"Azerbaijan Standard Time",abbr:"ADT",offset:5,isdst:!0,text:"(UTC+04:00) Baku",utc:["Asia/Baku"]},{name:"Russian Standard Time",abbr:"RST",offset:4,isdst:!1,text:"(UTC+04:00) Moscow, St. Petersburg, Volgograd",utc:["Europe/Moscow","Europe/Samara","Europe/Simferopol","Europe/Volgograd"]},{name:"Mauritius Standard Time",abbr:"MST",offset:4,isdst:!1,text:"(UTC+04:00) Port Louis",utc:["Indian/Mahe","Indian/Mauritius","Indian/Reunion"]},{name:"Georgian Standard Time",abbr:"GST",offset:4,isdst:!1,text:"(UTC+04:00) Tbilisi",utc:["Asia/Tbilisi"]},{name:"Caucasus Standard Time",abbr:"CST",offset:4,isdst:!1,text:"(UTC+04:00) Yerevan",utc:["Asia/Yerevan"]},{name:"Afghanistan Standard Time",abbr:"AST",offset:4.5,isdst:!1,text:"(UTC+04:30) Kabul",utc:["Asia/Kabul"]},{name:"West Asia Standard Time",abbr:"WAST",offset:5,isdst:!1,text:"(UTC+05:00) Ashgabat, Tashkent",utc:["Antarctica/Mawson","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Dushanbe","Asia/Oral","Asia/Samarkand","Asia/Tashkent","Etc/GMT-5","Indian/Kerguelen","Indian/Maldives"]},{name:"Pakistan Standard Time",abbr:"PST",offset:5,isdst:!1,text:"(UTC+05:00) Islamabad, Karachi",utc:["Asia/Karachi"]},{name:"India Standard Time",abbr:"IST",offset:5.5,isdst:!1,text:"(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",utc:["Asia/Calcutta"]},{name:"Sri Lanka Standard Time",abbr:"SLST",offset:5.5,isdst:!1,text:"(UTC+05:30) Sri Jayawardenepura",utc:["Asia/Colombo"]},{name:"Nepal Standard Time",abbr:"NST",offset:5.75,isdst:!1,text:"(UTC+05:45) Kathmandu",utc:["Asia/Katmandu"]},{name:"Central Asia Standard Time",abbr:"CAST",offset:6,isdst:!1,text:"(UTC+06:00) Astana",utc:["Antarctica/Vostok","Asia/Almaty","Asia/Bishkek","Asia/Qyzylorda","Asia/Urumqi","Etc/GMT-6","Indian/Chagos"]},{name:"Bangladesh Standard Time",abbr:"BST",offset:6,isdst:!1,text:"(UTC+06:00) Dhaka",utc:["Asia/Dhaka","Asia/Thimphu"]},{name:"Ekaterinburg Standard Time",abbr:"EST",offset:6,isdst:!1,text:"(UTC+06:00) Ekaterinburg",utc:["Asia/Yekaterinburg"]},{name:"Myanmar Standard Time",abbr:"MST",offset:6.5,isdst:!1,text:"(UTC+06:30) Yangon (Rangoon)",utc:["Asia/Rangoon","Indian/Cocos"]},{name:"SE Asia Standard Time",abbr:"SAST",offset:7,isdst:!1,text:"(UTC+07:00) Bangkok, Hanoi, Jakarta",utc:["Antarctica/Davis","Asia/Bangkok","Asia/Hovd","Asia/Jakarta","Asia/Phnom_Penh","Asia/Pontianak","Asia/Saigon","Asia/Vientiane","Etc/GMT-7","Indian/Christmas"]},{name:"N. Central Asia Standard Time",abbr:"NCAST",offset:7,isdst:!1,text:"(UTC+07:00) Novosibirsk",utc:["Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk"]},{name:"China Standard Time",abbr:"CST",offset:8,isdst:!1,text:"(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",utc:["Asia/Hong_Kong","Asia/Macau","Asia/Shanghai"]},{name:"North Asia Standard Time",abbr:"NAST",offset:8,isdst:!1,text:"(UTC+08:00) Krasnoyarsk",utc:["Asia/Krasnoyarsk"]},{name:"Singapore Standard Time",abbr:"MPST",offset:8,isdst:!1,text:"(UTC+08:00) Kuala Lumpur, Singapore",utc:["Asia/Brunei","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Makassar","Asia/Manila","Asia/Singapore","Etc/GMT-8"]},{name:"W. Australia Standard Time",abbr:"WAST",offset:8,isdst:!1,text:"(UTC+08:00) Perth",utc:["Antarctica/Casey","Australia/Perth"]},{name:"Taipei Standard Time",abbr:"TST",offset:8,isdst:!1,text:"(UTC+08:00) Taipei",utc:["Asia/Taipei"]},{name:"Ulaanbaatar Standard Time",abbr:"UST",offset:8,isdst:!1,text:"(UTC+08:00) Ulaanbaatar",utc:["Asia/Choibalsan","Asia/Ulaanbaatar"]},{name:"North Asia East Standard Time",abbr:"NAEST",offset:9,isdst:!1,text:"(UTC+09:00) Irkutsk",utc:["Asia/Irkutsk"]},{name:"Tokyo Standard Time",abbr:"TST",offset:9,isdst:!1,text:"(UTC+09:00) Osaka, Sapporo, Tokyo",utc:["Asia/Dili","Asia/Jayapura","Asia/Tokyo","Etc/GMT-9","Pacific/Palau"]},{name:"Korea Standard Time",abbr:"KST",offset:9,isdst:!1,text:"(UTC+09:00) Seoul",utc:["Asia/Pyongyang","Asia/Seoul"]},{name:"Cen. Australia Standard Time",abbr:"CAST",offset:9.5,isdst:!1,text:"(UTC+09:30) Adelaide",utc:["Australia/Adelaide","Australia/Broken_Hill"]},{name:"AUS Central Standard Time",abbr:"ACST",offset:9.5,isdst:!1,text:"(UTC+09:30) Darwin",utc:["Australia/Darwin"]},{name:"E. Australia Standard Time",abbr:"EAST",offset:10,isdst:!1,text:"(UTC+10:00) Brisbane",utc:["Australia/Brisbane","Australia/Lindeman"]},{name:"AUS Eastern Standard Time",abbr:"AEST",offset:10,isdst:!1,text:"(UTC+10:00) Canberra, Melbourne, Sydney",utc:["Australia/Melbourne","Australia/Sydney"]},{name:"West Pacific Standard Time",abbr:"WPST",offset:10,isdst:!1,text:"(UTC+10:00) Guam, Port Moresby",utc:["Antarctica/DumontDUrville","Etc/GMT-10","Pacific/Guam","Pacific/Port_Moresby","Pacific/Saipan","Pacific/Truk"]},{name:"Tasmania Standard Time",abbr:"TST",offset:10,isdst:!1,text:"(UTC+10:00) Hobart",utc:["Australia/Currie","Australia/Hobart"]},{name:"Yakutsk Standard Time",abbr:"YST",offset:10,isdst:!1,text:"(UTC+10:00) Yakutsk",utc:["Asia/Chita","Asia/Khandyga","Asia/Yakutsk"]},{name:"Central Pacific Standard Time",abbr:"CPST",offset:11,isdst:!1,text:"(UTC+11:00) Solomon Is., New Caledonia",utc:["Antarctica/Macquarie","Etc/GMT-11","Pacific/Efate","Pacific/Guadalcanal","Pacific/Kosrae","Pacific/Noumea","Pacific/Ponape"]},{name:"Vladivostok Standard Time",abbr:"VST",offset:11,isdst:!1,text:"(UTC+11:00) Vladivostok",utc:["Asia/Sakhalin","Asia/Ust-Nera","Asia/Vladivostok"]},{name:"New Zealand Standard Time",abbr:"NZST",offset:12,isdst:!1,text:"(UTC+12:00) Auckland, Wellington",utc:["Antarctica/McMurdo","Pacific/Auckland"]},{name:"UTC+12",abbr:"U",offset:12,isdst:!1,text:"(UTC+12:00) Coordinated Universal Time+12",utc:["Etc/GMT-12","Pacific/Funafuti","Pacific/Kwajalein","Pacific/Majuro","Pacific/Nauru","Pacific/Tarawa","Pacific/Wake","Pacific/Wallis"]},{name:"Fiji Standard Time",abbr:"FST",offset:12,isdst:!1,text:"(UTC+12:00) Fiji",utc:["Pacific/Fiji"]},{name:"Magadan Standard Time",abbr:"MST",offset:12,isdst:!1,text:"(UTC+12:00) Magadan",utc:["Asia/Anadyr","Asia/Kamchatka","Asia/Magadan","Asia/Srednekolymsk"]},{name:"Kamchatka Standard Time",abbr:"KDT",offset:13,isdst:!0,text:"(UTC+12:00) Petropavlovsk-Kamchatsky - Old"},{name:"Tonga Standard Time",abbr:"TST",offset:13,isdst:!1,text:"(UTC+13:00) Nuku'alofa",utc:["Etc/GMT-13","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Tongatapu"]},{name:"Samoa Standard Time",abbr:"SST",offset:13,isdst:!1,text:"(UTC+13:00) Samoa",utc:["Pacific/Apia"]}],profession:["Airline Pilot","Academic Team","Accountant","Account Executive","Actor","Actuary","Acquisition Analyst","Administrative Asst.","Administrative Analyst","Administrator","Advertising Director","Aerospace Engineer","Agent","Agricultural Inspector","Agricultural Scientist","Air Traffic Controller","Animal Trainer","Anthropologist","Appraiser","Architect","Art Director","Artist","Astronomer","Athletic Coach","Auditor","Author","Baker","Banker","Bankruptcy Attorney","Benefits Manager","Biologist","Bio-feedback Specialist","Biomedical Engineer","Biotechnical Researcher","Broadcaster","Broker","Building Manager","Building Contractor","Building Inspector","Business Analyst","Business Planner","Business Manager","Buyer","Call Center Manager","Career Counselor","Cash Manager","Ceramic Engineer","Chief Executive Officer","Chief Operation Officer","Chef","Chemical Engineer","Chemist","Child Care Manager","Chief Medical Officer","Chiropractor","Cinematographer","City Housing Manager","City Manager","Civil Engineer","Claims Manager","Clinical Research Assistant","Collections Manager.","Compliance Manager","Comptroller","Computer Manager","Commercial Artist","Communications Affairs Director","Communications Director","Communications Engineer","Compensation Analyst","Computer Programmer","Computer Ops. Manager","Computer Engineer","Computer Operator","Computer Graphics Specialist","Construction Engineer","Construction Manager","Consultant","Consumer Relations Manager","Contract Administrator","Copyright Attorney","Copywriter","Corporate Planner","Corrections Officer","Cosmetologist","Credit Analyst","Cruise Director","Chief Information Officer","Chief Technology Officer","Customer Service Manager","Cryptologist","Dancer","Data Security Manager","Database Manager","Day Care Instructor","Dentist","Designer","Design Engineer","Desktop Publisher","Developer","Development Officer","Diamond Merchant","Dietitian","Direct Marketer","Director","Distribution Manager","Diversity Manager","Economist","EEO Compliance Manager","Editor","Education Adminator","Electrical Engineer","Electro Optical Engineer","Electronics Engineer","Embassy Management","Employment Agent","Engineer Technician","Entrepreneur","Environmental Analyst","Environmental Attorney","Environmental Engineer","Environmental Specialist","Escrow Officer","Estimator","Executive Assistant","Executive Director","Executive Recruiter","Facilities Manager","Family Counselor","Fashion Events Manager","Fashion Merchandiser","Fast Food Manager","Film Producer","Film Production Assistant","Financial Analyst","Financial Planner","Financier","Fine Artist","Wildlife Specialist","Fitness Consultant","Flight Attendant","Flight Engineer","Floral Designer","Food & Beverage Director","Food Service Manager","Forestry Technician","Franchise Management","Franchise Sales","Fraud Investigator","Freelance Writer","Fund Raiser","General Manager","Geologist","General Counsel","Geriatric Specialist","Gerontologist","Glamour Photographer","Golf Club Manager","Gourmet Chef","Graphic Designer","Grounds Keeper","Hazardous Waste Manager","Health Care Manager","Health Therapist","Health Service Administrator","Hearing Officer","Home Economist","Horticulturist","Hospital Administrator","Hotel Manager","Human Resources Manager","Importer","Industrial Designer","Industrial Engineer","Information Director","Inside Sales","Insurance Adjuster","Interior Decorator","Internal Controls Director","International Acct.","International Courier","International Lawyer","Interpreter","Investigator","Investment Banker","Investment Manager","IT Architect","IT Project Manager","IT Systems Analyst","Jeweler","Joint Venture Manager","Journalist","Labor Negotiator","Labor Organizer","Labor Relations Manager","Lab Services Director","Lab Technician","Land Developer","Landscape Architect","Law Enforcement Officer","Lawyer","Lead Software Engineer","Lead Software Test Engineer","Leasing Manager","Legal Secretary","Library Manager","Litigation Attorney","Loan Officer","Lobbyist","Logistics Manager","Maintenance Manager","Management Consultant","Managed Care Director","Managing Partner","Manufacturing Director","Manpower Planner","Marine Biologist","Market Res. Analyst","Marketing Director","Materials Manager","Mathematician","Membership Chairman","Mechanic","Mechanical Engineer","Media Buyer","Medical Investor","Medical Secretary","Medical Technician","Mental Health Counselor","Merchandiser","Metallurgical Engineering","Meteorologist","Microbiologist","MIS Manager","Motion Picture Director","Multimedia Director","Musician","Network Administrator","Network Specialist","Network Operator","New Product Manager","Novelist","Nuclear Engineer","Nuclear Specialist","Nutritionist","Nursing Administrator","Occupational Therapist","Oceanographer","Office Manager","Operations Manager","Operations Research Director","Optical Technician","Optometrist","Organizational Development Manager","Outplacement Specialist","Paralegal","Park Ranger","Patent Attorney","Payroll Specialist","Personnel Specialist","Petroleum Engineer","Pharmacist","Photographer","Physical Therapist","Physician","Physician Assistant","Physicist","Planning Director","Podiatrist","Political Analyst","Political Scientist","Politician","Portfolio Manager","Preschool Management","Preschool Teacher","Principal","Private Banker","Private Investigator","Probation Officer","Process Engineer","Producer","Product Manager","Product Engineer","Production Engineer","Production Planner","Professional Athlete","Professional Coach","Professor","Project Engineer","Project Manager","Program Manager","Property Manager","Public Administrator","Public Safety Director","PR Specialist","Publisher","Purchasing Agent","Publishing Director","Quality Assurance Specialist","Quality Control Engineer","Quality Control Inspector","Radiology Manager","Railroad Engineer","Real Estate Broker","Recreational Director","Recruiter","Redevelopment Specialist","Regulatory Affairs Manager","Registered Nurse","Rehabilitation Counselor","Relocation Manager","Reporter","Research Specialist","Restaurant Manager","Retail Store Manager","Risk Analyst","Safety Engineer","Sales Engineer","Sales Trainer","Sales Promotion Manager","Sales Representative","Sales Manager","Service Manager","Sanitation Engineer","Scientific Programmer","Scientific Writer","Securities Analyst","Security Consultant","Security Director","Seminar Presenter","Ship's Officer","Singer","Social Director","Social Program Planner","Social Research","Social Scientist","Social Worker","Sociologist","Software Developer","Software Engineer","Software Test Engineer","Soil Scientist","Special Events Manager","Special Education Teacher","Special Projects Director","Speech Pathologist","Speech Writer","Sports Event Manager","Statistician","Store Manager","Strategic Alliance Director","Strategic Planning Director","Stress Reduction Specialist","Stockbroker","Surveyor","Structural Engineer","Superintendent","Supply Chain Director","System Engineer","Systems Analyst","Systems Programmer","System Administrator","Tax Specialist","Teacher","Technical Support Specialist","Technical Illustrator","Technical Writer","Technology Director","Telecom Analyst","Telemarketer","Theatrical Director","Title Examiner","Tour Escort","Tour Guide Director","Traffic Manager","Trainer Translator","Transportation Manager","Travel Agent","Treasurer","TV Programmer","Underwriter","Union Representative","University Administrator","University Dean","Urban Planner","Veterinarian","Vendor Relations Director","Viticulturist","Warehouse Manager"],animals:{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"],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"],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"],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"],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"],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"],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"]}},b=Object.prototype.hasOwnProperty,p=Object.keys||function(a){var e=[];for(var n in a)b.call(a,n)&&e.push(n);return e};a.prototype.get=function(a){return t(h[a])},a.prototype.mac_address=function(a){(a=e(a)).separator||(a.separator=a.networkVersion?".":":");return a.networkVersion?this.n(this.string,3,{pool:"ABCDEF1234567890",length:4}).join(a.separator):this.n(this.string,6,{pool:"ABCDEF1234567890",length:2}).join(a.separator)},a.prototype.normal=function(a){if(a=e(a,{mean:0,dev:1,pool:[]}),n(a.pool.constructor!==Array,"Chance: The pool option must be a valid array."),n("number"!=typeof a.mean,"Chance: Mean (mean) must be a number"),n("number"!=typeof a.dev,"Chance: Standard deviation (dev) must be a number"),a.pool.length>0)return this.normal_pool(a);var i,r,o,t,s=a.mean,l=a.dev;do{i=(r=2*this.random()-1)*r+(o=2*this.random()-1)*o}while(i>=1);return t=r*Math.sqrt(-2*Math.log(i)/i),l*t+s},a.prototype.normal_pool=function(a){var e=0;do{var n=Math.round(this.normal({mean:a.mean,dev:a.dev}));if(n<a.pool.length&&n>=0)return a.pool[n];e++}while(e<100);throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.")},a.prototype.radio=function(a){var n="";switch((a=e(a,{side:"?"})).side.toLowerCase()){case"east":case"e":n="W";break;case"west":case"w":n="K";break;default:n=this.character({pool:"KW"})}return n+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},a.prototype.set=function(a,e){"string"==typeof a?h[a]=e:h=t(a,h)},a.prototype.tv=function(a){return this.radio(a)},a.prototype.cnpj=function(){var a=this.n(this.natural,8,{max:9}),e=2+6*a[7]+7*a[6]+8*a[5]+9*a[4]+2*a[3]+3*a[2]+4*a[1]+5*a[0];(e=11-e%11)>=10&&(e=0);var n=2*e+3+7*a[7]+8*a[6]+9*a[5]+2*a[4]+3*a[3]+4*a[2]+5*a[1]+6*a[0];return(n=11-n%11)>=10&&(n=0),""+a[0]+a[1]+"."+a[2]+a[3]+a[4]+"."+a[5]+a[6]+a[7]+"/0001-"+e+n},a.prototype.mersenne_twister=function(a){return new C(a)},a.prototype.blueimp_md5=function(){return new g};var C=function(a){void 0===a&&(a=Math.floor(Math.random()*Math.pow(10,13))),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(a)};C.prototype.init_genrand=function(a){for(this.mt[0]=a>>>0,this.mti=1;this.mti<this.N;this.mti++)a=this.mt[this.mti-1]^this.mt[this.mti-1]>>>30,this.mt[this.mti]=(1812433253*((4294901760&a)>>>16)<<16)+1812433253*(65535&a)+this.mti,this.mt[this.mti]>>>=0},C.prototype.init_by_array=function(a,e){var n,i,r=1,o=0;for(this.init_genrand(19650218),n=this.N>e?this.N:e;n;n--)i=this.mt[r-1]^this.mt[r-1]>>>30,this.mt[r]=(this.mt[r]^(1664525*((4294901760&i)>>>16)<<16)+1664525*(65535&i))+a[o]+o,this.mt[r]>>>=0,o++,++r>=this.N&&(this.mt[0]=this.mt[this.N-1],r=1),o>=e&&(o=0);for(n=this.N-1;n;n--)i=this.mt[r-1]^this.mt[r-1]>>>30,this.mt[r]=(this.mt[r]^(1566083941*((4294901760&i)>>>16)<<16)+1566083941*(65535&i))-r,this.mt[r]>>>=0,++r>=this.N&&(this.mt[0]=this.mt[this.N-1],r=1);this.mt[0]=2147483648},C.prototype.genrand_int32=function(){var a,e=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var n;for(this.mti===this.N+1&&this.init_genrand(5489),n=0;n<this.N-this.M;n++)a=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+this.M]^a>>>1^e[1&a];for(;n<this.N-1;n++)a=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+(this.M-this.N)]^a>>>1^e[1&a];a=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^a>>>1^e[1&a],this.mti=0}return a=this.mt[this.mti++],a^=a>>>11,a^=a<<7&2636928640,a^=a<<15&4022730752,(a^=a>>>18)>>>0},C.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},C.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},C.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},C.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},C.prototype.genrand_res53=function(){return(67108864*(this.genrand_int32()>>>5)+(this.genrand_int32()>>>6))*(1/9007199254740992)};var g=function(){};g.prototype.VERSION="1.0.1",g.prototype.safe_add=function(a,e){var n=(65535&a)+(65535&e);return(a>>16)+(e>>16)+(n>>16)<<16|65535&n},g.prototype.bit_roll=function(a,e){return a<<e|a>>>32-e},g.prototype.md5_cmn=function(a,e,n,i,r,o){return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(e,a),this.safe_add(i,o)),r),n)},g.prototype.md5_ff=function(a,e,n,i,r,o,t){return this.md5_cmn(e&n|~e&i,a,e,r,o,t)},g.prototype.md5_gg=function(a,e,n,i,r,o,t){return this.md5_cmn(e&i|n&~i,a,e,r,o,t)},g.prototype.md5_hh=function(a,e,n,i,r,o,t){return this.md5_cmn(e^n^i,a,e,r,o,t)},g.prototype.md5_ii=function(a,e,n,i,r,o,t){return this.md5_cmn(n^(e|~i),a,e,r,o,t)},g.prototype.binl_md5=function(a,e){a[e>>5]|=128<<e%32,a[14+(e+64>>>9<<4)]=e;var n,i,r,o,t,s=1732584193,l=-271733879,c=-1732584194,m=271733878;for(n=0;n<a.length;n+=16)i=s,r=l,o=c,t=m,s=this.md5_ff(s,l,c,m,a[n],7,-680876936),m=this.md5_ff(m,s,l,c,a[n+1],12,-389564586),c=this.md5_ff(c,m,s,l,a[n+2],17,606105819),l=this.md5_ff(l,c,m,s,a[n+3],22,-1044525330),s=this.md5_ff(s,l,c,m,a[n+4],7,-176418897),m=this.md5_ff(m,s,l,c,a[n+5],12,1200080426),c=this.md5_ff(c,m,s,l,a[n+6],17,-1473231341),l=this.md5_ff(l,c,m,s,a[n+7],22,-45705983),s=this.md5_ff(s,l,c,m,a[n+8],7,1770035416),m=this.md5_ff(m,s,l,c,a[n+9],12,-1958414417),c=this.md5_ff(c,m,s,l,a[n+10],17,-42063),l=this.md5_ff(l,c,m,s,a[n+11],22,-1990404162),s=this.md5_ff(s,l,c,m,a[n+12],7,1804603682),m=this.md5_ff(m,s,l,c,a[n+13],12,-40341101),c=this.md5_ff(c,m,s,l,a[n+14],17,-1502002290),l=this.md5_ff(l,c,m,s,a[n+15],22,1236535329),s=this.md5_gg(s,l,c,m,a[n+1],5,-165796510),m=this.md5_gg(m,s,l,c,a[n+6],9,-1069501632),c=this.md5_gg(c,m,s,l,a[n+11],14,643717713),l=this.md5_gg(l,c,m,s,a[n],20,-373897302),s=this.md5_gg(s,l,c,m,a[n+5],5,-701558691),m=this.md5_gg(m,s,l,c,a[n+10],9,38016083),c=this.md5_gg(c,m,s,l,a[n+15],14,-660478335),l=this.md5_gg(l,c,m,s,a[n+4],20,-405537848),s=this.md5_gg(s,l,c,m,a[n+9],5,568446438),m=this.md5_gg(m,s,l,c,a[n+14],9,-1019803690),c=this.md5_gg(c,m,s,l,a[n+3],14,-187363961),l=this.md5_gg(l,c,m,s,a[n+8],20,1163531501),s=this.md5_gg(s,l,c,m,a[n+13],5,-1444681467),m=this.md5_gg(m,s,l,c,a[n+2],9,-51403784),c=this.md5_gg(c,m,s,l,a[n+7],14,1735328473),l=this.md5_gg(l,c,m,s,a[n+12],20,-1926607734),s=this.md5_hh(s,l,c,m,a[n+5],4,-378558),m=this.md5_hh(m,s,l,c,a[n+8],11,-2022574463),c=this.md5_hh(c,m,s,l,a[n+11],16,1839030562),l=this.md5_hh(l,c,m,s,a[n+14],23,-35309556),s=this.md5_hh(s,l,c,m,a[n+1],4,-1530992060),m=this.md5_hh(m,s,l,c,a[n+4],11,1272893353),c=this.md5_hh(c,m,s,l,a[n+7],16,-155497632),l=this.md5_hh(l,c,m,s,a[n+10],23,-1094730640),s=this.md5_hh(s,l,c,m,a[n+13],4,681279174),m=this.md5_hh(m,s,l,c,a[n],11,-358537222),c=this.md5_hh(c,m,s,l,a[n+3],16,-722521979),l=this.md5_hh(l,c,m,s,a[n+6],23,76029189),s=this.md5_hh(s,l,c,m,a[n+9],4,-640364487),m=this.md5_hh(m,s,l,c,a[n+12],11,-421815835),c=this.md5_hh(c,m,s,l,a[n+15],16,530742520),l=this.md5_hh(l,c,m,s,a[n+2],23,-995338651),s=this.md5_ii(s,l,c,m,a[n],6,-198630844),m=this.md5_ii(m,s,l,c,a[n+7],10,1126891415),c=this.md5_ii(c,m,s,l,a[n+14],15,-1416354905),l=this.md5_ii(l,c,m,s,a[n+5],21,-57434055),s=this.md5_ii(s,l,c,m,a[n+12],6,1700485571),m=this.md5_ii(m,s,l,c,a[n+3],10,-1894986606),c=this.md5_ii(c,m,s,l,a[n+10],15,-1051523),l=this.md5_ii(l,c,m,s,a[n+1],21,-2054922799),s=this.md5_ii(s,l,c,m,a[n+8],6,1873313359),m=this.md5_ii(m,s,l,c,a[n+15],10,-30611744),c=this.md5_ii(c,m,s,l,a[n+6],15,-1560198380),l=this.md5_ii(l,c,m,s,a[n+13],21,1309151649),s=this.md5_ii(s,l,c,m,a[n+4],6,-145523070),m=this.md5_ii(m,s,l,c,a[n+11],10,-1120210379),c=this.md5_ii(c,m,s,l,a[n+2],15,718787259),l=this.md5_ii(l,c,m,s,a[n+9],21,-343485551),s=this.safe_add(s,i),l=this.safe_add(l,r),c=this.safe_add(c,o),m=this.safe_add(m,t);return[s,l,c,m]},g.prototype.binl2rstr=function(a){var e,n="";for(e=0;e<32*a.length;e+=8)n+=String.fromCharCode(a[e>>5]>>>e%32&255);return n},g.prototype.rstr2binl=function(a){var e,n=[];for(n[(a.length>>2)-1]=void 0,e=0;e<n.length;e+=1)n[e]=0;for(e=0;e<8*a.length;e+=8)n[e>>5]|=(255&a.charCodeAt(e/8))<<e%32;return n},g.prototype.rstr_md5=function(a){return this.binl2rstr(this.binl_md5(this.rstr2binl(a),8*a.length))},g.prototype.rstr_hmac_md5=function(a,e){var n,i,r=this.rstr2binl(a),o=[],t=[];for(o[15]=t[15]=void 0,r.length>16&&(r=this.binl_md5(r,8*a.length)),n=0;n<16;n+=1)o[n]=909522486^r[n],t[n]=1549556828^r[n];return i=this.binl_md5(o.concat(this.rstr2binl(e)),512+8*e.length),this.binl2rstr(this.binl_md5(t.concat(i),640))},g.prototype.rstr2hex=function(a){var e,n,i="";for(n=0;n<a.length;n+=1)e=a.charCodeAt(n),i+="0123456789abcdef".charAt(e>>>4&15)+"0123456789abcdef".charAt(15&e);return i},g.prototype.str2rstr_utf8=function(a){return unescape(encodeURIComponent(a))},g.prototype.raw_md5=function(a){return this.rstr_md5(this.str2rstr_utf8(a))},g.prototype.hex_md5=function(a){return this.rstr2hex(this.raw_md5(a))},g.prototype.raw_hmac_md5=function(a,e){return this.rstr_hmac_md5(this.str2rstr_utf8(a),this.str2rstr_utf8(e))},g.prototype.hex_hmac_md5=function(a,e){return this.rstr2hex(this.raw_hmac_md5(a,e))},g.prototype.md5=function(a,e,n){return e?n?this.raw_hmac_md5(e,a):this.hex_hmac_md5(e,a):n?this.raw_md5(a):this.hex_md5(a)},"undefined"!=typeof exports&&("undefined"!=typeof module&&module.exports&&(exports=module.exports=a),exports.Chance=a),"function"==typeof define&&define.amd&&define([],function(){return a}),"undefined"!=typeof importScripts&&(chance=new a,self.Chance=a),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=a,window.chance=new a)}();
+//# sourceMappingURL=chance.min.js.map
diff --git a/src/node_modules/chance/dist/chance.min.js.map b/src/node_modules/chance/dist/chance.min.js.map
new file mode 100644
index 0000000..bf3af5d
--- /dev/null
+++ b/src/node_modules/chance/dist/chance.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["chance.min.js"],"names":["Chance","seed","this","random","arguments","length","i","seedling","Object","prototype","toString","call","j","hash","k","charCodeAt","mt","mersenne_twister","bimd5","blueimp_md5","initOptions","options","defaults","testRange","test","errorMessage","RangeError","diceFn","range","natural","_copyObject","source","target","key","keys","o_keys","l","_copyArray","copyObject","_target","isArray","Array","MAX_INT","CHARS_LOWER","CHARS_UPPER","toUpperCase","HEX_POOL","NUMBERS","slice","VERSION","base64","Error","btoa","Buffer","input","bool","likelihood","animal","type","get","toLowerCase","pick","animalTypeArray","character","alpha","symbols","letters","pool","casing","charAt","max","floating","fixed","precision","num","Math","pow","min","num_fixed","integer","toFixed","parseFloat","floor","numerals","hex","letter","string","n","join","capitalize","word","substr","mixin","obj","func_name","unique","fn","comparator","arr","val","indexOf","result","count","MAX_DUPLICATES","params","clonedParams","JSON","parse","stringify","apply","push","pad","number","width","shuffle","pickone","pickset","old_array","new_array","Number","splice","weighted","weights","trim","sum","weightIndex","isNaN","chosenIdx","selected","total","lastGoodIdx","chosen","paragraph","sentences","sentence","text","words","punctuation","syllable","chr","consonants","syllables","substring","age","ageRange","birthday","currentYear","Date","getFullYear","setFullYear","year","date","cpf","formatted","d1","d2","replace","cnpj","first","gender","nationality","profession","rank","company","extraGenders","concat","last","israelId","x","y","thisDigit","parseInt","mrz","checkDigit","split","multipliers","runningTotal","forEach","idx","pos","that","passportNumber","dob","getMonth","getDate","expiry","issuer","opts","generate","name","middle","middle_initial","prefix","suffix","name_prefixes","prefixes","abbreviation","name_prefix","full","HIDN","idn","ssn","dash","ssnFour","dashes","name_suffixes","name_suffix","nationalities","android_id","apple_token","wp8_anid2","wp7_anid","guid","bb_pin","avatar","protocol","email","fileExtension","size","fallback","rating","constructor","http","https","g","pg","r","404","mm","identicon","monsterid","wavatar","retro","blank","bmp","gif","jpg","png","md5","color","gray","value","delimiter","rgb","hasAlpha","rgbValue","alphaChannel","min_alpha","max_alpha","min_rgb","max_rgb","min_green","max_green","min_blue","max_blue","start","end","withHash","symbol","hexstring","isGrayscale","format","min_red","max_red","undefined","grayscale","colorValue","domain","tld","fbid","google_analytics","hashtag","ip","ipv6","klout","semver","include_prerelease","prerelease","rpg","tlds","twitter","url","extension","domain_prefix","path","extensions","port","locale","region","locales","address","street","altitude","areacode","parens","city","coordinates","latitude","longitude","countries","country","depth","geohash","geojson","phone","numPick","self","ukNum","parts","section","sections","area","mobile","match","exchange","subscriber","postal","counties","county","provinces","province","state","states","us_states_and_dc","territories","armed_forces","short_suffix","street_suffix","street_suffixes","zip","plusfour","ampm","date_string","american","getTime","m","month","raw","daysInMonth","days","numeric","day","hour","twentyfour","minute","second","millisecond","hammertime","months","timestamp","weekday","weekdays","weekday_only","cc","to_generate","cc_type","luhn_calculate","cc_types","types","short_name","currency_types","currency","timezones","timezone","currency_pair","returnAsString","currencies","reduce","acc","item","code","dollar","cents","euro","toLocaleString","exp","exp_year","exp_month","future","month_int","curMonth","curYear","vat","it_vat","iban","cf","name_generator","isLast","temp","return_value","map","c","date_generator","range1","range2","evens","digit","checkdigit_generator","pl_pesel","controlNumber","pl_nip","pl_regon","note","notes","scales","naturals","flats","sharps","all","flatKey","sharpKey","midi_note","chord_quality","chord_qualities","jazz","chord","tempo","coin","d4","d6","d8","d10","d12","d20","d30","d100","thrown","bits","rolls","p","version","guid_pool","luhn_check","str","digits","reverse","file","fileName","fileOptions","typeRange","extensionObjectCollection","fileType","data","firstNames","male","en","it","nl","female","lastNames","uk","ca","locale_languages","locale_regions","country_regions","us","colorNames","raster","vector","3d","document","abbr","offset","isdst","utc","animals","ocean","desert","grassland","forest","farm","pet","zoo","o_hasOwnProperty","hasOwnProperty","mac_address","separator","networkVersion","normal","mean","dev","normal_pool","s","u","v","norm","sqrt","log","performanceCounter","round","radio","fl","side","set","values","tv","MersenneTwister","BlueImpMD5","N","M","MATRIX_A","UPPER_MASK","LOWER_MASK","mti","init_genrand","init_by_array","init_key","key_length","genrand_int32","mag01","kk","genrand_int31","genrand_real1","genrand_real3","genrand_res53","safe_add","lsw","bit_roll","cnt","md5_cmn","q","a","b","t","md5_ff","d","md5_gg","md5_hh","md5_ii","binl_md5","len","olda","oldb","oldc","oldd","binl2rstr","output","String","fromCharCode","rstr2binl","rstr_md5","rstr_hmac_md5","bkey","ipad","opad","rstr2hex","str2rstr_utf8","unescape","encodeURIComponent","raw_md5","hex_md5","raw_hmac_md5","hex_hmac_md5","exports","module","define","amd","importScripts","chance","window"],"mappings":"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,IAAO,QAAS,UAAW,WAAY,QAAS,QAAS,QAAS,SAAU,SAAU,QAAS,SAAU,WAAY,SAAU,UAAW,QAAS,SAAU,SAAU,WAAY,SAAU,WAAY,WAAY,QAAS,YAAa,QAAS,MAAO,SAAU,OAAQ,QAAS,QAAS,YAAa,OAAQ,SAAU,QAAS,OAAQ,QAAS,QAAS,QAAS,QAAS,WAAY,SAAU,SAAU,WAAY,QAAS,UAAW,SAAU,WAAY,WAAY,SAAU,QAAS,UAAW,UAAW,UAAW,UAAW,SAAU,SAAU,OAAQ,OAAQ,SAAU,OAAQ,SAAU,SAAU,SAAU,SAAU,aAAc,MAAO,SAAU,OAAQ,SAAU,WAAY,OAAQ,UAAW,QAAS,SAAU,SAAU,QAAS,UAAW,QAAS,UAAW,OAAQ,SAAU,OAAQ,YAAa,UAAW,UAAW,QAAS,SAAU,OAAQ,YAAa,SAAU,SAAU,aAAc,SAAU,UAAW,SAAU,WAAY,SAAU,YAAa,UAAW,UAAW,OAAQ,QAAS,QAAS,OAAQ,WAAY,SAAU,WAAY,UAAW,QAAS,OAAQ,OAAQ,SAAU,QAAS,WAAY,SAAU,QAAS,WAAY,SAAU,WAAY,OAAQ,WAAY,QAAS,QAAS,SAAU,UAAW,QAAS,OAAQ,UAAW,UAAW,SAAU,SAAU,SAAU,QAAS,WAAY,QAAS,OAAQ,QAAS,UAAW,UAAW,SAAU,QAAS,QAAS,QAAS,QAAS,SAAU,OAAQ,SAAU,OAAQ,YAAa,OAAQ,QAAS,UAAW,SAAU,QAAS,UAAW,QAAS,SAAU,WAAY,OAAQ,QAAS,UAAW,OAAQ,UAAW,SAAU,UAAW,UAAW,WAAY,QAAS,SAAU,QAAS,WAAY,SAAU,SAAU,SAAU,MAAO,UAAW,QAAS,UAAW,SAAU,SAAU,OAAQ,aAAc,UAAW,OAAQ,UAAW,OAAQ,SAAU,MAAO,QAAS,YAAa,YAAa,SAAU,SAAU,WAAY,UAAW,SAAU,OAAQ,SAAU,SAAU,SAAU,WAAY,SAAU,SAAU,YAAa,OAAQ,UAAW,OAAQ,UAAW,WAAY,UAAW,UAAW,SAAU,aAAc,WAAY,aAAc,WAAY,QAAS,QAAS,SAAU,QAAS,SAAU,UAAW,WAAY,SAAU,YAAa,QAAS,SAAU,SAAU,SAAU,UAAW,SAAU,SAAU,SAAU,OAAQ,MAAO,SAAU,QAAS,OAAQ,UAAW,UAAW,SAAU,QAAS,SAAU,UAAW,QAAS,SAAU,MAAO,UAAW,SAAU,SAAU,SAAU,SAAU,SAAU,UAAW,UAAW,QAAS,UAAW,UAAW,UAAW,UAAW,SAAU,SAAU,OAAQ,WAAY,UAAW,MAAO,QAAS,UAAW,OAAQ,OAAQ,UAAW,SAAU,OAAQ,WAAY,OAAQ,WAAY,UAAW,SAAU,UAAW,SAAU,UAAW,UAAW,SAAU,SAAU,SAAU,UAAW,WAAY,QAAS,QAAS,QAAS,YAAa,WAAY,OAAQ,UAAW,WAAY,QAAS,QAAS,OAAQ,SAAU,OAAQ,OAAQ,SAAU,SAAU,WAAY,SAAU,OAAQ,SAAU,QAAS,SAAU,WAAY,SAAU,QAAS,OAAQ,SAAU,QAAS,SAAU,UAAW,SAAU,SAAU,OAAQ,QAAS,OAAQ,SAAU,WAAY,QAAS,UAAW,QAAS,QAAS,SAAU,QAAS,YAAa,UAAW,SAAU,QAAS,QAAS,SAAU,SAAU,WAAY,QAAS,UAAW,WAAY,SAAU,UAAW,UAAW,SAAU,SAAU,YAAa,UAAW,SAAU,OAAQ,QAAS,SAAU,OAAQ,OAAQ,OAAQ,WAAY,SAAU,QAAS,SAAU,UAAW,UAAW,OAAQ,SAAU,UAAW,QAAS,SAAU,UAAW,UAAW,SAAU,OAAQ,QAAS,UAAW,SAAU,QAAS,SAAU,aAAc,WAAY,SAAU,UAAW,SAAU,OAAQ,UAAW,SAAU,SAAU,UAAW,SAAU,UAAW,UAAW,YAAa,QAAS,SAAU,WAAY,SAAU,OAAQ,SAAU,SAAU,UAAW,SAAU,SAAU,UAAW,UAAW,OAAQ,QAAS,QAAS,QAAS,UAAW,OAAQ,QAAS,UAAW,OAAQ,WAAY,WAAY,UAAW,UAAW,WAAY,QAAS,QAAS,QAAS,aAAc,SAAU,QAAS,UAAW,WAAY,OAAQ,QAAS,OAAQ,WAAY,QAAS,UAAW,QAAS,SAAU,QAAS,UAAW,WAAY,UAAW,UAAW,cAAe,QAAS,QAAS,SAAU,UAAW,aAAc,YAAa,SAAU,WAAY,QAAS,WAAY,MAAO,UAAW,QAAS,YAAa,WAAY,QAAS,QAAS,QAAS,QAAS,OAAQ,OAAQ,QAAS,QAAS,OAAQ,YAAa,OAAQ,SAAU,SAAU,SAAU,UAAW,SAAU,OAAQ,UAAW,SAAU,QAAS,WAAY,SAAU,SAAU,WAAY,SAAU,OAAQ,OAAQ,aAAc,QAAS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Y,UAAW,QAAS,OAAQ,SAAU,QAAS,WAAY,OAAQ,UAAW,YAAa,UAAW,SAAU,WAAY,YAAa,WAAY,OAAQ,OAAQ,SAAU,SAAU,SAAU,WAAY,UAAW,QAAS,UAAW,WAAY,SAAU,YAAa,UAAW,WAAY,UAAW,YAAa,UAAW,WAAY,aAAc,UAAW,UAAW,WAAY,QAAS,UAAW,OAAQ,SAAU,UAAW,UAAW,SAAU,SAAU,QAAS,UAAW,WAAY,UAAW,YAAa,WAAY,aAAc,OAAQ,SAAU,UAAW,UAAW,QAAS,WAAY,QAAS,UAAW,WAAY,UAAW,UAAW,YAAa,QAAS,SAAU,WAAY,WAAY,WAAY,SAAU,UAAW,WAAY,aAAc,cAAe,WAAY,aAAc,QAAS,UAAW,UAAW,WAAY,OAAQ,QAAS,QAAS,UAAW,WAAY,QAAS,SAAU,YAAa,UAAW,QAAS,WAAY,aAAc,OAAQ,YAAa,WAAY,QAAS,aAAc,UAAW,WAAY,UAAW,QAAS,UAAW,WAAY,OAAQ,WAAY,SAAU,SAAU,YAAa,QAAS,OAAQ,YAAa,YAAa,WAAY,UAAW,YAAa,SAAU,UAAW,QAAS,QAAS,UAAW,QAAS,YAAa,OAAQ,UAAW,UAAW,QAAS,UAAW,UAAW,WAAY,UAAW,QAAS,SAAU,WAAY,QAAS,YAAa,YAAa,SAAU,SAAU,QAAS,QAAS,SAAU,SAAU,WAAY,UAAW,SAAU,UAAW,OAAQ,WAAY,QAAS,UAAW,QAAS,UAAW,WAAY,QAAS,WAAY,WAAY,YAAa,SAAU,QAAS,UAAW,YAAa,UAAW,YAAa,cAAe,QAAS,UAAW,SAAU,OAAQ,QAAS,QAAS,UAAW,UAAW,UAAW,WAAY,QAAS,QAAS,QAAS,QAAS,SAAU,QAAS,YAAa,YAAa,YAAa,QAAS,QAAS,WAAY,SAAU,WAAY,SAAU,QAAS,UAAW,UAAW,QAAS,YAAa,YAAa,YAAa,YAAa,SAAU,QAAS,OAAQ,QAAS,UAAW,QAAS,UAAW,aAAc,UAAW,QAAS,WAAY,YAAa,YAAa,aAAc,UAAW,YAAa,SAAU,SAAU,SAAU,UAAW,SAAU,cAAe,YAAa,aAAc,OAAQ,SAAU,YAAa,SAAU,YAAa,WAAY,QAAS,UAAW,WAAY,UAAW,OAAQ,QAAS,QAAS,QAAS,QAAS,aAAc,aAAc,WAAY,SAAU,aAA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CNA,KAAM,YACNA,KAAM,aACNA,KAAM,kBACNA,KAAM,eACNA,KAAM,aACNA,KAAM,aACNA,KAAM,iBACNA,KAAM,mBACNA,KAAM,cACNA,KAAM,UACNA,KAAM,cACNA,KAAM,YACNA,KAAM,eACNA,KAAM,sBACNA,KAAM,eACNA,KAAM,aACNA,KAAM,WACNA,KAAM,eACNA,KAAM,WACNA,KAAM,WACNA,KAAM,YACNA,KAAM,YACNA,KAAM,iBACNA,KAAM,eACNA,KAAM,WACNA,KAAM,iBACNA,KAAM,eACNA,KAAM,UACNA,KAAM,aACNA,KAAM,eACNA,KAAM,YACNA,KAAM,gBACNA,KAAM,mBACNA,KAAM,gBACNA,KAAM,cACNA,KAAM,cACNA,KAAM,qBACNA,KAAM,WACNA,KAAM,kBACNA,KAAM,iBACNA,KAAM,YACNA,KAAM,eACNA,KAAM,aACNA,KAAM,cACNA,KAAM,UACNA,KAAM,YACNA,KAAM,UACNA,KAAM,WACNA,KAAM,cACNA,KAAM,UACNA,KAAM,cACNA,KAAM,SACNA,KAAM,aACNA,KAAM,WACNA,KAAM,8BACNA,KAAM,aACNA,KAAM,YACNA,KAAM,aACNA,KAAM,YACNA,KAAM,cACNA,KAAM,aACNA,KAAM,gBACNA,KAAM,cACNA,KAAM,eACNA,KAAM,SACNA,KAAM,YACNA,KAAM,WACNA,KAAM,aAGVuQ,kBACE,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAIFC,gBACE,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WACA,cACA,WACA,cACA,SACA,SACA,SACA,SACA,WACA,cACA,WACA,cACA,WACA,cACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,UACA,aACA,QACA,QACA,UACA,aACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,UACA,aACA,QACA,QACA,iBACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,cACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,aACA,aACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,QACA,UACA,aACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,QACA,UACA,aACA,aACA,aACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,UACA,aACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,aACA,aACA,aACA,UACA,aACA,aACA,aACA,aACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,aACA,QACA,QACA,QACA,UACA,aACA,UACA,aACA,UACA,aACA,QACA,SACA,QACA,QACA,UACA,aACA,aACA,aACA,aACA,UACA,aACA,aACA,aACA,SAGFlI,mBACKtI,KAAM,UAAWO,aAAc,OAC/BP,KAAM,SAAUO,aAAc,OAC9BP,KAAM,UAAWO,aAAc,OAC/BP,KAAM,WAAYO,aAAc,OAChCP,KAAM,aAAcO,aAAc,OAClCP,KAAM,WAAYO,aAAc,OAChCP,KAAM,cAAeO,aAAc,OACnCP,KAAM,WAAYO,aAAc,OAChCP,KAAM,uBAAwBO,aAAc,OAC5CP,KAAM,UAAWO,aAAc,OAC/BP,KAAM,UAAWO,aAAc,OAC/BP,KAAM,SAAUO,aAAc,OAC9BP,KAAM,QAASO,aAAc,OAC7BP,KAAM,WAAYO,aAAc,OAChCP,KAAM,UAAWO,aAAc,OAC/BP,KAAM,OAAQO,aAAc,OAC5BP,KAAM,SAAUO,aAAc,OAC9BP,KAAM,WAAYO,aAAc,OAChCP,KAAM,YAAaO,aAAc,OACjCP,KAAM,QAASO,aAAc,OAC7BP,KAAM,WAAYO,aAAc,OAChCP,KAAM,gBAAiBO,aAAc,OACrCP,KAAM,WAAYO,aAAc,OAChCP,KAAM,YAAaO,aAAc,OACjCP,KAAM,cAAeO,aAAc,OACnCP,KAAM,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CA,8CACA,mCACA,iBACA,eACA,+BACA,yBACA,yBACA,oBACA,aACA,wBACA,yBACA,sCACA,iBACA,eACA,6BACA,gCACA,kCACA,2BACA,qBACA,yBACA,mBACA,yBACA,wCACA,2BACA,SACA,qBACA,oCACA,+CACA,kCACA,wCACA,2BACA,iCACA,iCACA,qCACA,mCACA,qCACA,gCACA,+BACA,aACA,yBACA,kBACA,mBACA,eACA,iCACA,uBACA,iCACA,6BACA,iBACA,eACA,uBACA,kBACA,qBACA,uBACA,sBACA,wCACA,0BACA,eACA,sBACA,kBACA,iCACA,4BACA,2BACA,0BACA,qBACA,eACA,gCACA,aACA,oBACA,2BACA,uBACA,gBACA,kCACA,mBACA,iBACA,aACA,6BACA,qBACA,cACA,sBACA,4BACA,mBACA,8BACA,qCACA,uBACA,wBACA,oBACA,uBACA,6BACA,4BACA,mBACA,kCACA,yBACA,wBACA,gCACA,yBACA,aACA,0BACA,wBACA,aACA,sBACA,8BACA,0BACA,qBACA,8BACA,4BACA,iBACA,sBACA,4BACA,iCACA,0BACA,qBACA,qBACA,4BACA,sBACA,kBACA,gCACA,uBACA,gCACA,oBACA,8BACA,+BACA,kBACA,2BACA,2BACA,wBACA,qBACA,gDACA,8BACA,2CACA,4BACA,gCACA,2BACA,aACA,+BACA,gBACA,oBACA,8BACA,uBACA,mBACA,qBACA,6BACA,8BACA,mBACA,kBACA,YACA,4BACA,iBACA,eACA,oCACA,eACA,kBACA,iBACA,sBACA,4BACA,uBACA,wBACA,8BACA,6BACA,sBACA,qCACA,aACA,cACA,aACA,6BACA,gBACA,eACA,2BACA,qBACA,iBACA,8BACA,uBACA,oCACA,iBACA,YACA,mBACA,WACA,gBACA,6BACA,wBACA,yBACA,gBACA,gBACA,gBACA,2BACA,wBACA,gCACA,yBACA,yCACA,0BACA,kBACA,2BACA,qBACA,mBACA,gBACA,aACA,eACA,iCACA,2BACA,4BACA,kCACA,4BACA,kBACA,uBACA,yBACA,2BACA,mCACA,eACA,yBACA,qCACA,4BACA,0BACA,YACA,iBACA,6BACA,iBACA,YACA,eACA,YACA,wBACA,iCACA,mBACA,mBACA,sBACA,0BACA,cACA,qBACA,kBACA,qBACA,4BACA,eACA,uBACA,qBACA,2BACA,yBACA,mBACA,uBACA,iBACA,qBACA,0BACA,6BACA,2BACA,2BACA,qBACA,0BACA,uBACA,4BACA,WACA,WACA,iCACA,oBACA,iBACA,sCACA,mBACA,wBACA,+BACA,UACA,cACA,sBACA,uBACA,kBACA,2BACA,wBACA,oBACA,sCACA,cACA,uBACA,WACA,sBACA,uBACA,gCACA,wBACA,kBACA,mBACA,uBACA,iCACA,0BACA,0BACA,wBACA,cACA,sBACA,oCACA,sBACA,eACA,2BACA,iCACA,sCACA,8BACA,qBACA,qBACA,8CACA,uBACA,yBACA,6CACA,4BACA,2BACA,sBACA,mCACA,wBACA,4BACA,cACA,mCACA,sBACA,iCACA,mBACA,kCACA,iCACA,oBACA,cACA,uCACA,4BACA,6BACA,yBACA,qBACA,gBACA,aACA,WACA,2BACA,kBACA,gBACA,gBACA,2BACA,sBACA,sBACA,iBACA,0BACA,sCACA,oBACA,sCACA,oBACA,WACA,eACA,mBACA,sCACA,eACA,4BACA,+BACA,2BACA,oBACA,6BACA,+BACA,cACA,+BACA,wBACA,eACA,sBACA,2BACA,8BACA,mBACA,iBACA,4BACA,oCACA,2BACA,uBACA,qCACA,oCACA,gCACA,mCACA,2BACA,6BACA,0BACA,yBACA,0BACA,sBACA,iBACA,sBACA,qBACA,kBACA,uBACA,uCACA,8BACA,eACA,eACA,yCACA,cACA,oCACA,WACA,oCACA,kBACA,mBACA,oBACA,gBACA,qBACA,sBACA,0BACA,iBACA,8BACA,sBACA,gCACA,kBACA,sBACA,+BACA,qBACA,sBACA,gCACA,6BACA,iBACA,eACA,qBACA,cACA,6BACA,eACA,kBACA,6BACA,2BACA,kBACA,yBACA,kBACA,oBACA,oBACA,2BACA,sCACA,oBACA,0BACA,sCACA,kCACA,wCACA,0CACA,uCACA,cACA,gBACA,sBACA,aACA,oCACA,iBACA,0BACA,qBACA,uBACA,gCACA,qBACA,sBACA,uCACA,oBACA,wBACA,2BACA,UACA,kBACA,mBACA,sBACA,cACA,kBACA,yBACA,UACA,gBACA,6BACA,6BACA,0BACA,yBACA,eACA,qBACA,eACA,uBACA,aACA,mCACA,6CACA,2BACA,mCACA,kBACA,uBACA,gBACA,mBACA,kBACA,uBACA,gCACA,qBACA,4BACA,8BACA,qBACA,6BACA,eACA,+BACA,wBACA,qBACA,qBACA,8BACA,oBACA,gCACA,gCACA,wBACA,wBACA,sBACA,2BACA,2BACA,4BACA,yBACA,gCACA,iBACA,wBACA,kBACA,gBACA,2BACA,2BACA,qBACA,8BACA,kCACA,0BACA,gCACA,iCACA,oBACA,wBACA,cACA,cACA,iCACA,qBACA,cACA,oCACA,qBACA,mBACA,mCACA,yBACA,iCACA,uBACA,yBACA,uBACA,2BACA,2BACA,iBACA,+BACA,2BACA,oBACA,8BACA,2BACA,wBACA,kBACA,eACA,uBACA,8BACA,aACA,uBACA,yBACA,wBACA,gBACA,4BACA,qBACA,yBACA,qBACA,sBACA,mCACA,gBACA,iBACA,yBACA,wBACA,uBACA,qBACA,sBACA,0CACA,4BACA,uBACA,2DACA,qCACA,kCACA,qCACA,kBACA,+BACA,mCACA,yBACA,wBACA,6BACA,4BACA,YACA,WACA,eACA,mBACA,gBACA,+BACA,aACA,gCACA,6BACA,6BACA,+BACA,2BACA,uBACA,QACA,mBACA,aACA,cACA,UACA,0BACA,4BACA,mBACA,oBACA,gBACA,kBACA,yBACA,sBACA,mCACA,aACA,eACA,eACA,gBACA,wBACA,YACA,cACA,qBACA,0BACA,qBACA,gBACA,qBACA,0BACA,aACA,gCACA,6BACA,cACA,YACA,aACA,gCACA,wBACA,uBACA,cACA,yBACA,mBACA,gCACA,cACA,uBACA,iBACA,6BACA,6BACA,4BACA,qBACA,eACA,6BACA,cACA,kBACA,qBACA,6BACA,2BACA,eACA,aACA,+BACA,iBACA,gBACA,qBACA,+BACA,wBACA,4BACA,wBACA,sBACA,8BACA,6BACA,oCACA,oBACA,wBACA,kCACA,oCACA,oBACA,0BACA,yBACA,eACA,cACA,gBACA,qBACA,WACA,cACA,2BACA,eACA,0BACA,eACA,iCACA,uBACA,2BACA,sBACA,0BACA,uBACA,4BACA,4BACA,4BACA,wBACA,uCACA,4BACA,oBACA,kBACA,eACA,uBACA,eACA,yBACA,eACA,0BACA,gCACA,gCACA,gCACA,0BACA,+BACA,mBACA,mCACA,4BACA,0BACA,oBACA,gCACA,sBACA,oBACA,wBACA,aACA,uBACA,gBACA,yBACA,cACA,iCACA,eACA,0BACA,uBACA,kBACA,kBACA,WACA,eACA,mBACA,mBACA,oBACA,sBACA,cACA,6BACA,cACA,WACA,kBACA,gBACA,yBACA,cACA,uBACA,kBACA,mBACA,kCACA,yBACA,iBACA,gBACA,kBACA,qBACA,gBACA,aACA,8BACA,mBACA,iBACA,2BACA,oBACA,qBACA,6BACA,2BACA,uBACA,uBACA,2BACA,kBACA,0BACA,uBACA,+BACA,cACA,iBACA,cACA,wBACA,sBACA,mBACA,yBACA,mBACA,wBACA,qBACA,yBACA,qBACA,gBACA,uBACA,eACA,WACA,uBACA,gBACA,qBACA,+BACA,yBACA,gBACA,cACA,iBACA,0CACA,qBACA,6BACA,gBACA,iBACA,mCACA,oCACA,yBACA,iCACA,eACA,4BACA,wBACA,4BACA,cACA,qBACA,gBACA,iCACA,0BACA,0BACA,aACA,gBACA,eACA,wBACA,kBACA,4BACA,gBACA,wBACA,+BACA,eACA,oBACA,+BACA,0BACA,eACA,aACA,yBACA,wBACA,iCACA,cACA,8BACA,6BACA,eACA,iBACA,oBACA,oBACA,oBACA,wBACA,eACA,wBACA,kBACA,kCACA,qBACA,iBACA,gCACA,sBACA,kBACA,yBACA,yBACA,qCACA,sBACA,UACA,WACA,kBACA,eACA,uBACA,kBACA,kBACA,8BACA,4BACA,sBACA,wBACA,qBACA,wBACA,iCACA,4BACA,qBACA,wBACA,kCACA,kCACA,cACA,wBACA,gCACA,gCACA,qBACA,YACA,4BACA,kBACA,uBACA,kBACA,kBACA,2BACA,kBACA,UACA,4BACA,sBACA,mCACA,0BACA,sBACA,+BACA,6BACA,iBACA,aACA,YACA,uBACA,6BACA,sBACA,gCACA,2BACA,2BACA,kBACA,oBACA,uBACA,uBACA,cACA,gCACA,sBACA,iBACA,wBACA,wBACA,sBACA,uBACA,aACA,gCACA,oBACA,gCACA,wBACA,4BACA,yBACA,0BACA,sBACA,4BACA,wBACA,sBACA,mBACA,wBACA,yBACA,6BACA,yBACA,sBACA,wBACA,+BACA,wBACA,kCACA,eACA,6BACA,4BACA,QACA,4BACA,kBACA,aACA,aACA,wBACA,qBACA,0BACA,kBACA,mBACA,wBAGAsD,eACIgP,QAAe,MAAO,MAAO,MAAO,MAAO,OAAQ,MAAO,MAAO,MAAO,MAAO,QAC/EC,QAAe,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,OAC/GC,MAAe,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,QAAS,QAAS,MAAO,MAAO,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,IAAK,OACxIC,UAAe,MAAO,OAAQ,MAAO,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAAS,QAI3GlG,YAEY7K,KAAQ,yBACRgR,KAAQ,MACRC,QAAW,GACXC,OAAS,EACTxU,KAAQ,2CACRyU,KACE,gBAIFnR,KAAQ,SACRgR,KAAQ,IACRC,QAAW,GACXC,OAAS,EACTxU,KAAQ,4CACRyU,KACE,aACA,iBACA,eACA,uBAIFnR,KAAQ,yBACRgR,KAAQ,MACRC,QAAW,GACXC,OAAS,EACTxU,KAAQ,qBACRyU,KACE,aACA,mBACA,mBACA,oBACA,oBAIFnR,KAAQ,wBACRgR,KAAQ,OACRC,QAAW,EA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TxU,KAAQ,0BACRyU,KACE,gBACA,gBACA,sBAIFnR,KAAQ,4BACRgR,KAAQ,OACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,mCACRyU,KACE,qBACA,sBAIFnR,KAAQ,SACRgR,KAAQ,IACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,4CACRyU,KACE,aACA,mBACA,oBACA,iBACA,gBACA,iBACA,eACA,oBAIFnR,KAAQ,qBACRgR,KAAQ,MACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,mBACRyU,KACE,kBAIFnR,KAAQ,wBACRgR,KAAQ,MACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,sBACRyU,KACE,cACA,iBACA,eACA,wBAIFnR,KAAQ,0BACRgR,KAAQ,MACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,+CAGRsD,KAAQ,sBACRgR,KAAQ,MACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,yBACRyU,KACE,aACA,oBACA,kBACA,uBAIFnR,KAAQ,sBACRgR,KAAQ,MACRC,OAAU,GACVC,OAAS,EACTxU,KAAQ,oBACRyU,KACE,kBAKd/S,YACI,gBACA,gBACA,aACA,oBACA,QACA,UACA,sBACA,uBACA,yBACA,gBACA,uBACA,qBACA,QACA,yBACA,yBACA,yBACA,iBACA,iBACA,YACA,YACA,eACA,SACA,aACA,iBACA,UACA,SACA,QACA,SACA,sBACA,mBACA,YACA,0BACA,sBACA,0BACA,cACA,SACA,mBACA,sBACA,qBACA,mBACA,mBACA,mBACA,QACA,sBACA,mBACA,eACA,mBACA,0BACA,0BACA,OACA,oBACA,UACA,qBACA,wBACA,eACA,kBACA,uBACA,eACA,iBACA,iBACA,8BACA,uBACA,qBACA,cACA,mBACA,oBACA,kCACA,0BACA,0BACA,uBACA,sBACA,wBACA,oBACA,oBACA,+BACA,wBACA,uBACA,aACA,6BACA,yBACA,qBACA,aACA,oBACA,sBACA,gBACA,iBACA,kBACA,4BACA,2BACA,2BACA,eACA,SACA,wBACA,mBACA,sBACA,UACA,WACA,kBACA,oBACA,YACA,sBACA,mBACA,YACA,kBACA,WACA,uBACA,oBACA,YACA,yBACA,SACA,sBACA,sBACA,2BACA,uBACA,qBACA,mBACA,sBACA,eACA,wBACA,yBACA,yBACA,2BACA,iBACA,YACA,sBACA,qBACA,sBACA,qBACA,mBACA,yBACA,uBACA,oBACA,gBACA,4BACA,oBACA,oBACA,YACA,cACA,sBACA,qBACA,mBACA,kBACA,kBACA,2BACA,uBACA,sBACA,uBACA,kBACA,qBACA,mBACA,cACA,kBACA,YACA,kBACA,uBACA,gBACA,uBACA,oBACA,eACA,mBACA,iBACA,0BACA,sBACA,mBACA,+BACA,kBACA,iBACA,iBACA,yBACA,gBACA,0BACA,WACA,sBACA,sBACA,uBACA,eACA,qBACA,qBACA,6BACA,sBACA,wBACA,uBACA,cACA,eACA,oBACA,qBACA,eACA,qBACA,qBACA,UACA,wBACA,aACA,mBACA,kBACA,0BACA,wBACA,iBACA,iBACA,sBACA,0BACA,SACA,yBACA,8BACA,kBACA,kBACA,kBACA,sBACA,eACA,WACA,oBACA,sBACA,wBACA,wBACA,mBACA,yBACA,mBACA,mBACA,sBACA,qBACA,oBACA,gBACA,sBACA,WACA,sBACA,cACA,mBACA,oBACA,qBACA,0BACA,eACA,4BACA,gBACA,iBACA,cACA,0BACA,sBACA,WACA,wBACA,qBACA,mBACA,sBACA,WACA,mBACA,qBACA,eACA,wBACA,yBACA,gBACA,iBACA,qBACA,+BACA,qBACA,cACA,qCACA,0BACA,YACA,cACA,kBACA,qBACA,uBACA,qBACA,aACA,eACA,qBACA,YACA,sBACA,YACA,oBACA,aACA,oBACA,sBACA,aACA,oBACA,uBACA,oBACA,YACA,iBACA,uBACA,oBACA,mBACA,WACA,kBACA,mBACA,sBACA,qBACA,uBACA,qBACA,YACA,mBACA,kBACA,kBACA,mBACA,uBACA,yBACA,gBACA,YACA,mBACA,sBACA,+BACA,2BACA,4BACA,oBACA,oBACA,qBACA,wBACA,YACA,2BACA,6BACA,m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","file":"chance.min.js","sourcesContent":["// Chance.js 1.0.13\n// http://chancejs.com\n// (c) 2013 Victor Quinn\n// Chance may be freely distributed or modified under the MIT license.\n\n(function () {\n\n // Constants\n var MAX_INT = 9007199254740992;\n var MIN_INT = -MAX_INT;\n var NUMBERS = '0123456789';\n var CHARS_LOWER = 'abcdefghijklmnopqrstuvwxyz';\n var CHARS_UPPER = CHARS_LOWER.toUpperCase();\n var HEX_POOL = NUMBERS + \"abcdef\";\n\n // Cached array helpers\n var slice = Array.prototype.slice;\n\n // Constructor\n function Chance (seed) {\n if (!(this instanceof Chance)) {\n if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322\n return seed === null ? new Chance() : new Chance(seed);\n }\n\n // if user has provided a function, use that as the generator\n if (typeof seed === 'function') {\n this.random = seed;\n return this;\n }\n\n if (arguments.length) {\n // set a starting value of zero so we can add to it\n this.seed = 0;\n }\n\n // otherwise, leave this.seed blank so that MT will receive a blank\n\n for (var i = 0; i < arguments.length; i++) {\n var seedling = 0;\n if (Object.prototype.toString.call(arguments[i]) === '[object String]') {\n for (var j = 0; j < arguments[i].length; j++) {\n // create a numeric hash for each argument, add to seedling\n var hash = 0;\n for (var k = 0; k < arguments[i].length; k++) {\n hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;\n }\n seedling += hash;\n }\n } else {\n seedling = arguments[i];\n }\n this.seed += (arguments.length - i) * seedling;\n }\n\n // If no generator function was provided, use our MT\n this.mt = this.mersenne_twister(this.seed);\n this.bimd5 = this.blueimp_md5();\n this.random = function () {\n return this.mt.random(this.seed);\n };\n\n return this;\n }\n\n Chance.prototype.VERSION = \"1.0.13\";\n\n // Random helper functions\n function initOptions(options, defaults) {\n options = options || {};\n\n if (defaults) {\n for (var i in defaults) {\n if (typeof options[i] === 'undefined') {\n options[i] = defaults[i];\n }\n }\n }\n\n return options;\n }\n\n function testRange(test, errorMessage) {\n if (test) {\n throw new RangeError(errorMessage);\n }\n }\n\n /**\n * Encode the input string with Base64.\n */\n var base64 = function() {\n throw new Error('No Base64 encoder available.');\n };\n\n // Select proper Base64 encoder.\n (function determineBase64Encoder() {\n if (typeof btoa === 'function') {\n base64 = btoa;\n } else if (typeof Buffer === 'function') {\n base64 = function(input) {\n return new Buffer(input).toString('base64');\n };\n }\n })();\n\n // -- Basics --\n\n /**\n * Return a random bool, either true or false\n *\n * @param {Object} [options={ likelihood: 50 }] alter the likelihood of\n * receiving a true or false value back.\n * @throws {RangeError} if the likelihood is out of bounds\n * @returns {Bool} either true or false\n */\n Chance.prototype.bool = function (options) {\n // likelihood of success (true)\n options = initOptions(options, {likelihood : 50});\n\n // Note, we could get some minor perf optimizations by checking range\n // prior to initializing defaults, but that makes code a bit messier\n // and the check more complicated as we have to check existence of\n // the object then existence of the key before checking constraints.\n // Since the options initialization should be minor computationally,\n // decision made for code cleanliness intentionally. This is mentioned\n // here as it's the first occurrence, will not be mentioned again.\n testRange(\n options.likelihood < 0 || options.likelihood > 100,\n \"Chance: Likelihood accepts values from 0 to 100.\"\n );\n\n return this.random() * 100 < options.likelihood;\n };\n\n Chance.prototype.animal = function (options){\n //returns a random animal\n options = initOptions(options);\n\n if(typeof options.type !== 'undefined'){\n //if user does not put in a valid animal type, user will get an error\n testRange(\n !this.get(\"animals\")[options.type.toLowerCase()],\n \"Please pick from desert, ocean, grassland, forest, zoo, pets, farm.\"\n );\n //if user does put in valid animal type, will return a random animal of that type\n return this.pick(this.get(\"animals\")[options.type.toLowerCase()]);\n }\n //if user does not put in any animal type, will return a random animal regardless\n animalTypeArray = [\"desert\",\"forest\",\"ocean\",\"zoo\",\"farm\",\"pet\",\"grassland\"];\n return this.pick(this.get(\"animals\")[this.pick(animalTypeArray)]);\n };\n\n /**\n * Return a random character.\n *\n * @param {Object} [options={}] can specify a character pool, only alpha,\n * only symbols, and casing (lower or upper)\n * @returns {String} a single random character\n * @throws {RangeError} Can only specify alpha or symbols, not both\n */\n Chance.prototype.character = function (options) {\n options = initOptions(options);\n testRange(\n options.alpha && options.symbols,\n \"Chance: Cannot specify both alpha and symbols.\"\n );\n\n var symbols = \"!@#$%^&*()[]\",\n letters, pool;\n\n if (options.casing === 'lower') {\n letters = CHARS_LOWER;\n } else if (options.casing === 'upper') {\n letters = CHARS_UPPER;\n } else {\n letters = CHARS_LOWER + CHARS_UPPER;\n }\n\n if (options.pool) {\n pool = options.pool;\n } else if (options.alpha) {\n pool = letters;\n } else if (options.symbols) {\n pool = symbols;\n } else {\n pool = letters + NUMBERS + symbols;\n }\n\n return pool.charAt(this.natural({max: (pool.length - 1)}));\n };\n\n // Note, wanted to use \"float\" or \"double\" but those are both JS reserved words.\n\n // Note, fixed means N OR LESS digits after the decimal. This because\n // It could be 14.9000 but in JavaScript, when this is cast as a number,\n // the trailing zeroes are dropped. Left to the consumer if trailing zeroes are\n // needed\n /**\n * Return a random floating point number\n *\n * @param {Object} [options={}] can specify a fixed precision, min, max\n * @returns {Number} a single floating point number\n * @throws {RangeError} Can only specify fixed or precision, not both. Also\n * min cannot be greater than max\n */\n Chance.prototype.floating = function (options) {\n options = initOptions(options, {fixed : 4});\n testRange(\n options.fixed && options.precision,\n \"Chance: Cannot specify both fixed and precision.\"\n );\n\n var num;\n var fixed = Math.pow(10, options.fixed);\n\n var max = MAX_INT / fixed;\n var min = -max;\n\n testRange(\n options.min && options.fixed && options.min < min,\n \"Chance: Min specified is out of range with fixed. Min should be, at least, \" + min\n );\n testRange(\n options.max && options.fixed && options.max > max,\n \"Chance: Max specified is out of range with fixed. Max should be, at most, \" + max\n );\n\n options = initOptions(options, { min : min, max : max });\n\n // Todo - Make this work!\n // options.precision = (typeof options.precision !== \"undefined\") ? options.precision : false;\n\n num = this.integer({min: options.min * fixed, max: options.max * fixed});\n var num_fixed = (num / fixed).toFixed(options.fixed);\n\n return parseFloat(num_fixed);\n };\n\n /**\n * Return a random integer\n *\n * NOTE the max and min are INCLUDED in the range. So:\n * chance.integer({min: 1, max: 3});\n * would return either 1, 2, or 3.\n *\n * @param {Object} [options={}] can specify a min and/or max\n * @returns {Number} a single random integer number\n * @throws {RangeError} min cannot be greater than max\n */\n Chance.prototype.integer = function (options) {\n // 9007199254740992 (2^53) is the max integer number in JavaScript\n // See: http://vq.io/132sa2j\n options = initOptions(options, {min: MIN_INT, max: MAX_INT});\n testRange(options.min > options.max, \"Chance: Min cannot be greater than Max.\");\n\n return Math.floor(this.random() * (options.max - options.min + 1) + options.min);\n };\n\n /**\n * Return a random natural\n *\n * NOTE the max and min are INCLUDED in the range. So:\n * chance.natural({min: 1, max: 3});\n * would return either 1, 2, or 3.\n *\n * @param {Object} [options={}] can specify a min and/or maxm or a numerals count.\n * @returns {Number} a single random integer number\n * @throws {RangeError} min cannot be greater than max\n */\n Chance.prototype.natural = function (options) {\n options = initOptions(options, {min: 0, max: MAX_INT});\n if (typeof options.numerals === 'number'){\n testRange(options.numerals < 1, \"Chance: Numerals cannot be less than one.\");\n options.min = Math.pow(10, options.numerals - 1);\n options.max = Math.pow(10, options.numerals) - 1;\n }\n testRange(options.min < 0, \"Chance: Min cannot be less than zero.\");\n return this.integer(options);\n };\n\n /**\n * Return a random hex number as string\n *\n * NOTE the max and min are INCLUDED in the range. So:\n * chance.hex({min: '9', max: 'B'});\n * would return either '9', 'A' or 'B'.\n *\n * @param {Object} [options={}] can specify a min and/or max and/or casing\n * @returns {String} a single random string hex number\n * @throws {RangeError} min cannot be greater than max\n */\n Chance.prototype.hex = function (options) {\n options = initOptions(options, {min: 0, max: MAX_INT, casing: 'lower'});\n testRange(options.min < 0, \"Chance: Min cannot be less than zero.\");\n\t\tvar integer = this.natural({min: options.min, max: options.max});\n\t\tif (options.casing === 'upper') {\n\t\t\treturn integer.toString(16).toUpperCase();\n\t\t}\n\t\treturn integer.toString(16);\n };\n\n Chance.prototype.letter = function(options) {\n options = initOptions(options, {casing: 'lower'});\n var pool = \"abcdefghijklmnopqrstuvwxyz\";\n var letter = this.character({pool: pool});\n if (options.casing === 'upper') {\n letter = letter.toUpperCase();\n }\n return letter;\n }\n\n /**\n * Return a random string\n *\n * @param {Object} [options={}] can specify a length\n * @returns {String} a string of random length\n * @throws {RangeError} length cannot be less than zero\n */\n Chance.prototype.string = function (options) {\n options = initOptions(options, { length: this.natural({min: 5, max: 20}) });\n testRange(options.length < 0, \"Chance: Length cannot be less than zero.\");\n var length = options.length,\n text = this.n(this.character, length, options);\n\n return text.join(\"\");\n };\n\n // -- End Basics --\n\n // -- Helpers --\n\n Chance.prototype.capitalize = function (word) {\n return word.charAt(0).toUpperCase() + word.substr(1);\n };\n\n Chance.prototype.mixin = function (obj) {\n for (var func_name in obj) {\n Chance.prototype[func_name] = obj[func_name];\n }\n return this;\n };\n\n /**\n * Given a function that generates something random and a number of items to generate,\n * return an array of items where none repeat.\n *\n * @param {Function} fn the function that generates something random\n * @param {Number} num number of terms to generate\n * @param {Object} options any options to pass on to the generator function\n * @returns {Array} an array of length `num` with every item generated by `fn` and unique\n *\n * There can be more parameters after these. All additional parameters are provided to the given function\n */\n Chance.prototype.unique = function(fn, num, options) {\n testRange(\n typeof fn !== \"function\",\n \"Chance: The first argument must be a function.\"\n );\n\n var comparator = function(arr, val) { return arr.indexOf(val) !== -1; };\n\n if (options) {\n comparator = options.comparator || comparator;\n }\n\n var arr = [], count = 0, result, MAX_DUPLICATES = num * 50, params = slice.call(arguments, 2);\n\n while (arr.length < num) {\n var clonedParams = JSON.parse(JSON.stringify(params));\n result = fn.apply(this, clonedParams);\n if (!comparator(arr, result)) {\n arr.push(result);\n // reset count when unique found\n count = 0;\n }\n\n if (++count > MAX_DUPLICATES) {\n throw new RangeError(\"Chance: num is likely too large for sample set\");\n }\n }\n return arr;\n };\n\n /**\n * Gives an array of n random terms\n *\n * @param {Function} fn the function that generates something random\n * @param {Number} n number of terms to generate\n * @returns {Array} an array of length `n` with items generated by `fn`\n *\n * There can be more parameters after these. All additional parameters are provided to the given function\n */\n Chance.prototype.n = function(fn, n) {\n testRange(\n typeof fn !== \"function\",\n \"Chance: The first argument must be a function.\"\n );\n\n if (typeof n === 'undefined') {\n n = 1;\n }\n var i = n, arr = [], params = slice.call(arguments, 2);\n\n // Providing a negative count should result in a noop.\n i = Math.max( 0, i );\n\n for (null; i--; null) {\n arr.push(fn.apply(this, params));\n }\n\n return arr;\n };\n\n // H/T to SO for this one: http://vq.io/OtUrZ5\n Chance.prototype.pad = function (number, width, pad) {\n // Default pad to 0 if none provided\n pad = pad || '0';\n // Convert number to a string\n number = number + '';\n return number.length >= width ? number : new Array(width - number.length + 1).join(pad) + number;\n };\n\n // DEPRECATED on 2015-10-01\n Chance.prototype.pick = function (arr, count) {\n if (arr.length === 0) {\n throw new RangeError(\"Chance: Cannot pick() from an empty array\");\n }\n if (!count || count === 1) {\n return arr[this.natural({max: arr.length - 1})];\n } else {\n return this.shuffle(arr).slice(0, count);\n }\n };\n\n // Given an array, returns a single random element\n Chance.prototype.pickone = function (arr) {\n if (arr.length === 0) {\n throw new RangeError(\"Chance: Cannot pickone() from an empty array\");\n }\n return arr[this.natural({max: arr.length - 1})];\n };\n\n // Given an array, returns a random set with 'count' elements\n Chance.prototype.pickset = function (arr, count) {\n if (count === 0) {\n return [];\n }\n if (arr.length === 0) {\n throw new RangeError(\"Chance: Cannot pickset() from an empty array\");\n }\n if (count < 0) {\n throw new RangeError(\"Chance: Count must be a positive number\");\n }\n if (!count || count === 1) {\n return [ this.pickone(arr) ];\n } else {\n return this.shuffle(arr).slice(0, count);\n }\n };\n\n Chance.prototype.shuffle = function (arr) {\n var old_array = arr.slice(0),\n new_array = [],\n j = 0,\n length = Number(old_array.length);\n\n for (var i = 0; i < length; i++) {\n // Pick a random index from the array\n j = this.natural({max: old_array.length - 1});\n // Add it to the new array\n new_array[i] = old_array[j];\n // Remove that element from the original array\n old_array.splice(j, 1);\n }\n\n return new_array;\n };\n\n // Returns a single item from an array with relative weighting of odds\n Chance.prototype.weighted = function (arr, weights, trim) {\n if (arr.length !== weights.length) {\n throw new RangeError(\"Chance: Length of array and weights must match\");\n }\n\n // scan weights array and sum valid entries\n var sum = 0;\n var val;\n for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {\n val = weights[weightIndex];\n if (isNaN(val)) {\n throw new RangeError(\"Chance: All weights must be numbers\");\n }\n\n if (val > 0) {\n sum += val;\n }\n }\n\n if (sum === 0) {\n throw new RangeError(\"Chance: No valid entries in array weights\");\n }\n\n // select a value within range\n var selected = this.random() * sum;\n\n // find array entry corresponding to selected value\n var total = 0;\n var lastGoodIdx = -1;\n var chosenIdx;\n for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {\n val = weights[weightIndex];\n total += val;\n if (val > 0) {\n if (selected <= total) {\n chosenIdx = weightIndex;\n break;\n }\n lastGoodIdx = weightIndex;\n }\n\n // handle any possible rounding error comparison to ensure something is picked\n if (weightIndex === (weights.length - 1)) {\n chosenIdx = lastGoodIdx;\n }\n }\n\n var chosen = arr[chosenIdx];\n trim = (typeof trim === 'undefined') ? false : trim;\n if (trim) {\n arr.splice(chosenIdx, 1);\n weights.splice(chosenIdx, 1);\n }\n\n return chosen;\n };\n\n // -- End Helpers --\n\n // -- Text --\n\n Chance.prototype.paragraph = function (options) {\n options = initOptions(options);\n\n var sentences = options.sentences || this.natural({min: 3, max: 7}),\n sentence_array = this.n(this.sentence, sentences);\n\n return sentence_array.join(' ');\n };\n\n // Could get smarter about this than generating random words and\n // chaining them together. Such as: http://vq.io/1a5ceOh\n Chance.prototype.sentence = function (options) {\n options = initOptions(options);\n\n var words = options.words || this.natural({min: 12, max: 18}),\n punctuation = options.punctuation,\n text, word_array = this.n(this.word, words);\n\n text = word_array.join(' ');\n\n // Capitalize first letter of sentence\n text = this.capitalize(text);\n\n // Make sure punctuation has a usable value\n if (punctuation !== false && !/^[\\.\\?;!:]$/.test(punctuation)) {\n punctuation = '.';\n }\n\n // Add punctuation mark\n if (punctuation) {\n text += punctuation;\n }\n\n return text;\n };\n\n Chance.prototype.syllable = function (options) {\n options = initOptions(options);\n\n var length = options.length || this.natural({min: 2, max: 3}),\n consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones\n vowels = 'aeiou', // vowels\n all = consonants + vowels, // all\n text = '',\n chr;\n\n // I'm sure there's a more elegant way to do this, but this works\n // decently well.\n for (var i = 0; i < length; i++) {\n if (i === 0) {\n // First character can be anything\n chr = this.character({pool: all});\n } else if (consonants.indexOf(chr) === -1) {\n // Last character was a vowel, now we want a consonant\n chr = this.character({pool: consonants});\n } else {\n // Last character was a consonant, now we want a vowel\n chr = this.character({pool: vowels});\n }\n\n text += chr;\n }\n\n if (options.capitalize) {\n text = this.capitalize(text);\n }\n\n return text;\n };\n\n Chance.prototype.word = function (options) {\n options = initOptions(options);\n\n testRange(\n options.syllables && options.length,\n \"Chance: Cannot specify both syllables AND length.\"\n );\n\n var syllables = options.syllables || this.natural({min: 1, max: 3}),\n text = '';\n\n if (options.length) {\n // Either bound word by length\n do {\n text += this.syllable();\n } while (text.length < options.length);\n text = text.substring(0, options.length);\n } else {\n // Or by number of syllables\n for (var i = 0; i < syllables; i++) {\n text += this.syllable();\n }\n }\n\n if (options.capitalize) {\n text = this.capitalize(text);\n }\n\n return text;\n };\n\n // -- End Text --\n\n // -- Person --\n\n Chance.prototype.age = function (options) {\n options = initOptions(options);\n var ageRange;\n\n switch (options.type) {\n case 'child':\n ageRange = {min: 0, max: 12};\n break;\n case 'teen':\n ageRange = {min: 13, max: 19};\n break;\n case 'adult':\n ageRange = {min: 18, max: 65};\n break;\n case 'senior':\n ageRange = {min: 65, max: 100};\n break;\n case 'all':\n ageRange = {min: 0, max: 100};\n break;\n default:\n ageRange = {min: 18, max: 65};\n break;\n }\n\n return this.natural(ageRange);\n };\n\n Chance.prototype.birthday = function (options) {\n var age = this.age(options);\n var currentYear = new Date().getFullYear();\n\n if (options && options.type) {\n var min = new Date();\n var max = new Date();\n min.setFullYear(currentYear - age - 1);\n max.setFullYear(currentYear - age);\n\n options = initOptions(options, {\n min: min,\n max: max\n });\n } else {\n options = initOptions(options, {\n year: currentYear - age\n });\n }\n\n return this.date(options);\n };\n\n // CPF; ID to identify taxpayers in Brazil\n Chance.prototype.cpf = function (options) {\n options = initOptions(options, {\n formatted: true\n });\n\n var n = this.n(this.natural, 9, { max: 9 });\n 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;\n d1 = 11 - (d1 % 11);\n if (d1>=10) {\n d1 = 0;\n }\n 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;\n d2 = 11 - (d2 % 11);\n if (d2>=10) {\n d2 = 0;\n }\n var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;\n return options.formatted ? cpf : cpf.replace(/\\D/g,'');\n };\n\n // CNPJ: ID to identify companies in Brazil\n Chance.prototype.cnpj = function (options) {\n options = initOptions(options, {\n formatted: true\n });\n\n var n = this.n(this.natural, 12, { max: 12 });\n 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;\n d1 = 11 - (d1 % 11);\n if (d1<2) {\n d1 = 0;\n }\n 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;\n d2 = 11 - (d2 % 11);\n if (d2<2) {\n d2 = 0;\n }\n 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;\n return options.formatted ? cnpj : cnpj.replace(/\\D/g,'');\n };\n\n Chance.prototype.first = function (options) {\n options = initOptions(options, {gender: this.gender(), nationality: 'en'});\n return this.pick(this.get(\"firstNames\")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);\n };\n\n Chance.prototype.profession = function (options) {\n options = initOptions(options);\n if(options.rank){\n return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get(\"profession\"));\n } else{\n return this.pick(this.get(\"profession\"));\n }\n };\n\n Chance.prototype.company = function (){\n return this.pick(this.get(\"company\"));\n };\n\n Chance.prototype.gender = function (options) {\n options = initOptions(options, {extraGenders: []});\n return this.pick(['Male', 'Female'].concat(options.extraGenders));\n };\n\n Chance.prototype.last = function (options) {\n options = initOptions(options, {nationality: 'en'});\n return this.pick(this.get(\"lastNames\")[options.nationality.toLowerCase()]);\n };\n\n Chance.prototype.israelId=function(){\n var x=this.string({pool: '0123456789',length:8});\n var y=0;\n for (var i=0;i<x.length;i++){\n var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);\n thisDigit=this.pad(thisDigit,2).toString();\n thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);\n y=y+thisDigit;\n }\n x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);\n return x;\n };\n\n Chance.prototype.mrz = function (options) {\n var checkDigit = function (input) {\n var alpha = \"<ABCDEFGHIJKLMNOPQRSTUVWXYXZ\".split(''),\n multipliers = [ 7, 3, 1 ],\n runningTotal = 0;\n\n if (typeof input !== 'string') {\n input = input.toString();\n }\n\n input.split('').forEach(function(character, idx) {\n var pos = alpha.indexOf(character);\n\n if(pos !== -1) {\n character = pos === 0 ? 0 : pos + 9;\n } else {\n character = parseInt(character, 10);\n }\n character *= multipliers[idx % multipliers.length];\n runningTotal += character;\n });\n return runningTotal % 10;\n };\n var generate = function (opts) {\n var pad = function (length) {\n return new Array(length + 1).join('<');\n };\n var number = [ 'P<',\n opts.issuer,\n opts.last.toUpperCase(),\n '<<',\n opts.first.toUpperCase(),\n pad(39 - (opts.last.length + opts.first.length + 2)),\n opts.passportNumber,\n checkDigit(opts.passportNumber),\n opts.nationality,\n opts.dob,\n checkDigit(opts.dob),\n opts.gender,\n opts.expiry,\n checkDigit(opts.expiry),\n pad(14),\n checkDigit(pad(14)) ].join('');\n\n return number +\n (checkDigit(number.substr(44, 10) +\n number.substr(57, 7) +\n number.substr(65, 7)));\n };\n\n var that = this;\n\n options = initOptions(options, {\n first: this.first(),\n last: this.last(),\n passportNumber: this.integer({min: 100000000, max: 999999999}),\n dob: (function () {\n var date = that.birthday({type: 'adult'});\n return [date.getFullYear().toString().substr(2),\n that.pad(date.getMonth() + 1, 2),\n that.pad(date.getDate(), 2)].join('');\n }()),\n expiry: (function () {\n var date = new Date();\n return [(date.getFullYear() + 5).toString().substr(2),\n that.pad(date.getMonth() + 1, 2),\n that.pad(date.getDate(), 2)].join('');\n }()),\n gender: this.gender() === 'Female' ? 'F': 'M',\n issuer: 'GBR',\n nationality: 'GBR'\n });\n return generate (options);\n };\n\n Chance.prototype.name = function (options) {\n options = initOptions(options);\n\n var first = this.first(options),\n last = this.last(options),\n name;\n\n if (options.middle) {\n name = first + ' ' + this.first(options) + ' ' + last;\n } else if (options.middle_initial) {\n name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;\n } else {\n name = first + ' ' + last;\n }\n\n if (options.prefix) {\n name = this.prefix(options) + ' ' + name;\n }\n\n if (options.suffix) {\n name = name + ' ' + this.suffix(options);\n }\n\n return name;\n };\n\n // Return the list of available name prefixes based on supplied gender.\n // @todo introduce internationalization\n Chance.prototype.name_prefixes = function (gender) {\n gender = gender || \"all\";\n gender = gender.toLowerCase();\n\n var prefixes = [\n { name: 'Doctor', abbreviation: 'Dr.' }\n ];\n\n if (gender === \"male\" || gender === \"all\") {\n prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });\n }\n\n if (gender === \"female\" || gender === \"all\") {\n prefixes.push({ name: 'Miss', abbreviation: 'Miss' });\n prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });\n }\n\n return prefixes;\n };\n\n // Alias for name_prefix\n Chance.prototype.prefix = function (options) {\n return this.name_prefix(options);\n };\n\n Chance.prototype.name_prefix = function (options) {\n options = initOptions(options, { gender: \"all\" });\n return options.full ?\n this.pick(this.name_prefixes(options.gender)).name :\n this.pick(this.name_prefixes(options.gender)).abbreviation;\n };\n //Hungarian ID number\n Chance.prototype.HIDN= function(){\n //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)\n var idn_pool=\"0123456789\";\n var idn_chrs=\"ABCDEFGHIJKLMNOPQRSTUVWXYXZ\";\n var idn=\"\";\n idn+=this.string({pool:idn_pool,length:6});\n idn+=this.string({pool:idn_chrs,length:2});\n return idn;\n };\n\n\n Chance.prototype.ssn = function (options) {\n options = initOptions(options, {ssnFour: false, dashes: true});\n var ssn_pool = \"1234567890\",\n ssn,\n dash = options.dashes ? '-' : '';\n\n if(!options.ssnFour) {\n ssn = this.string({pool: ssn_pool, length: 3}) + dash +\n this.string({pool: ssn_pool, length: 2}) + dash +\n this.string({pool: ssn_pool, length: 4});\n } else {\n ssn = this.string({pool: ssn_pool, length: 4});\n }\n return ssn;\n };\n\n // Return the list of available name suffixes\n // @todo introduce internationalization\n Chance.prototype.name_suffixes = function () {\n var suffixes = [\n { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },\n { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },\n { name: 'Esquire', abbreviation: 'Esq.' },\n { name: 'Junior', abbreviation: 'Jr.' },\n { name: 'Juris Doctor', abbreviation: 'J.D.' },\n { name: 'Master of Arts', abbreviation: 'M.A.' },\n { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },\n { name: 'Master of Science', abbreviation: 'M.S.' },\n { name: 'Medical Doctor', abbreviation: 'M.D.' },\n { name: 'Senior', abbreviation: 'Sr.' },\n { name: 'The Third', abbreviation: 'III' },\n { name: 'The Fourth', abbreviation: 'IV' },\n { name: 'Bachelor of Engineering', abbreviation: 'B.E' },\n { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }\n ];\n return suffixes;\n };\n\n // Alias for name_suffix\n Chance.prototype.suffix = function (options) {\n return this.name_suffix(options);\n };\n\n Chance.prototype.name_suffix = function (options) {\n options = initOptions(options);\n return options.full ?\n this.pick(this.name_suffixes()).name :\n this.pick(this.name_suffixes()).abbreviation;\n };\n\n Chance.prototype.nationalities = function () {\n return this.get(\"nationalities\");\n };\n\n // Generate random nationality based on json list\n Chance.prototype.nationality = function () {\n var nationality = this.pick(this.nationalities());\n return nationality.name;\n };\n\n // -- End Person --\n\n // -- Mobile --\n // Android GCM Registration ID\n Chance.prototype.android_id = function () {\n return \"APA91\" + this.string({ pool: \"0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_\", length: 178 });\n };\n\n // Apple Push Token\n Chance.prototype.apple_token = function () {\n return this.string({ pool: \"abcdef1234567890\", length: 64 });\n };\n\n // Windows Phone 8 ANID2\n Chance.prototype.wp8_anid2 = function () {\n return base64( this.hash( { length : 32 } ) );\n };\n\n // Windows Phone 7 ANID\n Chance.prototype.wp7_anid = function () {\n return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });\n };\n\n // BlackBerry Device PIN\n Chance.prototype.bb_pin = function () {\n return this.hash({ length: 8 });\n };\n\n // -- End Mobile --\n\n // -- Web --\n Chance.prototype.avatar = function (options) {\n var url = null;\n var URL_BASE = '//www.gravatar.com/avatar/';\n var PROTOCOLS = {\n http: 'http',\n https: 'https'\n };\n var FILE_TYPES = {\n bmp: 'bmp',\n gif: 'gif',\n jpg: 'jpg',\n png: 'png'\n };\n var FALLBACKS = {\n '404': '404', // Return 404 if not found\n mm: 'mm', // Mystery man\n identicon: 'identicon', // Geometric pattern based on hash\n monsterid: 'monsterid', // A generated monster icon\n wavatar: 'wavatar', // A generated face\n retro: 'retro', // 8-bit icon\n blank: 'blank' // A transparent png\n };\n var RATINGS = {\n g: 'g',\n pg: 'pg',\n r: 'r',\n x: 'x'\n };\n var opts = {\n protocol: null,\n email: null,\n fileExtension: null,\n size: null,\n fallback: null,\n rating: null\n };\n\n if (!options) {\n // Set to a random email\n opts.email = this.email();\n options = {};\n }\n else if (typeof options === 'string') {\n opts.email = options;\n options = {};\n }\n else if (typeof options !== 'object') {\n return null;\n }\n else if (options.constructor === 'Array') {\n return null;\n }\n\n opts = initOptions(options, opts);\n\n if (!opts.email) {\n // Set to a random email\n opts.email = this.email();\n }\n\n // Safe checking for params\n opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';\n opts.size = parseInt(opts.size, 0) ? opts.size : '';\n opts.rating = RATINGS[opts.rating] ? opts.rating : '';\n opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';\n opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';\n\n url =\n opts.protocol +\n URL_BASE +\n this.bimd5.md5(opts.email) +\n (opts.fileExtension ? '.' + opts.fileExtension : '') +\n (opts.size || opts.rating || opts.fallback ? '?' : '') +\n (opts.size ? '&s=' + opts.size.toString() : '') +\n (opts.rating ? '&r=' + opts.rating : '') +\n (opts.fallback ? '&d=' + opts.fallback : '')\n ;\n\n return url;\n };\n\n /**\n * #Description:\n * ===============================================\n * Generate random color value base on color type:\n * -> hex\n * -> rgb\n * -> rgba\n * -> 0x\n * -> named color\n *\n * #Examples:\n * ===============================================\n * * Geerate random hex color\n * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'\n *\n * * Generate Hex based color value\n * chance.color({format: 'hex'}) => '#d67118'\n *\n * * Generate simple rgb value\n * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'\n *\n * * Generate Ox based color value\n * chance.color({format: '0x'}) => '0x67ae0b'\n *\n * * Generate graiscale based value\n * chance.color({grayscale: true}) => '#e2e2e2'\n *\n * * Return valide color name\n * chance.color({format: 'name'}) => 'red'\n *\n * * Make color uppercase\n * chance.color({casing: 'upper'}) => '#29CFA7'\n *\n * * Min Max values for RGBA\n * 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});\n *\n * @param [object] options\n * @return [string] color value\n */\n Chance.prototype.color = function (options) {\n function gray(value, delimiter) {\n return [value, value, value].join(delimiter || '');\n }\n\n function rgb(hasAlpha) {\n var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';\n var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : \"\";\n 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}));\n return rgbValue + '(' + colorValue + alphaChannel + ')';\n }\n\n function hex(start, end, withHash) {\n var symbol = (withHash) ? \"#\" : \"\";\n var hexstring = \"\";\n\n if (isGrayscale) {\n hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));\n if (options.format === \"shorthex\") {\n hexstring = gray(this.hex({min: 0, max: 15}));\n }\n }\n else {\n if (options.format === \"shorthex\") {\n 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);\n }\n else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {\n 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);\n }\n else {\n 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);\n }\n }\n\n return symbol + hexstring;\n }\n\n options = initOptions(options, {\n format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),\n grayscale: false,\n casing: 'lower',\n min: 0,\n max: 255,\n min_red: undefined,\n max_red: undefined,\n min_green: undefined,\n max_green: undefined,\n min_blue: undefined,\n max_blue: undefined,\n min_alpha: 0,\n max_alpha: 1\n });\n\n var isGrayscale = options.grayscale;\n var min_rgb = options.min;\n var max_rgb = options.max;\n var min_red = options.min_red;\n var max_red = options.max_red;\n var min_green = options.min_green;\n var max_green = options.max_green;\n var min_blue = options.min_blue;\n var max_blue = options.max_blue;\n var min_alpha = options.min_alpha;\n var max_alpha = options.max_alpha;\n if (options.min_red === undefined) { min_red = min_rgb; }\n if (options.max_red === undefined) { max_red = max_rgb; }\n if (options.min_green === undefined) { min_green = min_rgb; }\n if (options.max_green === undefined) { max_green = max_rgb; }\n if (options.min_blue === undefined) { min_blue = min_rgb; }\n if (options.max_blue === undefined) { max_blue = max_rgb; }\n if (options.min_alpha === undefined) { min_alpha = 0; }\n if (options.max_alpha === undefined) { max_alpha = 1; }\n if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {\n min_rgb = ((min_red + min_green + min_blue) / 3);\n max_rgb = ((max_red + max_green + max_blue) / 3);\n }\n var colorValue;\n\n if (options.format === 'hex') {\n colorValue = hex.call(this, 2, 6, true);\n }\n else if (options.format === 'shorthex') {\n colorValue = hex.call(this, 1, 3, true);\n }\n else if (options.format === 'rgb') {\n colorValue = rgb.call(this, false);\n }\n else if (options.format === 'rgba') {\n colorValue = rgb.call(this, true);\n }\n else if (options.format === '0x') {\n colorValue = '0x' + hex.call(this, 2, 6);\n }\n else if(options.format === 'name') {\n return this.pick(this.get(\"colorNames\"));\n }\n else {\n throw new RangeError('Invalid format provided. Please provide one of \"hex\", \"shorthex\", \"rgb\", \"rgba\", \"0x\" or \"name\".');\n }\n\n if (options.casing === 'upper' ) {\n colorValue = colorValue.toUpperCase();\n }\n\n return colorValue;\n };\n\n Chance.prototype.domain = function (options) {\n options = initOptions(options);\n return this.word() + '.' + (options.tld || this.tld());\n };\n\n Chance.prototype.email = function (options) {\n options = initOptions(options);\n return this.word({length: options.length}) + '@' + (options.domain || this.domain());\n };\n\n /**\n * #Description:\n * ===============================================\n * Generate a random Facebook id, aka fbid.\n *\n * NOTE: At the moment (Sep 2017), Facebook ids are\n * \"numeric strings\" of length 16.\n * However, Facebook Graph API documentation states that\n * \"it is extremely likely to change over time\".\n * @see https://developers.facebook.com/docs/graph-api/overview/\n *\n * #Examples:\n * ===============================================\n * chance.fbid() => '1000035231661304'\n *\n * @return [string] facebook id\n */\n Chance.prototype.fbid = function () {\n return '10000' + this.string({pool: \"1234567890\", length: 11});\n };\n\n Chance.prototype.google_analytics = function () {\n var account = this.pad(this.natural({max: 999999}), 6);\n var property = this.pad(this.natural({max: 99}), 2);\n\n return 'UA-' + account + '-' + property;\n };\n\n Chance.prototype.hashtag = function () {\n return '#' + this.word();\n };\n\n Chance.prototype.ip = function () {\n // Todo: This could return some reserved IPs. See http://vq.io/137dgYy\n // this should probably be updated to account for that rare as it may be\n return this.natural({min: 1, max: 254}) + '.' +\n this.natural({max: 255}) + '.' +\n this.natural({max: 255}) + '.' +\n this.natural({min: 1, max: 254});\n };\n\n Chance.prototype.ipv6 = function () {\n var ip_addr = this.n(this.hash, 8, {length: 4});\n\n return ip_addr.join(\":\");\n };\n\n Chance.prototype.klout = function () {\n return this.natural({min: 1, max: 99});\n };\n\n Chance.prototype.semver = function (options) {\n options = initOptions(options, { include_prerelease: true });\n\n var range = this.pickone([\"^\", \"~\", \"<\", \">\", \"<=\", \">=\", \"=\"]);\n if (options.range) {\n range = options.range;\n }\n\n var prerelease = \"\";\n if (options.include_prerelease) {\n prerelease = this.weighted([\"\", \"-dev\", \"-beta\", \"-alpha\"], [50, 10, 5, 1]);\n }\n return range + this.rpg('3d10').join('.') + prerelease;\n };\n\n Chance.prototype.tlds = function () {\n 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'];\n };\n\n Chance.prototype.tld = function () {\n return this.pick(this.tlds());\n };\n\n Chance.prototype.twitter = function () {\n return '@' + this.word();\n };\n\n Chance.prototype.url = function (options) {\n options = initOptions(options, { protocol: \"http\", domain: this.domain(options), domain_prefix: \"\", path: this.word(), extensions: []});\n\n var extension = options.extensions.length > 0 ? \".\" + this.pick(options.extensions) : \"\";\n var domain = options.domain_prefix ? options.domain_prefix + \".\" + options.domain : options.domain;\n\n return options.protocol + \"://\" + domain + \"/\" + options.path + extension;\n };\n\n Chance.prototype.port = function() {\n return this.integer({min: 0, max: 65535});\n };\n\n Chance.prototype.locale = function (options) {\n options = initOptions(options);\n if (options.region){\n return this.pick(this.get(\"locale_regions\"));\n } else {\n return this.pick(this.get(\"locale_languages\"));\n }\n };\n\n Chance.prototype.locales = function (options) {\n options = initOptions(options);\n if (options.region){\n return this.get(\"locale_regions\");\n } else {\n return this.get(\"locale_languages\");\n }\n };\n\n // -- End Web --\n\n // -- Location --\n\n Chance.prototype.address = function (options) {\n options = initOptions(options);\n return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);\n };\n\n Chance.prototype.altitude = function (options) {\n options = initOptions(options, {fixed: 5, min: 0, max: 8848});\n return this.floating({\n min: options.min,\n max: options.max,\n fixed: options.fixed\n });\n };\n\n Chance.prototype.areacode = function (options) {\n options = initOptions(options, {parens : true});\n // Don't want area codes to start with 1, or have a 9 as the second digit\n var areacode = this.natural({min: 2, max: 9}).toString() +\n this.natural({min: 0, max: 8}).toString() +\n this.natural({min: 0, max: 9}).toString();\n\n return options.parens ? '(' + areacode + ')' : areacode;\n };\n\n Chance.prototype.city = function () {\n return this.capitalize(this.word({syllables: 3}));\n };\n\n Chance.prototype.coordinates = function (options) {\n return this.latitude(options) + ', ' + this.longitude(options);\n };\n\n Chance.prototype.countries = function () {\n return this.get(\"countries\");\n };\n\n Chance.prototype.country = function (options) {\n options = initOptions(options);\n var country = this.pick(this.countries());\n return options.full ? country.name : country.abbreviation;\n };\n\n Chance.prototype.depth = function (options) {\n options = initOptions(options, {fixed: 5, min: -10994, max: 0});\n return this.floating({\n min: options.min,\n max: options.max,\n fixed: options.fixed\n });\n };\n\n Chance.prototype.geohash = function (options) {\n options = initOptions(options, { length: 7 });\n return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });\n };\n\n Chance.prototype.geojson = function (options) {\n return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);\n };\n\n Chance.prototype.latitude = function (options) {\n options = initOptions(options, {fixed: 5, min: -90, max: 90});\n return this.floating({min: options.min, max: options.max, fixed: options.fixed});\n };\n\n Chance.prototype.longitude = function (options) {\n options = initOptions(options, {fixed: 5, min: -180, max: 180});\n return this.floating({min: options.min, max: options.max, fixed: options.fixed});\n };\n\n Chance.prototype.phone = function (options) {\n var self = this,\n numPick,\n ukNum = function (parts) {\n var section = [];\n //fills the section part of the phone number with random numbers.\n parts.sections.forEach(function(n) {\n section.push(self.string({ pool: '0123456789', length: n}));\n });\n return parts.area + section.join(' ');\n };\n options = initOptions(options, {\n formatted: true,\n country: 'us',\n mobile: false\n });\n if (!options.formatted) {\n options.parens = false;\n }\n var phone;\n switch (options.country) {\n case 'fr':\n if (!options.mobile) {\n numPick = this.pick([\n // Valid zone and département codes.\n '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}),\n '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}),\n '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}),\n '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}),\n '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}),\n '09' + self.string({ pool: '0123456789', length: 8}),\n ]);\n phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;\n } else {\n numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});\n phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;\n }\n break;\n case 'uk':\n if (!options.mobile) {\n numPick = this.pick([\n //valid area codes of major cities/counties followed by random numbers in required format.\n\n { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },\n { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },\n { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },\n { area: '024 7', sections: [3,4] },\n { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },\n { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },\n { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },\n { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },\n { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },\n { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },\n { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },\n { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },\n { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }\n ]);\n phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');\n } else {\n numPick = this.pick([\n { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },\n { area: '07624 ', sections: [6] }\n ]);\n phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');\n }\n break;\n case 'za':\n if (!options.mobile) {\n numPick = this.pick([\n '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),\n '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),\n '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),\n '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),\n '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),\n ]);\n phone = options.formatted || numPick;\n } else {\n numPick = this.pick([\n '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),\n '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),\n '06' + self.string({ pool: '0123456789', length: 7}),\n '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),\n '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),\n '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),\n ]);\n phone = options.formatted || numPick;\n }\n\n break;\n\n case 'us':\n var areacode = this.areacode(options).toString();\n var exchange = this.natural({ min: 2, max: 9 }).toString() +\n this.natural({ min: 0, max: 9 }).toString() +\n this.natural({ min: 0, max: 9 }).toString();\n var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}\n phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;\n }\n return phone;\n };\n\n Chance.prototype.postal = function () {\n // Postal District\n var pd = this.character({pool: \"XVTSRPNKLMHJGECBA\"});\n // Forward Sortation Area (FSA)\n var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: \"upper\"});\n // Local Delivery Unut (LDU)\n var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: \"upper\"}) + this.natural({max: 9});\n\n return fsa + \" \" + ldu;\n };\n\n Chance.prototype.counties = function (options) {\n options = initOptions(options, { country: 'uk' });\n return this.get(\"counties\")[options.country.toLowerCase()];\n };\n\n Chance.prototype.county = function (options) {\n return this.pick(this.counties(options)).name;\n };\n\n Chance.prototype.provinces = function (options) {\n options = initOptions(options, { country: 'ca' });\n return this.get(\"provinces\")[options.country.toLowerCase()];\n };\n\n Chance.prototype.province = function (options) {\n return (options && options.full) ?\n this.pick(this.provinces(options)).name :\n this.pick(this.provinces(options)).abbreviation;\n };\n\n Chance.prototype.state = function (options) {\n return (options && options.full) ?\n this.pick(this.states(options)).name :\n this.pick(this.states(options)).abbreviation;\n };\n\n Chance.prototype.states = function (options) {\n options = initOptions(options, { country: 'us', us_states_and_dc: true } );\n\n var states;\n\n switch (options.country.toLowerCase()) {\n case 'us':\n var us_states_and_dc = this.get(\"us_states_and_dc\"),\n territories = this.get(\"territories\"),\n armed_forces = this.get(\"armed_forces\");\n\n states = [];\n\n if (options.us_states_and_dc) {\n states = states.concat(us_states_and_dc);\n }\n if (options.territories) {\n states = states.concat(territories);\n }\n if (options.armed_forces) {\n states = states.concat(armed_forces);\n }\n break;\n case 'it':\n states = this.get(\"country_regions\")[options.country.toLowerCase()];\n break;\n case 'uk':\n states = this.get(\"counties\")[options.country.toLowerCase()];\n break;\n }\n\n return states;\n };\n\n Chance.prototype.street = function (options) {\n options = initOptions(options, { country: 'us', syllables: 2 });\n var street;\n\n switch (options.country.toLowerCase()) {\n case 'us':\n street = this.word({ syllables: options.syllables });\n street = this.capitalize(street);\n street += ' ';\n street += options.short_suffix ?\n this.street_suffix(options).abbreviation :\n this.street_suffix(options).name;\n break;\n case 'it':\n street = this.word({ syllables: options.syllables });\n street = this.capitalize(street);\n street = (options.short_suffix ?\n this.street_suffix(options).abbreviation :\n this.street_suffix(options).name) + \" \" + street;\n break;\n }\n return street;\n };\n\n Chance.prototype.street_suffix = function (options) {\n options = initOptions(options, { country: 'us' });\n return this.pick(this.street_suffixes(options));\n };\n\n Chance.prototype.street_suffixes = function (options) {\n options = initOptions(options, { country: 'us' });\n // These are the most common suffixes.\n return this.get(\"street_suffixes\")[options.country.toLowerCase()];\n };\n\n // Note: only returning US zip codes, internationalization will be a whole\n // other beast to tackle at some point.\n Chance.prototype.zip = function (options) {\n var zip = this.n(this.natural, 5, {max: 9});\n\n if (options && options.plusfour === true) {\n zip.push('-');\n zip = zip.concat(this.n(this.natural, 4, {max: 9}));\n }\n\n return zip.join(\"\");\n };\n\n // -- End Location --\n\n // -- Time\n\n Chance.prototype.ampm = function () {\n return this.bool() ? 'am' : 'pm';\n };\n\n Chance.prototype.date = function (options) {\n var date_string, date;\n\n // If interval is specified we ignore preset\n if(options && (options.min || options.max)) {\n options = initOptions(options, {\n american: true,\n string: false\n });\n var min = typeof options.min !== \"undefined\" ? options.min.getTime() : 1;\n // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1\n var max = typeof options.max !== \"undefined\" ? options.max.getTime() : 8640000000000000;\n\n date = new Date(this.integer({min: min, max: max}));\n } else {\n var m = this.month({raw: true});\n var daysInMonth = m.days;\n\n if(options && options.month) {\n // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).\n daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;\n }\n\n options = initOptions(options, {\n year: parseInt(this.year(), 10),\n // Necessary to subtract 1 because Date() 0-indexes month but not day or year\n // for some reason.\n month: m.numeric - 1,\n day: this.natural({min: 1, max: daysInMonth}),\n hour: this.hour({twentyfour: true}),\n minute: this.minute(),\n second: this.second(),\n millisecond: this.millisecond(),\n american: true,\n string: false\n });\n\n date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);\n }\n\n if (options.american) {\n // Adding 1 to the month is necessary because Date() 0-indexes\n // months but not day for some odd reason.\n date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();\n } else {\n date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();\n }\n\n return options.string ? date_string : date;\n };\n\n Chance.prototype.hammertime = function (options) {\n return this.date(options).getTime();\n };\n\n Chance.prototype.hour = function (options) {\n options = initOptions(options, {\n min: options && options.twentyfour ? 0 : 1,\n max: options && options.twentyfour ? 23 : 12\n });\n\n testRange(options.min < 0, \"Chance: Min cannot be less than 0.\");\n testRange(options.twentyfour && options.max > 23, \"Chance: Max cannot be greater than 23 for twentyfour option.\");\n testRange(!options.twentyfour && options.max > 12, \"Chance: Max cannot be greater than 12.\");\n testRange(options.min > options.max, \"Chance: Min cannot be greater than Max.\");\n\n return this.natural({min: options.min, max: options.max});\n };\n\n Chance.prototype.millisecond = function () {\n return this.natural({max: 999});\n };\n\n Chance.prototype.minute = Chance.prototype.second = function (options) {\n options = initOptions(options, {min: 0, max: 59});\n\n testRange(options.min < 0, \"Chance: Min cannot be less than 0.\");\n testRange(options.max > 59, \"Chance: Max cannot be greater than 59.\");\n testRange(options.min > options.max, \"Chance: Min cannot be greater than Max.\");\n\n return this.natural({min: options.min, max: options.max});\n };\n\n Chance.prototype.month = function (options) {\n options = initOptions(options, {min: 1, max: 12});\n\n testRange(options.min < 1, \"Chance: Min cannot be less than 1.\");\n testRange(options.max > 12, \"Chance: Max cannot be greater than 12.\");\n testRange(options.min > options.max, \"Chance: Min cannot be greater than Max.\");\n\n var month = this.pick(this.months().slice(options.min - 1, options.max));\n return options.raw ? month : month.name;\n };\n\n Chance.prototype.months = function () {\n return this.get(\"months\");\n };\n\n Chance.prototype.second = function () {\n return this.natural({max: 59});\n };\n\n Chance.prototype.timestamp = function () {\n return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});\n };\n\n Chance.prototype.weekday = function (options) {\n options = initOptions(options, {weekday_only: false});\n var weekdays = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\"];\n if (!options.weekday_only) {\n weekdays.push(\"Saturday\");\n weekdays.push(\"Sunday\");\n }\n return this.pickone(weekdays);\n };\n\n Chance.prototype.year = function (options) {\n // Default to current year as min if none specified\n options = initOptions(options, {min: new Date().getFullYear()});\n\n // Default to one century after current year as max if none specified\n options.max = (typeof options.max !== \"undefined\") ? options.max : options.min + 100;\n\n return this.natural(options).toString();\n };\n\n // -- End Time\n\n // -- Finance --\n\n Chance.prototype.cc = function (options) {\n options = initOptions(options);\n\n var type, number, to_generate;\n\n type = (options.type) ?\n this.cc_type({ name: options.type, raw: true }) :\n this.cc_type({ raw: true });\n\n number = type.prefix.split(\"\");\n to_generate = type.length - type.prefix.length - 1;\n\n // Generates n - 1 digits\n number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));\n\n // Generates the last digit according to Luhn algorithm\n number.push(this.luhn_calculate(number.join(\"\")));\n\n return number.join(\"\");\n };\n\n Chance.prototype.cc_types = function () {\n // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29\n return this.get(\"cc_types\");\n };\n\n Chance.prototype.cc_type = function (options) {\n options = initOptions(options);\n var types = this.cc_types(),\n type = null;\n\n if (options.name) {\n for (var i = 0; i < types.length; i++) {\n // Accept either name or short_name to specify card type\n if (types[i].name === options.name || types[i].short_name === options.name) {\n type = types[i];\n break;\n }\n }\n if (type === null) {\n throw new RangeError(\"Chance: Credit card type '\" + options.name + \"' is not supported\");\n }\n } else {\n type = this.pick(types);\n }\n\n return options.raw ? type : type.name;\n };\n\n // return all world currency by ISO 4217\n Chance.prototype.currency_types = function () {\n return this.get(\"currency_types\");\n };\n\n // return random world currency by ISO 4217\n Chance.prototype.currency = function () {\n return this.pick(this.currency_types());\n };\n\n // return all timezones available\n Chance.prototype.timezones = function () {\n return this.get(\"timezones\");\n };\n\n // return random timezone\n Chance.prototype.timezone = function () {\n return this.pick(this.timezones());\n };\n\n //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code\n Chance.prototype.currency_pair = function (returnAsString) {\n var currencies = this.unique(this.currency, 2, {\n comparator: function(arr, val) {\n\n return arr.reduce(function(acc, item) {\n // If a match has been found, short circuit check and just return\n return acc || (item.code === val.code);\n }, false);\n }\n });\n\n if (returnAsString) {\n return currencies[0].code + '/' + currencies[1].code;\n } else {\n return currencies;\n }\n };\n\n Chance.prototype.dollar = function (options) {\n // By default, a somewhat more sane max for dollar than all available numbers\n options = initOptions(options, {max : 10000, min : 0});\n\n var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),\n cents = dollar.split('.')[1];\n\n if (cents === undefined) {\n dollar += '.00';\n } else if (cents.length < 2) {\n dollar = dollar + '0';\n }\n\n if (dollar < 0) {\n return '-$' + dollar.replace('-', '');\n } else {\n return '$' + dollar;\n }\n };\n\n Chance.prototype.euro = function (options) {\n return Number(this.dollar(options).replace(\"$\", \"\")).toLocaleString() + \"€\";\n };\n\n Chance.prototype.exp = function (options) {\n options = initOptions(options);\n var exp = {};\n\n exp.year = this.exp_year();\n\n // If the year is this year, need to ensure month is greater than the\n // current month or this expiration will not be valid\n if (exp.year === (new Date().getFullYear()).toString()) {\n exp.month = this.exp_month({future: true});\n } else {\n exp.month = this.exp_month();\n }\n\n return options.raw ? exp : exp.month + '/' + exp.year;\n };\n\n Chance.prototype.exp_month = function (options) {\n options = initOptions(options);\n var month, month_int,\n // Date object months are 0 indexed\n curMonth = new Date().getMonth() + 1;\n\n if (options.future && (curMonth !== 12)) {\n do {\n month = this.month({raw: true}).numeric;\n month_int = parseInt(month, 10);\n } while (month_int <= curMonth);\n } else {\n month = this.month({raw: true}).numeric;\n }\n\n return month;\n };\n\n Chance.prototype.exp_year = function () {\n var curMonth = new Date().getMonth() + 1,\n curYear = new Date().getFullYear();\n\n return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});\n };\n\n Chance.prototype.vat = function (options) {\n options = initOptions(options, { country: 'it' });\n switch (options.country.toLowerCase()) {\n case 'it':\n return this.it_vat();\n }\n };\n\n /**\n * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).\n * No country-specific formats support (yet)\n */\n Chance.prototype.iban = function () {\n var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n var alphanum = alpha + '0123456789';\n var iban =\n this.string({ length: 2, pool: alpha }) +\n this.pad(this.integer({ min: 0, max: 99 }), 2) +\n this.string({ length: 4, pool: alphanum }) +\n this.pad(this.natural(), this.natural({ min: 6, max: 26 }));\n return iban;\n };\n\n // -- End Finance\n\n // -- Regional\n\n Chance.prototype.it_vat = function () {\n var it_vat = this.natural({min: 1, max: 1800000});\n\n it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);\n return it_vat + this.luhn_calculate(it_vat);\n };\n\n /*\n * this generator is written following the official algorithm\n * all data can be passed explicitely or randomized by calling chance.cf() without options\n * the code does not check that the input data is valid (it goes beyond the scope of the generator)\n *\n * @param [Object] options = { first: first name,\n * last: last name,\n * gender: female|male,\n birthday: JavaScript date object,\n city: string(4), 1 letter + 3 numbers\n }\n * @return [string] codice fiscale\n *\n */\n Chance.prototype.cf = function (options) {\n options = options || {};\n var gender = !!options.gender ? options.gender : this.gender(),\n first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),\n last = !!options.last ? options.last : this.last( { nationality: 'it'} ),\n birthday = !!options.birthday ? options.birthday : this.birthday(),\n 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),\n cf = [],\n name_generator = function(name, isLast) {\n var temp,\n return_value = [];\n\n if (name.length < 3) {\n return_value = name.split(\"\").concat(\"XXX\".split(\"\")).splice(0,3);\n }\n else {\n temp = name.toUpperCase().split('').map(function(c){\n return (\"BCDFGHJKLMNPRSTVWZ\".indexOf(c) !== -1) ? c : undefined;\n }).join('');\n if (temp.length > 3) {\n if (isLast) {\n temp = temp.substr(0,3);\n } else {\n temp = temp[0] + temp.substr(2,2);\n }\n }\n if (temp.length < 3) {\n return_value = temp;\n temp = name.toUpperCase().split('').map(function(c){\n return (\"AEIOU\".indexOf(c) !== -1) ? c : undefined;\n }).join('').substr(0, 3 - return_value.length);\n }\n return_value = return_value + temp;\n }\n\n return return_value;\n },\n date_generator = function(birthday, gender, that) {\n var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];\n\n return birthday.getFullYear().toString().substr(2) +\n lettermonths[birthday.getMonth()] +\n that.pad(birthday.getDate() + ((gender.toLowerCase() === \"female\") ? 40 : 0), 2);\n },\n checkdigit_generator = function(cf) {\n var range1 = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n range2 = \"ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n evens = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n odds = \"BAKPLCQDREVOSFTGUHMINJWZYX\",\n digit = 0;\n\n\n for(var i = 0; i < 15; i++) {\n if (i % 2 !== 0) {\n digit += evens.indexOf(range2[range1.indexOf(cf[i])]);\n }\n else {\n digit += odds.indexOf(range2[range1.indexOf(cf[i])]);\n }\n }\n return evens[digit % 26];\n };\n\n cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split(\"\")).join(\"\");\n cf += checkdigit_generator(cf.toUpperCase(), this);\n\n return cf.toUpperCase();\n };\n\n Chance.prototype.pl_pesel = function () {\n var number = this.natural({min: 1, max: 9999999999});\n var arr = this.pad(number, 10).split('');\n for (var i = 0; i < arr.length; i++) {\n arr[i] = parseInt(arr[i]);\n }\n\n 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;\n if(controlNumber !== 0) {\n controlNumber = 10 - controlNumber;\n }\n\n return arr.join('') + controlNumber;\n };\n\n Chance.prototype.pl_nip = function () {\n var number = this.natural({min: 1, max: 999999999});\n var arr = this.pad(number, 9).split('');\n for (var i = 0; i < arr.length; i++) {\n arr[i] = parseInt(arr[i]);\n }\n\n 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;\n if(controlNumber === 10) {\n return this.pl_nip();\n }\n\n return arr.join('') + controlNumber;\n };\n\n Chance.prototype.pl_regon = function () {\n var number = this.natural({min: 1, max: 99999999});\n var arr = this.pad(number, 8).split('');\n for (var i = 0; i < arr.length; i++) {\n arr[i] = parseInt(arr[i]);\n }\n\n 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;\n if(controlNumber === 10) {\n controlNumber = 0;\n }\n\n return arr.join('') + controlNumber;\n };\n\n // -- End Regional\n\n // -- Music --\n\n Chance.prototype.note = function(options) {\n // choices for 'notes' option:\n // flatKey - chromatic scale with flat notes (default)\n // sharpKey - chromatic scale with sharp notes\n // flats - just flat notes\n // sharps - just sharp notes\n // naturals - just natural notes\n // all - naturals, sharps and flats\n options = initOptions(options, { notes : 'flatKey'});\n var scales = {\n naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],\n flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],\n sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']\n };\n scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))\n scales.flatKey = scales.naturals.concat(scales.flats)\n scales.sharpKey = scales.naturals.concat(scales.sharps)\n return this.pickone(scales[options.notes]);\n }\n\n Chance.prototype.midi_note = function(options) {\n var min = 0;\n var max = 127;\n options = initOptions(options, { min : min, max : max });\n return this.integer({min: options.min, max: options.max});\n }\n\n Chance.prototype.chord_quality = function(options) {\n options = initOptions(options, { jazz: true });\n var chord_qualities = ['maj', 'min', 'aug', 'dim'];\n if (options.jazz){\n chord_qualities = [\n 'maj7',\n 'min7',\n '7',\n 'sus',\n 'dim',\n 'ø'\n ];\n }\n return this.pickone(chord_qualities);\n }\n\n Chance.prototype.chord = function (options) {\n options = initOptions(options);\n return this.note(options) + this.chord_quality(options);\n }\n\n Chance.prototype.tempo = function (options) {\n var min = 40;\n var max = 320;\n options = initOptions(options, {min: min, max: max});\n return this.integer({min: options.min, max: options.max});\n }\n\n // -- End Music\n\n // -- Miscellaneous --\n\n // Coin - Flip, flip, flipadelphia\n Chance.prototype.coin = function(options) {\n return this.bool() ? \"heads\" : \"tails\";\n }\n\n // Dice - For all the board game geeks out there, myself included ;)\n function diceFn (range) {\n return function () {\n return this.natural(range);\n };\n }\n Chance.prototype.d4 = diceFn({min: 1, max: 4});\n Chance.prototype.d6 = diceFn({min: 1, max: 6});\n Chance.prototype.d8 = diceFn({min: 1, max: 8});\n Chance.prototype.d10 = diceFn({min: 1, max: 10});\n Chance.prototype.d12 = diceFn({min: 1, max: 12});\n Chance.prototype.d20 = diceFn({min: 1, max: 20});\n Chance.prototype.d30 = diceFn({min: 1, max: 30});\n Chance.prototype.d100 = diceFn({min: 1, max: 100});\n\n Chance.prototype.rpg = function (thrown, options) {\n options = initOptions(options);\n if (!thrown) {\n throw new RangeError(\"Chance: A type of die roll must be included\");\n } else {\n var bits = thrown.toLowerCase().split(\"d\"),\n rolls = [];\n\n if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {\n 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\");\n }\n for (var i = bits[0]; i > 0; i--) {\n rolls[i - 1] = this.natural({min: 1, max: bits[1]});\n }\n return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;\n }\n };\n\n // Guid\n Chance.prototype.guid = function (options) {\n options = initOptions(options, { version: 5 });\n\n var guid_pool = \"abcdef1234567890\",\n variant_pool = \"ab89\",\n guid = this.string({ pool: guid_pool, length: 8 }) + '-' +\n this.string({ pool: guid_pool, length: 4 }) + '-' +\n // The Version\n options.version +\n this.string({ pool: guid_pool, length: 3 }) + '-' +\n // The Variant\n this.string({ pool: variant_pool, length: 1 }) +\n this.string({ pool: guid_pool, length: 3 }) + '-' +\n this.string({ pool: guid_pool, length: 12 });\n return guid;\n };\n\n // Hash\n Chance.prototype.hash = function (options) {\n options = initOptions(options, {length : 40, casing: 'lower'});\n var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;\n return this.string({pool: pool, length: options.length});\n };\n\n Chance.prototype.luhn_check = function (num) {\n var str = num.toString();\n var checkDigit = +str.substring(str.length - 1);\n return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));\n };\n\n Chance.prototype.luhn_calculate = function (num) {\n var digits = num.toString().split(\"\").reverse();\n var sum = 0;\n var digit;\n\n for (var i = 0, l = digits.length; l > i; ++i) {\n digit = +digits[i];\n if (i % 2 === 0) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n sum += digit;\n }\n return (sum * 9) % 10;\n };\n\n // MD5 Hash\n Chance.prototype.md5 = function(options) {\n var opts = { str: '', key: null, raw: false };\n\n if (!options) {\n opts.str = this.string();\n options = {};\n }\n else if (typeof options === 'string') {\n opts.str = options;\n options = {};\n }\n else if (typeof options !== 'object') {\n return null;\n }\n else if(options.constructor === 'Array') {\n return null;\n }\n\n opts = initOptions(options, opts);\n\n if(!opts.str){\n throw new Error('A parameter is required to return an md5 hash.');\n }\n\n return this.bimd5.md5(opts.str, opts.key, opts.raw);\n };\n\n /**\n * #Description:\n * =====================================================\n * Generate random file name with extension\n *\n * The argument provide extension type\n * -> raster\n * -> vector\n * -> 3d\n * -> document\n *\n * If nothing is provided the function return random file name with random\n * extension type of any kind\n *\n * The user can validate the file name length range\n * If nothing provided the generated file name is random\n *\n * #Extension Pool :\n * * Currently the supported extensions are\n * -> some of the most popular raster image extensions\n * -> some of the most popular vector image extensions\n * -> some of the most popular 3d image extensions\n * -> some of the most popular document extensions\n *\n * #Examples :\n * =====================================================\n *\n * Return random file name with random extension. The file extension\n * is provided by a predefined collection of extensions. More about the extension\n * pool can be found in #Extension Pool section\n *\n * chance.file()\n * => dsfsdhjf.xml\n *\n * In order to generate a file name with specific length, specify the\n * length property and integer value. The extension is going to be random\n *\n * chance.file({length : 10})\n * => asrtineqos.pdf\n *\n * In order to generate file with extension from some of the predefined groups\n * of the extension pool just specify the extension pool category in fileType property\n *\n * chance.file({fileType : 'raster'})\n * => dshgssds.psd\n *\n * You can provide specific extension for your files\n * chance.file({extension : 'html'})\n * => djfsd.html\n *\n * Or you could pass custom collection of extensions by array or by object\n * chance.file({extensions : [...]})\n * => dhgsdsd.psd\n *\n * chance.file({extensions : { key : [...], key : [...]}})\n * => djsfksdjsd.xml\n *\n * @param [collection] options\n * @return [string]\n *\n */\n Chance.prototype.file = function(options) {\n\n var fileOptions = options || {};\n var poolCollectionKey = \"fileExtension\";\n var typeRange = Object.keys(this.get(\"fileExtension\"));//['raster', 'vector', '3d', 'document'];\n var fileName;\n var fileExtension;\n\n // Generate random file name\n fileName = this.word({length : fileOptions.length});\n\n // Generate file by specific extension provided by the user\n if(fileOptions.extension) {\n\n fileExtension = fileOptions.extension;\n return (fileName + '.' + fileExtension);\n }\n\n // Generate file by specific extension collection\n if(fileOptions.extensions) {\n\n if(Array.isArray(fileOptions.extensions)) {\n\n fileExtension = this.pickone(fileOptions.extensions);\n return (fileName + '.' + fileExtension);\n }\n else if(fileOptions.extensions.constructor === Object) {\n\n var extensionObjectCollection = fileOptions.extensions;\n var keys = Object.keys(extensionObjectCollection);\n\n fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);\n return (fileName + '.' + fileExtension);\n }\n\n throw new Error(\"Chance: Extensions must be an Array or Object\");\n }\n\n // Generate file extension based on specific file type\n if(fileOptions.fileType) {\n\n var fileType = fileOptions.fileType;\n if(typeRange.indexOf(fileType) !== -1) {\n\n fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);\n return (fileName + '.' + fileExtension);\n }\n\n throw new RangeError(\"Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'\");\n }\n\n // Generate random file name if no extension options are passed\n fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);\n return (fileName + '.' + fileExtension);\n };\n\n var data = {\n\n firstNames: {\n \"male\": {\n \"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\"],\n // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163\n \"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\"],\n // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html\n \"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\"]\n },\n\n \"female\": {\n \"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\"],\n // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162\n \"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\"],\n // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html\n \"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ë\"]\n }\n },\n\n lastNames: {\n \"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'],\n // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)\n \"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\"],\n // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/\n \"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\"]\n },\n\n // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json\n 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\"}],\n\n counties: {\n // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk\n \"uk\": [\n {name: 'Bath and North East Somerset'},\n {name: 'Aberdeenshire'},\n {name: 'Anglesey'},\n {name: 'Angus'},\n {name: 'Bedford'},\n {name: 'Blackburn with Darwen'},\n {name: 'Blackpool'},\n {name: 'Bournemouth'},\n {name: 'Bracknell Forest'},\n {name: 'Brighton & Hove'},\n {name: 'Bristol'},\n {name: 'Buckinghamshire'},\n {name: 'Cambridgeshire'},\n {name: 'Carmarthenshire'},\n {name: 'Central Bedfordshire'},\n {name: 'Ceredigion'},\n {name: 'Cheshire East'},\n {name: 'Cheshire West and Chester'},\n {name: 'Clackmannanshire'},\n {name: 'Conwy'},\n {name: 'Cornwall'},\n {name: 'County Antrim'},\n {name: 'County Armagh'},\n {name: 'County Down'},\n {name: 'County Durham'},\n {name: 'County Fermanagh'},\n {name: 'County Londonderry'},\n {name: 'County Tyrone'},\n {name: 'Cumbria'},\n {name: 'Darlington'},\n {name: 'Denbighshire'},\n {name: 'Derby'},\n {name: 'Derbyshire'},\n {name: 'Devon'},\n {name: 'Dorset'},\n {name: 'Dumfries and Galloway'},\n {name: 'Dundee'},\n {name: 'East Lothian'},\n {name: 'East Riding of Yorkshire'},\n {name: 'East Sussex'},\n {name: 'Edinburgh?'},\n {name: 'Essex'},\n {name: 'Falkirk'},\n {name: 'Fife'},\n {name: 'Flintshire'},\n {name: 'Gloucestershire'},\n {name: 'Greater London'},\n {name: 'Greater Manchester'},\n {name: 'Gwent'},\n {name: 'Gwynedd'},\n {name: 'Halton'},\n {name: 'Hampshire'},\n {name: 'Hartlepool'},\n {name: 'Herefordshire'},\n {name: 'Hertfordshire'},\n {name: 'Highlands'},\n {name: 'Hull'},\n {name: 'Isle of Wight'},\n {name: 'Isles of Scilly'},\n {name: 'Kent'},\n {name: 'Lancashire'},\n {name: 'Leicester'},\n {name: 'Leicestershire'},\n {name: 'Lincolnshire'},\n {name: 'Lothian'},\n {name: 'Luton'},\n {name: 'Medway'},\n {name: 'Merseyside'},\n {name: 'Mid Glamorgan'},\n {name: 'Middlesbrough'},\n {name: 'Milton Keynes'},\n {name: 'Monmouthshire'},\n {name: 'Moray'},\n {name: 'Norfolk'},\n {name: 'North East Lincolnshire'},\n {name: 'North Lincolnshire'},\n {name: 'North Somerset'},\n {name: 'North Yorkshire'},\n {name: 'Northamptonshire'},\n {name: 'Northumberland'},\n {name: 'Nottingham'},\n {name: 'Nottinghamshire'},\n {name: 'Oxfordshire'},\n {name: 'Pembrokeshire'},\n {name: 'Perth and Kinross'},\n {name: 'Peterborough'},\n {name: 'Plymouth'},\n {name: 'Poole'},\n {name: 'Portsmouth'},\n {name: 'Powys'},\n {name: 'Reading'},\n {name: 'Redcar and Cleveland'},\n {name: 'Rutland'},\n {name: 'Scottish Borders'},\n {name: 'Shropshire'},\n {name: 'Slough'},\n {name: 'Somerset'},\n {name: 'South Glamorgan'},\n {name: 'South Gloucestershire'},\n {name: 'South Yorkshire'},\n {name: 'Southampton'},\n {name: 'Southend-on-Sea'},\n {name: 'Staffordshire'},\n {name: 'Stirlingshire'},\n {name: 'Stockton-on-Tees'},\n {name: 'Stoke-on-Trent'},\n {name: 'Strathclyde'},\n {name: 'Suffolk'},\n {name: 'Surrey'},\n {name: 'Swindon'},\n {name: 'Telford and Wrekin'},\n {name: 'Thurrock'},\n {name: 'Torbay'},\n {name: 'Tyne and Wear'},\n {name: 'Warrington'},\n {name: 'Warwickshire'},\n {name: 'West Berkshire'},\n {name: 'West Glamorgan'},\n {name: 'West Lothian'},\n {name: 'West Midlands'},\n {name: 'West Sussex'},\n {name: 'West Yorkshire'},\n {name: 'Western Isles'},\n {name: 'Wiltshire'},\n {name: 'Windsor and Maidenhead'},\n {name: 'Wokingham'},\n {name: 'Worcestershire'},\n {name: 'Wrexham'},\n {name: 'York'}]\n },\n provinces: {\n \"ca\": [\n {name: 'Alberta', abbreviation: 'AB'},\n {name: 'British Columbia', abbreviation: 'BC'},\n {name: 'Manitoba', abbreviation: 'MB'},\n {name: 'New Brunswick', abbreviation: 'NB'},\n {name: 'Newfoundland and Labrador', abbreviation: 'NL'},\n {name: 'Nova Scotia', abbreviation: 'NS'},\n {name: 'Ontario', abbreviation: 'ON'},\n {name: 'Prince Edward Island', abbreviation: 'PE'},\n {name: 'Quebec', abbreviation: 'QC'},\n {name: 'Saskatchewan', abbreviation: 'SK'},\n\n // The case could be made that the following are not actually provinces\n // since they are technically considered \"territories\" however they all\n // look the same on an envelope!\n {name: 'Northwest Territories', abbreviation: 'NT'},\n {name: 'Nunavut', abbreviation: 'NU'},\n {name: 'Yukon', abbreviation: 'YT'}\n ],\n \"it\": [\n { name: \"Agrigento\", abbreviation: \"AG\", code: 84 },\n { name: \"Alessandria\", abbreviation: \"AL\", code: 6 },\n { name: \"Ancona\", abbreviation: \"AN\", code: 42 },\n { name: \"Aosta\", abbreviation: \"AO\", code: 7 },\n { name: \"L'Aquila\", abbreviation: \"AQ\", code: 66 },\n { name: \"Arezzo\", abbreviation: \"AR\", code: 51 },\n { name: \"Ascoli-Piceno\", abbreviation: \"AP\", code: 44 },\n { name: \"Asti\", abbreviation: \"AT\", code: 5 },\n { name: \"Avellino\", abbreviation: \"AV\", code: 64 },\n { name: \"Bari\", abbreviation: \"BA\", code: 72 },\n { name: \"Barletta-Andria-Trani\", abbreviation: \"BT\", code: 72 },\n { name: \"Belluno\", abbreviation: \"BL\", code: 25 },\n { name: \"Benevento\", abbreviation: \"BN\", code: 62 },\n { name: \"Bergamo\", abbreviation: \"BG\", code: 16 },\n { name: \"Biella\", abbreviation: \"BI\", code: 96 },\n { name: \"Bologna\", abbreviation: \"BO\", code: 37 },\n { name: \"Bolzano\", abbreviation: \"BZ\", code: 21 },\n { name: \"Brescia\", abbreviation: \"BS\", code: 17 },\n { name: \"Brindisi\", abbreviation: \"BR\", code: 74 },\n { name: \"Cagliari\", abbreviation: \"CA\", code: 92 },\n { name: \"Caltanissetta\", abbreviation: \"CL\", code: 85 },\n { name: \"Campobasso\", abbreviation: \"CB\", code: 70 },\n { name: \"Carbonia Iglesias\", abbreviation: \"CI\", code: 70 },\n { name: \"Caserta\", abbreviation: \"CE\", code: 61 },\n { name: \"Catania\", abbreviation: \"CT\", code: 87 },\n { name: \"Catanzaro\", abbreviation: \"CZ\", code: 79 },\n { name: \"Chieti\", abbreviation: \"CH\", code: 69 },\n { name: \"Como\", abbreviation: \"CO\", code: 13 },\n { name: \"Cosenza\", abbreviation: \"CS\", code: 78 },\n { name: \"Cremona\", abbreviation: \"CR\", code: 19 },\n { name: \"Crotone\", abbreviation: \"KR\", code: 101 },\n { name: \"Cuneo\", abbreviation: \"CN\", code: 4 },\n { name: \"Enna\", abbreviation: \"EN\", code: 86 },\n { name: \"Fermo\", abbreviation: \"FM\", code: 86 },\n { name: \"Ferrara\", abbreviation: \"FE\", code: 38 },\n { name: \"Firenze\", abbreviation: \"FI\", code: 48 },\n { name: \"Foggia\", abbreviation: \"FG\", code: 71 },\n { name: \"Forli-Cesena\", abbreviation: \"FC\", code: 71 },\n { name: \"Frosinone\", abbreviation: \"FR\", code: 60 },\n { name: \"Genova\", abbreviation: \"GE\", code: 10 },\n { name: \"Gorizia\", abbreviation: \"GO\", code: 31 },\n { name: \"Grosseto\", abbreviation: \"GR\", code: 53 },\n { name: \"Imperia\", abbreviation: \"IM\", code: 8 },\n { name: \"Isernia\", abbreviation: \"IS\", code: 94 },\n { name: \"La-Spezia\", abbreviation: \"SP\", code: 66 },\n { name: \"Latina\", abbreviation: \"LT\", code: 59 },\n { name: \"Lecce\", abbreviation: \"LE\", code: 75 },\n { name: \"Lecco\", abbreviation: \"LC\", code: 97 },\n { name: \"Livorno\", abbreviation: \"LI\", code: 49 },\n { name: \"Lodi\", abbreviation: \"LO\", code: 98 },\n { name: \"Lucca\", abbreviation: \"LU\", code: 46 },\n { name: \"Macerata\", abbreviation: \"MC\", code: 43 },\n { name: \"Mantova\", abbreviation: \"MN\", code: 20 },\n { name: \"Massa-Carrara\", abbreviation: \"MS\", code: 45 },\n { name: \"Matera\", abbreviation: \"MT\", code: 77 },\n { name: \"Medio Campidano\", abbreviation: \"VS\", code: 77 },\n { name: \"Messina\", abbreviation: \"ME\", code: 83 },\n { name: \"Milano\", abbreviation: \"MI\", code: 15 },\n { name: \"Modena\", abbreviation: \"MO\", code: 36 },\n { name: \"Monza-Brianza\", abbreviation: \"MB\", code: 36 },\n { name: \"Napoli\", abbreviation: \"NA\", code: 63 },\n { name: \"Novara\", abbreviation: \"NO\", code: 3 },\n { name: \"Nuoro\", abbreviation: \"NU\", code: 91 },\n { name: \"Ogliastra\", abbreviation: \"OG\", code: 91 },\n { name: \"Olbia Tempio\", abbreviation: \"OT\", code: 91 },\n { name: \"Oristano\", abbreviation: \"OR\", code: 95 },\n { name: \"Padova\", abbreviation: \"PD\", code: 28 },\n { name: \"Palermo\", abbreviation: \"PA\", code: 82 },\n { name: \"Parma\", abbreviation: \"PR\", code: 34 },\n { name: \"Pavia\", abbreviation: \"PV\", code: 18 },\n { name: \"Perugia\", abbreviation: \"PG\", code: 54 },\n { name: \"Pesaro-Urbino\", abbreviation: \"PU\", code: 41 },\n { name: \"Pescara\", abbreviation: \"PE\", code: 68 },\n { name: \"Piacenza\", abbreviation: \"PC\", code: 33 },\n { name: \"Pisa\", abbreviation: \"PI\", code: 50 },\n { name: \"Pistoia\", abbreviation: \"PT\", code: 47 },\n { name: \"Pordenone\", abbreviation: \"PN\", code: 93 },\n { name: \"Potenza\", abbreviation: \"PZ\", code: 76 },\n { name: \"Prato\", abbreviation: \"PO\", code: 100 },\n { name: \"Ragusa\", abbreviation: \"RG\", code: 88 },\n { name: \"Ravenna\", abbreviation: \"RA\", code: 39 },\n { name: \"Reggio-Calabria\", abbreviation: \"RC\", code: 35 },\n { name: \"Reggio-Emilia\", abbreviation: \"RE\", code: 35 },\n { name: \"Rieti\", abbreviation: \"RI\", code: 57 },\n { name: \"Rimini\", abbreviation: \"RN\", code: 99 },\n { name: \"Roma\", abbreviation: \"Roma\", code: 58 },\n { name: \"Rovigo\", abbreviation: \"RO\", code: 29 },\n { name: \"Salerno\", abbreviation: \"SA\", code: 65 },\n { name: \"Sassari\", abbreviation: \"SS\", code: 90 },\n { name: \"Savona\", abbreviation: \"SV\", code: 9 },\n { name: \"Siena\", abbreviation: \"SI\", code: 52 },\n { name: \"Siracusa\", abbreviation: \"SR\", code: 89 },\n { name: \"Sondrio\", abbreviation: \"SO\", code: 14 },\n { name: \"Taranto\", abbreviation: \"TA\", code: 73 },\n { name: \"Teramo\", abbreviation: \"TE\", code: 67 },\n { name: \"Terni\", abbreviation: \"TR\", code: 55 },\n { name: \"Torino\", abbreviation: \"TO\", code: 1 },\n { name: \"Trapani\", abbreviation: \"TP\", code: 81 },\n { name: \"Trento\", abbreviation: \"TN\", code: 22 },\n { name: \"Treviso\", abbreviation: \"TV\", code: 26 },\n { name: \"Trieste\", abbreviation: \"TS\", code: 32 },\n { name: \"Udine\", abbreviation: \"UD\", code: 30 },\n { name: \"Varese\", abbreviation: \"VA\", code: 12 },\n { name: \"Venezia\", abbreviation: \"VE\", code: 27 },\n { name: \"Verbania\", abbreviation: \"VB\", code: 27 },\n { name: \"Vercelli\", abbreviation: \"VC\", code: 2 },\n { name: \"Verona\", abbreviation: \"VR\", code: 23 },\n { name: \"Vibo-Valentia\", abbreviation: \"VV\", code: 102 },\n { name: \"Vicenza\", abbreviation: \"VI\", code: 24 },\n { name: \"Viterbo\", abbreviation: \"VT\", code: 56 }\n ]\n },\n\n // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json\n nationalities: [\n {name: 'Afghan'},\n {name: 'Albanian'},\n {name: 'Algerian'},\n {name: 'American'},\n {name: 'Andorran'},\n {name: 'Angolan'},\n {name: 'Antiguans'},\n {name: 'Argentinean'},\n {name: 'Armenian'},\n {name: 'Australian'},\n {name: 'Austrian'},\n {name: 'Azerbaijani'},\n {name: 'Bahami'},\n {name: 'Bahraini'},\n {name: 'Bangladeshi'},\n {name: 'Barbadian'},\n {name: 'Barbudans'},\n {name: 'Batswana'},\n {name: 'Belarusian'},\n {name: 'Belgian'},\n {name: 'Belizean'},\n {name: 'Beninese'},\n {name: 'Bhutanese'},\n {name: 'Bolivian'},\n {name: 'Bosnian'},\n {name: 'Brazilian'},\n {name: 'British'},\n {name: 'Bruneian'},\n {name: 'Bulgarian'},\n {name: 'Burkinabe'},\n {name: 'Burmese'},\n {name: 'Burundian'},\n {name: 'Cambodian'},\n {name: 'Cameroonian'},\n {name: 'Canadian'},\n {name: 'Cape Verdean'},\n {name: 'Central African'},\n {name: 'Chadian'},\n {name: 'Chilean'},\n {name: 'Chinese'},\n {name: 'Colombian'},\n {name: 'Comoran'},\n {name: 'Congolese'},\n {name: 'Costa Rican'},\n {name: 'Croatian'},\n {name: 'Cuban'},\n {name: 'Cypriot'},\n {name: 'Czech'},\n {name: 'Danish'},\n {name: 'Djibouti'},\n {name: 'Dominican'},\n {name: 'Dutch'},\n {name: 'East Timorese'},\n {name: 'Ecuadorean'},\n {name: 'Egyptian'},\n {name: 'Emirian'},\n {name: 'Equatorial Guinean'},\n {name: 'Eritrean'},\n {name: 'Estonian'},\n {name: 'Ethiopian'},\n {name: 'Fijian'},\n {name: 'Filipino'},\n {name: 'Finnish'},\n {name: 'French'},\n {name: 'Gabonese'},\n {name: 'Gambian'},\n {name: 'Georgian'},\n {name: 'German'},\n {name: 'Ghanaian'},\n {name: 'Greek'},\n {name: 'Grenadian'},\n {name: 'Guatemalan'},\n {name: 'Guinea-Bissauan'},\n {name: 'Guinean'},\n {name: 'Guyanese'},\n {name: 'Haitian'},\n {name: 'Herzegovinian'},\n {name: 'Honduran'},\n {name: 'Hungarian'},\n {name: 'I-Kiribati'},\n {name: 'Icelander'},\n {name: 'Indian'},\n {name: 'Indonesian'},\n {name: 'Iranian'},\n {name: 'Iraqi'},\n {name: 'Irish'},\n {name: 'Israeli'},\n {name: 'Italian'},\n {name: 'Ivorian'},\n {name: 'Jamaican'},\n {name: 'Japanese'},\n {name: 'Jordanian'},\n {name: 'Kazakhstani'},\n {name: 'Kenyan'},\n {name: 'Kittian and Nevisian'},\n {name: 'Kuwaiti'},\n {name: 'Kyrgyz'},\n {name: 'Laotian'},\n {name: 'Latvian'},\n {name: 'Lebanese'},\n {name: 'Liberian'},\n {name: 'Libyan'},\n {name: 'Liechtensteiner'},\n {name: 'Lithuanian'},\n {name: 'Luxembourger'},\n {name: 'Macedonian'},\n {name: 'Malagasy'},\n {name: 'Malawian'},\n {name: 'Malaysian'},\n {name: 'Maldivan'},\n {name: 'Malian'},\n {name: 'Maltese'},\n {name: 'Marshallese'},\n {name: 'Mauritanian'},\n {name: 'Mauritian'},\n {name: 'Mexican'},\n {name: 'Micronesian'},\n {name: 'Moldovan'},\n {name: 'Monacan'},\n {name: 'Mongolian'},\n {name: 'Moroccan'},\n {name: 'Mosotho'},\n {name: 'Motswana'},\n {name: 'Mozambican'},\n {name: 'Namibian'},\n {name: 'Nauruan'},\n {name: 'Nepalese'},\n {name: 'New Zealander'},\n {name: 'Nicaraguan'},\n {name: 'Nigerian'},\n {name: 'Nigerien'},\n {name: 'North Korean'},\n {name: 'Northern Irish'},\n {name: 'Norwegian'},\n {name: 'Omani'},\n {name: 'Pakistani'},\n {name: 'Palauan'},\n {name: 'Panamanian'},\n {name: 'Papua New Guinean'},\n {name: 'Paraguayan'},\n {name: 'Peruvian'},\n {name: 'Polish'},\n {name: 'Portuguese'},\n {name: 'Qatari'},\n {name: 'Romani'},\n {name: 'Russian'},\n {name: 'Rwandan'},\n {name: 'Saint Lucian'},\n {name: 'Salvadoran'},\n {name: 'Samoan'},\n {name: 'San Marinese'},\n {name: 'Sao Tomean'},\n {name: 'Saudi'},\n {name: 'Scottish'},\n {name: 'Senegalese'},\n {name: 'Serbian'},\n {name: 'Seychellois'},\n {name: 'Sierra Leonean'},\n {name: 'Singaporean'},\n {name: 'Slovakian'},\n {name: 'Slovenian'},\n {name: 'Solomon Islander'},\n {name: 'Somali'},\n {name: 'South African'},\n {name: 'South Korean'},\n {name: 'Spanish'},\n {name: 'Sri Lankan'},\n {name: 'Sudanese'},\n {name: 'Surinamer'},\n {name: 'Swazi'},\n {name: 'Swedish'},\n {name: 'Swiss'},\n {name: 'Syrian'},\n {name: 'Taiwanese'},\n {name: 'Tajik'},\n {name: 'Tanzanian'},\n {name: 'Thai'},\n {name: 'Togolese'},\n {name: 'Tongan'},\n {name: 'Trinidadian or Tobagonian'},\n {name: 'Tunisian'},\n {name: 'Turkish'},\n {name: 'Tuvaluan'},\n {name: 'Ugandan'},\n {name: 'Ukrainian'},\n {name: 'Uruguaya'},\n {name: 'Uzbekistani'},\n {name: 'Venezuela'},\n {name: 'Vietnamese'},\n {name: 'Wels'},\n {name: 'Yemenit'},\n {name: 'Zambia'},\n {name: 'Zimbabwe'},\n ],\n // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)\n locale_languages: [\n \"aa\",\n \"ab\",\n \"ae\",\n \"af\",\n \"ak\",\n \"am\",\n \"an\",\n \"ar\",\n \"as\",\n \"av\",\n \"ay\",\n \"az\",\n \"ba\",\n \"be\",\n \"bg\",\n \"bh\",\n \"bi\",\n \"bm\",\n \"bn\",\n \"bo\",\n \"br\",\n \"bs\",\n \"ca\",\n \"ce\",\n \"ch\",\n \"co\",\n \"cr\",\n \"cs\",\n \"cu\",\n \"cv\",\n \"cy\",\n \"da\",\n \"de\",\n \"dv\",\n \"dz\",\n \"ee\",\n \"el\",\n \"en\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"fa\",\n \"ff\",\n \"fi\",\n \"fj\",\n \"fo\",\n \"fr\",\n \"fy\",\n \"ga\",\n \"gd\",\n \"gl\",\n \"gn\",\n \"gu\",\n \"gv\",\n \"ha\",\n \"he\",\n \"hi\",\n \"ho\",\n \"hr\",\n \"ht\",\n \"hu\",\n \"hy\",\n \"hz\",\n \"ia\",\n \"id\",\n \"ie\",\n \"ig\",\n \"ii\",\n \"ik\",\n \"io\",\n \"is\",\n \"it\",\n \"iu\",\n \"ja\",\n \"jv\",\n \"ka\",\n \"kg\",\n \"ki\",\n \"kj\",\n \"kk\",\n \"kl\",\n \"km\",\n \"kn\",\n \"ko\",\n \"kr\",\n \"ks\",\n \"ku\",\n \"kv\",\n \"kw\",\n \"ky\",\n \"la\",\n \"lb\",\n \"lg\",\n \"li\",\n \"ln\",\n \"lo\",\n \"lt\",\n \"lu\",\n \"lv\",\n \"mg\",\n \"mh\",\n \"mi\",\n \"mk\",\n \"ml\",\n \"mn\",\n \"mr\",\n \"ms\",\n \"mt\",\n \"my\",\n \"na\",\n \"nb\",\n \"nd\",\n \"ne\",\n \"ng\",\n \"nl\",\n \"nn\",\n \"no\",\n \"nr\",\n \"nv\",\n \"ny\",\n \"oc\",\n \"oj\",\n \"om\",\n \"or\",\n \"os\",\n \"pa\",\n \"pi\",\n \"pl\",\n \"ps\",\n \"pt\",\n \"qu\",\n \"rm\",\n \"rn\",\n \"ro\",\n \"ru\",\n \"rw\",\n \"sa\",\n \"sc\",\n \"sd\",\n \"se\",\n \"sg\",\n \"si\",\n \"sk\",\n \"sl\",\n \"sm\",\n \"sn\",\n \"so\",\n \"sq\",\n \"sr\",\n \"ss\",\n \"st\",\n \"su\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tg\",\n \"th\",\n \"ti\",\n \"tk\",\n \"tl\",\n \"tn\",\n \"to\",\n \"tr\",\n \"ts\",\n \"tt\",\n \"tw\",\n \"ty\",\n \"ug\",\n \"uk\",\n \"ur\",\n \"uz\",\n \"ve\",\n \"vi\",\n \"vo\",\n \"wa\",\n \"wo\",\n \"xh\",\n \"yi\",\n \"yo\",\n \"za\",\n \"zh\",\n \"zu\"\n ],\n\n // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)\n locale_regions: [\n \"agq-CM\",\n \"asa-TZ\",\n \"ast-ES\",\n \"bas-CM\",\n \"bem-ZM\",\n \"bez-TZ\",\n \"brx-IN\",\n \"cgg-UG\",\n \"chr-US\",\n \"dav-KE\",\n \"dje-NE\",\n \"dsb-DE\",\n \"dua-CM\",\n \"dyo-SN\",\n \"ebu-KE\",\n \"ewo-CM\",\n \"fil-PH\",\n \"fur-IT\",\n \"gsw-CH\",\n \"gsw-FR\",\n \"gsw-LI\",\n \"guz-KE\",\n \"haw-US\",\n \"hsb-DE\",\n \"jgo-CM\",\n \"jmc-TZ\",\n \"kab-DZ\",\n \"kam-KE\",\n \"kde-TZ\",\n \"kea-CV\",\n \"khq-ML\",\n \"kkj-CM\",\n \"kln-KE\",\n \"kok-IN\",\n \"ksb-TZ\",\n \"ksf-CM\",\n \"ksh-DE\",\n \"lag-TZ\",\n \"lkt-US\",\n \"luo-KE\",\n \"luy-KE\",\n \"mas-KE\",\n \"mas-TZ\",\n \"mer-KE\",\n \"mfe-MU\",\n \"mgh-MZ\",\n \"mgo-CM\",\n \"mua-CM\",\n \"naq-NA\",\n \"nmg-CM\",\n \"nnh-CM\",\n \"nus-SD\",\n \"nyn-UG\",\n \"rof-TZ\",\n \"rwk-TZ\",\n \"sah-RU\",\n \"saq-KE\",\n \"sbp-TZ\",\n \"seh-MZ\",\n \"ses-ML\",\n \"shi-Latn\",\n \"shi-Latn-MA\",\n \"shi-Tfng\",\n \"shi-Tfng-MA\",\n \"smn-FI\",\n \"teo-KE\",\n \"teo-UG\",\n \"twq-NE\",\n \"tzm-Latn\",\n \"tzm-Latn-MA\",\n \"vai-Latn\",\n \"vai-Latn-LR\",\n \"vai-Vaii\",\n \"vai-Vaii-LR\",\n \"vun-TZ\",\n \"wae-CH\",\n \"xog-UG\",\n \"yav-CM\",\n \"zgh-MA\",\n \"af-NA\",\n \"af-ZA\",\n \"ak-GH\",\n \"am-ET\",\n \"ar-001\",\n \"ar-AE\",\n \"ar-BH\",\n \"ar-DJ\",\n \"ar-DZ\",\n \"ar-EG\",\n \"ar-EH\",\n \"ar-ER\",\n \"ar-IL\",\n \"ar-IQ\",\n \"ar-JO\",\n \"ar-KM\",\n \"ar-KW\",\n \"ar-LB\",\n \"ar-LY\",\n \"ar-MA\",\n \"ar-MR\",\n \"ar-OM\",\n \"ar-PS\",\n \"ar-QA\",\n \"ar-SA\",\n \"ar-SD\",\n \"ar-SO\",\n \"ar-SS\",\n \"ar-SY\",\n \"ar-TD\",\n \"ar-TN\",\n \"ar-YE\",\n \"as-IN\",\n \"az-Cyrl\",\n \"az-Cyrl-AZ\",\n \"az-Latn\",\n \"az-Latn-AZ\",\n \"be-BY\",\n \"bg-BG\",\n \"bm-Latn\",\n \"bm-Latn-ML\",\n \"bn-BD\",\n \"bn-IN\",\n \"bo-CN\",\n \"bo-IN\",\n \"br-FR\",\n \"bs-Cyrl\",\n \"bs-Cyrl-BA\",\n \"bs-Latn\",\n \"bs-Latn-BA\",\n \"ca-AD\",\n \"ca-ES\",\n \"ca-ES-VALENCIA\",\n \"ca-FR\",\n \"ca-IT\",\n \"cs-CZ\",\n \"cy-GB\",\n \"da-DK\",\n \"da-GL\",\n \"de-AT\",\n \"de-BE\",\n \"de-CH\",\n \"de-DE\",\n \"de-LI\",\n \"de-LU\",\n \"dz-BT\",\n \"ee-GH\",\n \"ee-TG\",\n \"el-CY\",\n \"el-GR\",\n \"en-001\",\n \"en-150\",\n \"en-AG\",\n \"en-AI\",\n \"en-AS\",\n \"en-AU\",\n \"en-BB\",\n \"en-BE\",\n \"en-BM\",\n \"en-BS\",\n \"en-BW\",\n \"en-BZ\",\n \"en-CA\",\n \"en-CC\",\n \"en-CK\",\n \"en-CM\",\n \"en-CX\",\n \"en-DG\",\n \"en-DM\",\n \"en-ER\",\n \"en-FJ\",\n \"en-FK\",\n \"en-FM\",\n \"en-GB\",\n \"en-GD\",\n \"en-GG\",\n \"en-GH\",\n \"en-GI\",\n \"en-GM\",\n \"en-GU\",\n \"en-GY\",\n \"en-HK\",\n \"en-IE\",\n \"en-IM\",\n \"en-IN\",\n \"en-IO\",\n \"en-JE\",\n \"en-JM\",\n \"en-KE\",\n \"en-KI\",\n \"en-KN\",\n \"en-KY\",\n \"en-LC\",\n \"en-LR\",\n \"en-LS\",\n \"en-MG\",\n \"en-MH\",\n \"en-MO\",\n \"en-MP\",\n \"en-MS\",\n \"en-MT\",\n \"en-MU\",\n \"en-MW\",\n \"en-MY\",\n \"en-NA\",\n \"en-NF\",\n \"en-NG\",\n \"en-NR\",\n \"en-NU\",\n \"en-NZ\",\n \"en-PG\",\n \"en-PH\",\n \"en-PK\",\n \"en-PN\",\n \"en-PR\",\n \"en-PW\",\n \"en-RW\",\n \"en-SB\",\n \"en-SC\",\n \"en-SD\",\n \"en-SG\",\n \"en-SH\",\n \"en-SL\",\n \"en-SS\",\n \"en-SX\",\n \"en-SZ\",\n \"en-TC\",\n \"en-TK\",\n \"en-TO\",\n \"en-TT\",\n \"en-TV\",\n \"en-TZ\",\n \"en-UG\",\n \"en-UM\",\n \"en-US\",\n \"en-US-POSIX\",\n \"en-VC\",\n \"en-VG\",\n \"en-VI\",\n \"en-VU\",\n \"en-WS\",\n \"en-ZA\",\n \"en-ZM\",\n \"en-ZW\",\n \"eo-001\",\n \"es-419\",\n \"es-AR\",\n \"es-BO\",\n \"es-CL\",\n \"es-CO\",\n \"es-CR\",\n \"es-CU\",\n \"es-DO\",\n \"es-EA\",\n \"es-EC\",\n \"es-ES\",\n \"es-GQ\",\n \"es-GT\",\n \"es-HN\",\n \"es-IC\",\n \"es-MX\",\n \"es-NI\",\n \"es-PA\",\n \"es-PE\",\n \"es-PH\",\n \"es-PR\",\n \"es-PY\",\n \"es-SV\",\n \"es-US\",\n \"es-UY\",\n \"es-VE\",\n \"et-EE\",\n \"eu-ES\",\n \"fa-AF\",\n \"fa-IR\",\n \"ff-CM\",\n \"ff-GN\",\n \"ff-MR\",\n \"ff-SN\",\n \"fi-FI\",\n \"fo-FO\",\n \"fr-BE\",\n \"fr-BF\",\n \"fr-BI\",\n \"fr-BJ\",\n \"fr-BL\",\n \"fr-CA\",\n \"fr-CD\",\n \"fr-CF\",\n \"fr-CG\",\n \"fr-CH\",\n \"fr-CI\",\n \"fr-CM\",\n \"fr-DJ\",\n \"fr-DZ\",\n \"fr-FR\",\n \"fr-GA\",\n \"fr-GF\",\n \"fr-GN\",\n \"fr-GP\",\n \"fr-GQ\",\n \"fr-HT\",\n \"fr-KM\",\n \"fr-LU\",\n \"fr-MA\",\n \"fr-MC\",\n \"fr-MF\",\n \"fr-MG\",\n \"fr-ML\",\n \"fr-MQ\",\n \"fr-MR\",\n \"fr-MU\",\n \"fr-NC\",\n \"fr-NE\",\n \"fr-PF\",\n \"fr-PM\",\n \"fr-RE\",\n \"fr-RW\",\n \"fr-SC\",\n \"fr-SN\",\n \"fr-SY\",\n \"fr-TD\",\n \"fr-TG\",\n \"fr-TN\",\n \"fr-VU\",\n \"fr-WF\",\n \"fr-YT\",\n \"fy-NL\",\n \"ga-IE\",\n \"gd-GB\",\n \"gl-ES\",\n \"gu-IN\",\n \"gv-IM\",\n \"ha-Latn\",\n \"ha-Latn-GH\",\n \"ha-Latn-NE\",\n \"ha-Latn-NG\",\n \"he-IL\",\n \"hi-IN\",\n \"hr-BA\",\n \"hr-HR\",\n \"hu-HU\",\n \"hy-AM\",\n \"id-ID\",\n \"ig-NG\",\n \"ii-CN\",\n \"is-IS\",\n \"it-CH\",\n \"it-IT\",\n \"it-SM\",\n \"ja-JP\",\n \"ka-GE\",\n \"ki-KE\",\n \"kk-Cyrl\",\n \"kk-Cyrl-KZ\",\n \"kl-GL\",\n \"km-KH\",\n \"kn-IN\",\n \"ko-KP\",\n \"ko-KR\",\n \"ks-Arab\",\n \"ks-Arab-IN\",\n \"kw-GB\",\n \"ky-Cyrl\",\n \"ky-Cyrl-KG\",\n \"lb-LU\",\n \"lg-UG\",\n \"ln-AO\",\n \"ln-CD\",\n \"ln-CF\",\n \"ln-CG\",\n \"lo-LA\",\n \"lt-LT\",\n \"lu-CD\",\n \"lv-LV\",\n \"mg-MG\",\n \"mk-MK\",\n \"ml-IN\",\n \"mn-Cyrl\",\n \"mn-Cyrl-MN\",\n \"mr-IN\",\n \"ms-Latn\",\n \"ms-Latn-BN\",\n \"ms-Latn-MY\",\n \"ms-Latn-SG\",\n \"mt-MT\",\n \"my-MM\",\n \"nb-NO\",\n \"nb-SJ\",\n \"nd-ZW\",\n \"ne-IN\",\n \"ne-NP\",\n \"nl-AW\",\n \"nl-BE\",\n \"nl-BQ\",\n \"nl-CW\",\n \"nl-NL\",\n \"nl-SR\",\n \"nl-SX\",\n \"nn-NO\",\n \"om-ET\",\n \"om-KE\",\n \"or-IN\",\n \"os-GE\",\n \"os-RU\",\n \"pa-Arab\",\n \"pa-Arab-PK\",\n \"pa-Guru\",\n \"pa-Guru-IN\",\n \"pl-PL\",\n \"ps-AF\",\n \"pt-AO\",\n \"pt-BR\",\n \"pt-CV\",\n \"pt-GW\",\n \"pt-MO\",\n \"pt-MZ\",\n \"pt-PT\",\n \"pt-ST\",\n \"pt-TL\",\n \"qu-BO\",\n \"qu-EC\",\n \"qu-PE\",\n \"rm-CH\",\n \"rn-BI\",\n \"ro-MD\",\n \"ro-RO\",\n \"ru-BY\",\n \"ru-KG\",\n \"ru-KZ\",\n \"ru-MD\",\n \"ru-RU\",\n \"ru-UA\",\n \"rw-RW\",\n \"se-FI\",\n \"se-NO\",\n \"se-SE\",\n \"sg-CF\",\n \"si-LK\",\n \"sk-SK\",\n \"sl-SI\",\n \"sn-ZW\",\n \"so-DJ\",\n \"so-ET\",\n \"so-KE\",\n \"so-SO\",\n \"sq-AL\",\n \"sq-MK\",\n \"sq-XK\",\n \"sr-Cyrl\",\n \"sr-Cyrl-BA\",\n \"sr-Cyrl-ME\",\n \"sr-Cyrl-RS\",\n \"sr-Cyrl-XK\",\n \"sr-Latn\",\n \"sr-Latn-BA\",\n \"sr-Latn-ME\",\n \"sr-Latn-RS\",\n \"sr-Latn-XK\",\n \"sv-AX\",\n \"sv-FI\",\n \"sv-SE\",\n \"sw-CD\",\n \"sw-KE\",\n \"sw-TZ\",\n \"sw-UG\",\n \"ta-IN\",\n \"ta-LK\",\n \"ta-MY\",\n \"ta-SG\",\n \"te-IN\",\n \"th-TH\",\n \"ti-ER\",\n \"ti-ET\",\n \"to-TO\",\n \"tr-CY\",\n \"tr-TR\",\n \"ug-Arab\",\n \"ug-Arab-CN\",\n \"uk-UA\",\n \"ur-IN\",\n \"ur-PK\",\n \"uz-Arab\",\n \"uz-Arab-AF\",\n \"uz-Cyrl\",\n \"uz-Cyrl-UZ\",\n \"uz-Latn\",\n \"uz-Latn-UZ\",\n \"vi-VN\",\n \"yi-001\",\n \"yo-BJ\",\n \"yo-NG\",\n \"zh-Hans\",\n \"zh-Hans-CN\",\n \"zh-Hans-HK\",\n \"zh-Hans-MO\",\n \"zh-Hans-SG\",\n \"zh-Hant\",\n \"zh-Hant-HK\",\n \"zh-Hant-MO\",\n \"zh-Hant-TW\",\n \"zu-ZA\"\n ],\n\n us_states_and_dc: [\n {name: 'Alabama', abbreviation: 'AL'},\n {name: 'Alaska', abbreviation: 'AK'},\n {name: 'Arizona', abbreviation: 'AZ'},\n {name: 'Arkansas', abbreviation: 'AR'},\n {name: 'California', abbreviation: 'CA'},\n {name: 'Colorado', abbreviation: 'CO'},\n {name: 'Connecticut', abbreviation: 'CT'},\n {name: 'Delaware', abbreviation: 'DE'},\n {name: 'District of Columbia', abbreviation: 'DC'},\n {name: 'Florida', abbreviation: 'FL'},\n {name: 'Georgia', abbreviation: 'GA'},\n {name: 'Hawaii', abbreviation: 'HI'},\n {name: 'Idaho', abbreviation: 'ID'},\n {name: 'Illinois', abbreviation: 'IL'},\n {name: 'Indiana', abbreviation: 'IN'},\n {name: 'Iowa', abbreviation: 'IA'},\n {name: 'Kansas', abbreviation: 'KS'},\n {name: 'Kentucky', abbreviation: 'KY'},\n {name: 'Louisiana', abbreviation: 'LA'},\n {name: 'Maine', abbreviation: 'ME'},\n {name: 'Maryland', abbreviation: 'MD'},\n {name: 'Massachusetts', abbreviation: 'MA'},\n {name: 'Michigan', abbreviation: 'MI'},\n {name: 'Minnesota', abbreviation: 'MN'},\n {name: 'Mississippi', abbreviation: 'MS'},\n {name: 'Missouri', abbreviation: 'MO'},\n {name: 'Montana', abbreviation: 'MT'},\n {name: 'Nebraska', abbreviation: 'NE'},\n {name: 'Nevada', abbreviation: 'NV'},\n {name: 'New Hampshire', abbreviation: 'NH'},\n {name: 'New Jersey', abbreviation: 'NJ'},\n {name: 'New Mexico', abbreviation: 'NM'},\n {name: 'New York', abbreviation: 'NY'},\n {name: 'North Carolina', abbreviation: 'NC'},\n {name: 'North Dakota', abbreviation: 'ND'},\n {name: 'Ohio', abbreviation: 'OH'},\n {name: 'Oklahoma', abbreviation: 'OK'},\n {name: 'Oregon', abbreviation: 'OR'},\n {name: 'Pennsylvania', abbreviation: 'PA'},\n {name: 'Rhode Island', abbreviation: 'RI'},\n {name: 'South Carolina', abbreviation: 'SC'},\n {name: 'South Dakota', abbreviation: 'SD'},\n {name: 'Tennessee', abbreviation: 'TN'},\n {name: 'Texas', abbreviation: 'TX'},\n {name: 'Utah', abbreviation: 'UT'},\n {name: 'Vermont', abbreviation: 'VT'},\n {name: 'Virginia', abbreviation: 'VA'},\n {name: 'Washington', abbreviation: 'WA'},\n {name: 'West Virginia', abbreviation: 'WV'},\n {name: 'Wisconsin', abbreviation: 'WI'},\n {name: 'Wyoming', abbreviation: 'WY'}\n ],\n\n territories: [\n {name: 'American Samoa', abbreviation: 'AS'},\n {name: 'Federated States of Micronesia', abbreviation: 'FM'},\n {name: 'Guam', abbreviation: 'GU'},\n {name: 'Marshall Islands', abbreviation: 'MH'},\n {name: 'Northern Mariana Islands', abbreviation: 'MP'},\n {name: 'Puerto Rico', abbreviation: 'PR'},\n {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}\n ],\n\n armed_forces: [\n {name: 'Armed Forces Europe', abbreviation: 'AE'},\n {name: 'Armed Forces Pacific', abbreviation: 'AP'},\n {name: 'Armed Forces the Americas', abbreviation: 'AA'}\n ],\n\n country_regions: {\n it: [\n { name: \"Valle d'Aosta\", abbreviation: \"VDA\" },\n { name: \"Piemonte\", abbreviation: \"PIE\" },\n { name: \"Lombardia\", abbreviation: \"LOM\" },\n { name: \"Veneto\", abbreviation: \"VEN\" },\n { name: \"Trentino Alto Adige\", abbreviation: \"TAA\" },\n { name: \"Friuli Venezia Giulia\", abbreviation: \"FVG\" },\n { name: \"Liguria\", abbreviation: \"LIG\" },\n { name: \"Emilia Romagna\", abbreviation: \"EMR\" },\n { name: \"Toscana\", abbreviation: \"TOS\" },\n { name: \"Umbria\", abbreviation: \"UMB\" },\n { name: \"Marche\", abbreviation: \"MAR\" },\n { name: \"Abruzzo\", abbreviation: \"ABR\" },\n { name: \"Lazio\", abbreviation: \"LAZ\" },\n { name: \"Campania\", abbreviation: \"CAM\" },\n { name: \"Puglia\", abbreviation: \"PUG\" },\n { name: \"Basilicata\", abbreviation: \"BAS\" },\n { name: \"Molise\", abbreviation: \"MOL\" },\n { name: \"Calabria\", abbreviation: \"CAL\" },\n { name: \"Sicilia\", abbreviation: \"SIC\" },\n { name: \"Sardegna\", abbreviation: \"SAR\" }\n ]\n },\n\n street_suffixes: {\n 'us': [\n {name: 'Avenue', abbreviation: 'Ave'},\n {name: 'Boulevard', abbreviation: 'Blvd'},\n {name: 'Center', abbreviation: 'Ctr'},\n {name: 'Circle', abbreviation: 'Cir'},\n {name: 'Court', abbreviation: 'Ct'},\n {name: 'Drive', abbreviation: 'Dr'},\n {name: 'Extension', abbreviation: 'Ext'},\n {name: 'Glen', abbreviation: 'Gln'},\n {name: 'Grove', abbreviation: 'Grv'},\n {name: 'Heights', abbreviation: 'Hts'},\n {name: 'Highway', abbreviation: 'Hwy'},\n {name: 'Junction', abbreviation: 'Jct'},\n {name: 'Key', abbreviation: 'Key'},\n {name: 'Lane', abbreviation: 'Ln'},\n {name: 'Loop', abbreviation: 'Loop'},\n {name: 'Manor', abbreviation: 'Mnr'},\n {name: 'Mill', abbreviation: 'Mill'},\n {name: 'Park', abbreviation: 'Park'},\n {name: 'Parkway', abbreviation: 'Pkwy'},\n {name: 'Pass', abbreviation: 'Pass'},\n {name: 'Path', abbreviation: 'Path'},\n {name: 'Pike', abbreviation: 'Pike'},\n {name: 'Place', abbreviation: 'Pl'},\n {name: 'Plaza', abbreviation: 'Plz'},\n {name: 'Point', abbreviation: 'Pt'},\n {name: 'Ridge', abbreviation: 'Rdg'},\n {name: 'River', abbreviation: 'Riv'},\n {name: 'Road', abbreviation: 'Rd'},\n {name: 'Square', abbreviation: 'Sq'},\n {name: 'Street', abbreviation: 'St'},\n {name: 'Terrace', abbreviation: 'Ter'},\n {name: 'Trail', abbreviation: 'Trl'},\n {name: 'Turnpike', abbreviation: 'Tpke'},\n {name: 'View', abbreviation: 'Vw'},\n {name: 'Way', abbreviation: 'Way'}\n ],\n 'it': [\n { name: 'Accesso', abbreviation: 'Acc.' },\n { name: 'Alzaia', abbreviation: 'Alz.' },\n { name: 'Arco', abbreviation: 'Arco' },\n { name: 'Archivolto', abbreviation: 'Acv.' },\n { name: 'Arena', abbreviation: 'Arena' },\n { name: 'Argine', abbreviation: 'Argine' },\n { name: 'Bacino', abbreviation: 'Bacino' },\n { name: 'Banchi', abbreviation: 'Banchi' },\n { name: 'Banchina', abbreviation: 'Ban.' },\n { name: 'Bastioni', abbreviation: 'Bas.' },\n { name: 'Belvedere', abbreviation: 'Belv.' },\n { name: 'Borgata', abbreviation: 'B.ta' },\n { name: 'Borgo', abbreviation: 'B.go' },\n { name: 'Calata', abbreviation: 'Cal.' },\n { name: 'Calle', abbreviation: 'Calle' },\n { name: 'Campiello', abbreviation: 'Cam.' },\n { name: 'Campo', abbreviation: 'Cam.' },\n { name: 'Canale', abbreviation: 'Can.' },\n { name: 'Carraia', abbreviation: 'Carr.' },\n { name: 'Cascina', abbreviation: 'Cascina' },\n { name: 'Case sparse', abbreviation: 'c.s.' },\n { name: 'Cavalcavia', abbreviation: 'Cv.' },\n { name: 'Circonvallazione', abbreviation: 'Cv.' },\n { name: 'Complanare', abbreviation: 'C.re' },\n { name: 'Contrada', abbreviation: 'C.da' },\n { name: 'Corso', abbreviation: 'C.so' },\n { name: 'Corte', abbreviation: 'C.te' },\n { name: 'Cortile', abbreviation: 'C.le' },\n { name: 'Diramazione', abbreviation: 'Dir.' },\n { name: 'Fondaco', abbreviation: 'F.co' },\n { name: 'Fondamenta', abbreviation: 'F.ta' },\n { name: 'Fondo', abbreviation: 'F.do' },\n { name: 'Frazione', abbreviation: 'Fr.' },\n { name: 'Isola', abbreviation: 'Is.' },\n { name: 'Largo', abbreviation: 'L.go' },\n { name: 'Litoranea', abbreviation: 'Lit.' },\n { name: 'Lungolago', abbreviation: 'L.go lago' },\n { name: 'Lungo Po', abbreviation: 'l.go Po' },\n { name: 'Molo', abbreviation: 'Molo' },\n { name: 'Mura', abbreviation: 'Mura' },\n { name: 'Passaggio privato', abbreviation: 'pass. priv.' },\n { name: 'Passeggiata', abbreviation: 'Pass.' },\n { name: 'Piazza', abbreviation: 'P.zza' },\n { name: 'Piazzale', abbreviation: 'P.le' },\n { name: 'Ponte', abbreviation: 'P.te' },\n { name: 'Portico', abbreviation: 'P.co' },\n { name: 'Rampa', abbreviation: 'Rampa' },\n { name: 'Regione', abbreviation: 'Reg.' },\n { name: 'Rione', abbreviation: 'R.ne' },\n { name: 'Rio', abbreviation: 'Rio' },\n { name: 'Ripa', abbreviation: 'Ripa' },\n { name: 'Riva', abbreviation: 'Riva' },\n { name: 'Rondò', abbreviation: 'Rondò' },\n { name: 'Rotonda', abbreviation: 'Rot.' },\n { name: 'Sagrato', abbreviation: 'Sagr.' },\n { name: 'Salita', abbreviation: 'Sal.' },\n { name: 'Scalinata', abbreviation: 'Scal.' },\n { name: 'Scalone', abbreviation: 'Scal.' },\n { name: 'Slargo', abbreviation: 'Sl.' },\n { name: 'Sottoportico', abbreviation: 'Sott.' },\n { name: 'Strada', abbreviation: 'Str.' },\n { name: 'Stradale', abbreviation: 'Str.le' },\n { name: 'Strettoia', abbreviation: 'Strett.' },\n { name: 'Traversa', abbreviation: 'Trav.' },\n { name: 'Via', abbreviation: 'V.' },\n { name: 'Viale', abbreviation: 'V.le' },\n { name: 'Vicinale', abbreviation: 'Vic.le' },\n { name: 'Vicolo', abbreviation: 'Vic.' }\n ],\n 'uk' : [\n {name: 'Avenue', abbreviation: 'Ave'},\n {name: 'Close', abbreviation: 'Cl'},\n {name: 'Court', abbreviation: 'Ct'},\n {name: 'Crescent', abbreviation: 'Cr'},\n {name: 'Drive', abbreviation: 'Dr'},\n {name: 'Garden', abbreviation: 'Gdn'},\n {name: 'Gardens', abbreviation: 'Gdns'},\n {name: 'Green', abbreviation: 'Gn'},\n {name: 'Grove', abbreviation: 'Gr'},\n {name: 'Lane', abbreviation: 'Ln'},\n {name: 'Mount', abbreviation: 'Mt'},\n {name: 'Place', abbreviation: 'Pl'},\n {name: 'Park', abbreviation: 'Pk'},\n {name: 'Ridge', abbreviation: 'Rdg'},\n {name: 'Road', abbreviation: 'Rd'},\n {name: 'Square', abbreviation: 'Sq'},\n {name: 'Street', abbreviation: 'St'},\n {name: 'Terrace', abbreviation: 'Ter'},\n {name: 'Valley', abbreviation: 'Val'}\n ]\n },\n\n months: [\n {name: 'January', short_name: 'Jan', numeric: '01', days: 31},\n // Not messing with leap years...\n {name: 'February', short_name: 'Feb', numeric: '02', days: 28},\n {name: 'March', short_name: 'Mar', numeric: '03', days: 31},\n {name: 'April', short_name: 'Apr', numeric: '04', days: 30},\n {name: 'May', short_name: 'May', numeric: '05', days: 31},\n {name: 'June', short_name: 'Jun', numeric: '06', days: 30},\n {name: 'July', short_name: 'Jul', numeric: '07', days: 31},\n {name: 'August', short_name: 'Aug', numeric: '08', days: 31},\n {name: 'September', short_name: 'Sep', numeric: '09', days: 30},\n {name: 'October', short_name: 'Oct', numeric: '10', days: 31},\n {name: 'November', short_name: 'Nov', numeric: '11', days: 30},\n {name: 'December', short_name: 'Dec', numeric: '12', days: 31}\n ],\n\n // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29\n cc_types: [\n {name: \"American Express\", short_name: 'amex', prefix: '34', length: 15},\n {name: \"Bankcard\", short_name: 'bankcard', prefix: '5610', length: 16},\n {name: \"China UnionPay\", short_name: 'chinaunion', prefix: '62', length: 16},\n {name: \"Diners Club Carte Blanche\", short_name: 'dccarte', prefix: '300', length: 14},\n {name: \"Diners Club enRoute\", short_name: 'dcenroute', prefix: '2014', length: 15},\n {name: \"Diners Club International\", short_name: 'dcintl', prefix: '36', length: 14},\n {name: \"Diners Club United States & Canada\", short_name: 'dcusc', prefix: '54', length: 16},\n {name: \"Discover Card\", short_name: 'discover', prefix: '6011', length: 16},\n {name: \"InstaPayment\", short_name: 'instapay', prefix: '637', length: 16},\n {name: \"JCB\", short_name: 'jcb', prefix: '3528', length: 16},\n {name: \"Laser\", short_name: 'laser', prefix: '6304', length: 16},\n {name: \"Maestro\", short_name: 'maestro', prefix: '5018', length: 16},\n {name: \"Mastercard\", short_name: 'mc', prefix: '51', length: 16},\n {name: \"Solo\", short_name: 'solo', prefix: '6334', length: 16},\n {name: \"Switch\", short_name: 'switch', prefix: '4903', length: 16},\n {name: \"Visa\", short_name: 'visa', prefix: '4', length: 16},\n {name: \"Visa Electron\", short_name: 'electron', prefix: '4026', length: 16}\n ],\n\n //return all world currency by ISO 4217\n currency_types: [\n {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},\n {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},\n {'code' : 'ALL', 'name' : 'Albania Lek'},\n {'code' : 'AMD', 'name' : 'Armenia Dram'},\n {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},\n {'code' : 'AOA', 'name' : 'Angola Kwanza'},\n {'code' : 'ARS', 'name' : 'Argentina Peso'},\n {'code' : 'AUD', 'name' : 'Australia Dollar'},\n {'code' : 'AWG', 'name' : 'Aruba Guilder'},\n {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},\n {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},\n {'code' : 'BBD', 'name' : 'Barbados Dollar'},\n {'code' : 'BDT', 'name' : 'Bangladesh Taka'},\n {'code' : 'BGN', 'name' : 'Bulgaria Lev'},\n {'code' : 'BHD', 'name' : 'Bahrain Dinar'},\n {'code' : 'BIF', 'name' : 'Burundi Franc'},\n {'code' : 'BMD', 'name' : 'Bermuda Dollar'},\n {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},\n {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},\n {'code' : 'BRL', 'name' : 'Brazil Real'},\n {'code' : 'BSD', 'name' : 'Bahamas Dollar'},\n {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},\n {'code' : 'BWP', 'name' : 'Botswana Pula'},\n {'code' : 'BYR', 'name' : 'Belarus Ruble'},\n {'code' : 'BZD', 'name' : 'Belize Dollar'},\n {'code' : 'CAD', 'name' : 'Canada Dollar'},\n {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},\n {'code' : 'CHF', 'name' : 'Switzerland Franc'},\n {'code' : 'CLP', 'name' : 'Chile Peso'},\n {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},\n {'code' : 'COP', 'name' : 'Colombia Peso'},\n {'code' : 'CRC', 'name' : 'Costa Rica Colon'},\n {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},\n {'code' : 'CUP', 'name' : 'Cuba Peso'},\n {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},\n {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},\n {'code' : 'DJF', 'name' : 'Djibouti Franc'},\n {'code' : 'DKK', 'name' : 'Denmark Krone'},\n {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},\n {'code' : 'DZD', 'name' : 'Algeria Dinar'},\n {'code' : 'EGP', 'name' : 'Egypt Pound'},\n {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},\n {'code' : 'ETB', 'name' : 'Ethiopia Birr'},\n {'code' : 'EUR', 'name' : 'Euro Member Countries'},\n {'code' : 'FJD', 'name' : 'Fiji Dollar'},\n {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},\n {'code' : 'GBP', 'name' : 'United Kingdom Pound'},\n {'code' : 'GEL', 'name' : 'Georgia Lari'},\n {'code' : 'GGP', 'name' : 'Guernsey Pound'},\n {'code' : 'GHS', 'name' : 'Ghana Cedi'},\n {'code' : 'GIP', 'name' : 'Gibraltar Pound'},\n {'code' : 'GMD', 'name' : 'Gambia Dalasi'},\n {'code' : 'GNF', 'name' : 'Guinea Franc'},\n {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},\n {'code' : 'GYD', 'name' : 'Guyana Dollar'},\n {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},\n {'code' : 'HNL', 'name' : 'Honduras Lempira'},\n {'code' : 'HRK', 'name' : 'Croatia Kuna'},\n {'code' : 'HTG', 'name' : 'Haiti Gourde'},\n {'code' : 'HUF', 'name' : 'Hungary Forint'},\n {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},\n {'code' : 'ILS', 'name' : 'Israel Shekel'},\n {'code' : 'IMP', 'name' : 'Isle of Man Pound'},\n {'code' : 'INR', 'name' : 'India Rupee'},\n {'code' : 'IQD', 'name' : 'Iraq Dinar'},\n {'code' : 'IRR', 'name' : 'Iran Rial'},\n {'code' : 'ISK', 'name' : 'Iceland Krona'},\n {'code' : 'JEP', 'name' : 'Jersey Pound'},\n {'code' : 'JMD', 'name' : 'Jamaica Dollar'},\n {'code' : 'JOD', 'name' : 'Jordan Dinar'},\n {'code' : 'JPY', 'name' : 'Japan Yen'},\n {'code' : 'KES', 'name' : 'Kenya Shilling'},\n {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},\n {'code' : 'KHR', 'name' : 'Cambodia Riel'},\n {'code' : 'KMF', 'name' : 'Comoros Franc'},\n {'code' : 'KPW', 'name' : 'Korea (North) Won'},\n {'code' : 'KRW', 'name' : 'Korea (South) Won'},\n {'code' : 'KWD', 'name' : 'Kuwait Dinar'},\n {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},\n {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},\n {'code' : 'LAK', 'name' : 'Laos Kip'},\n {'code' : 'LBP', 'name' : 'Lebanon Pound'},\n {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},\n {'code' : 'LRD', 'name' : 'Liberia Dollar'},\n {'code' : 'LSL', 'name' : 'Lesotho Loti'},\n {'code' : 'LTL', 'name' : 'Lithuania Litas'},\n {'code' : 'LYD', 'name' : 'Libya Dinar'},\n {'code' : 'MAD', 'name' : 'Morocco Dirham'},\n {'code' : 'MDL', 'name' : 'Moldova Leu'},\n {'code' : 'MGA', 'name' : 'Madagascar Ariary'},\n {'code' : 'MKD', 'name' : 'Macedonia Denar'},\n {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},\n {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},\n {'code' : 'MOP', 'name' : 'Macau Pataca'},\n {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},\n {'code' : 'MUR', 'name' : 'Mauritius Rupee'},\n {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},\n {'code' : 'MWK', 'name' : 'Malawi Kwacha'},\n {'code' : 'MXN', 'name' : 'Mexico Peso'},\n {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},\n {'code' : 'MZN', 'name' : 'Mozambique Metical'},\n {'code' : 'NAD', 'name' : 'Namibia Dollar'},\n {'code' : 'NGN', 'name' : 'Nigeria Naira'},\n {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},\n {'code' : 'NOK', 'name' : 'Norway Krone'},\n {'code' : 'NPR', 'name' : 'Nepal Rupee'},\n {'code' : 'NZD', 'name' : 'New Zealand Dollar'},\n {'code' : 'OMR', 'name' : 'Oman Rial'},\n {'code' : 'PAB', 'name' : 'Panama Balboa'},\n {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},\n {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},\n {'code' : 'PHP', 'name' : 'Philippines Peso'},\n {'code' : 'PKR', 'name' : 'Pakistan Rupee'},\n {'code' : 'PLN', 'name' : 'Poland Zloty'},\n {'code' : 'PYG', 'name' : 'Paraguay Guarani'},\n {'code' : 'QAR', 'name' : 'Qatar Riyal'},\n {'code' : 'RON', 'name' : 'Romania New Leu'},\n {'code' : 'RSD', 'name' : 'Serbia Dinar'},\n {'code' : 'RUB', 'name' : 'Russia Ruble'},\n {'code' : 'RWF', 'name' : 'Rwanda Franc'},\n {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},\n {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},\n {'code' : 'SCR', 'name' : 'Seychelles Rupee'},\n {'code' : 'SDG', 'name' : 'Sudan Pound'},\n {'code' : 'SEK', 'name' : 'Sweden Krona'},\n {'code' : 'SGD', 'name' : 'Singapore Dollar'},\n {'code' : 'SHP', 'name' : 'Saint Helena Pound'},\n {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},\n {'code' : 'SOS', 'name' : 'Somalia Shilling'},\n {'code' : 'SPL', 'name' : 'Seborga Luigino'},\n {'code' : 'SRD', 'name' : 'Suriname Dollar'},\n {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},\n {'code' : 'SVC', 'name' : 'El Salvador Colon'},\n {'code' : 'SYP', 'name' : 'Syria Pound'},\n {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},\n {'code' : 'THB', 'name' : 'Thailand Baht'},\n {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},\n {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},\n {'code' : 'TND', 'name' : 'Tunisia Dinar'},\n {'code' : 'TOP', 'name' : 'Tonga Pa\\'anga'},\n {'code' : 'TRY', 'name' : 'Turkey Lira'},\n {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},\n {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},\n {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},\n {'code' : 'TZS', 'name' : 'Tanzania Shilling'},\n {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},\n {'code' : 'UGX', 'name' : 'Uganda Shilling'},\n {'code' : 'USD', 'name' : 'United States Dollar'},\n {'code' : 'UYU', 'name' : 'Uruguay Peso'},\n {'code' : 'UZS', 'name' : 'Uzbekistan Som'},\n {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},\n {'code' : 'VND', 'name' : 'Viet Nam Dong'},\n {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},\n {'code' : 'WST', 'name' : 'Samoa Tala'},\n {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},\n {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},\n {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},\n {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},\n {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},\n {'code' : 'YER', 'name' : 'Yemen Rial'},\n {'code' : 'ZAR', 'name' : 'South Africa Rand'},\n {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},\n {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}\n ],\n\n // return the names of all valide colors\n colorNames : [ \"AliceBlue\", \"Black\", \"Navy\", \"DarkBlue\", \"MediumBlue\", \"Blue\", \"DarkGreen\", \"Green\", \"Teal\", \"DarkCyan\", \"DeepSkyBlue\", \"DarkTurquoise\", \"MediumSpringGreen\", \"Lime\", \"SpringGreen\",\n \"Aqua\", \"Cyan\", \"MidnightBlue\", \"DodgerBlue\", \"LightSeaGreen\", \"ForestGreen\", \"SeaGreen\", \"DarkSlateGray\", \"LimeGreen\", \"MediumSeaGreen\", \"Turquoise\", \"RoyalBlue\", \"SteelBlue\", \"DarkSlateBlue\", \"MediumTurquoise\",\n \"Indigo\", \"DarkOliveGreen\", \"CadetBlue\", \"CornflowerBlue\", \"RebeccaPurple\", \"MediumAquaMarine\", \"DimGray\", \"SlateBlue\", \"OliveDrab\", \"SlateGray\", \"LightSlateGray\", \"MediumSlateBlue\", \"LawnGreen\", \"Chartreuse\",\n \"Aquamarine\", \"Maroon\", \"Purple\", \"Olive\", \"Gray\", \"SkyBlue\", \"LightSkyBlue\", \"BlueViolet\", \"DarkRed\", \"DarkMagenta\", \"SaddleBrown\", \"Ivory\", \"White\",\n \"DarkSeaGreen\", \"LightGreen\", \"MediumPurple\", \"DarkViolet\", \"PaleGreen\", \"DarkOrchid\", \"YellowGreen\", \"Sienna\", \"Brown\", \"DarkGray\", \"LightBlue\", \"GreenYellow\", \"PaleTurquoise\", \"LightSteelBlue\", \"PowderBlue\",\n \"FireBrick\", \"DarkGoldenRod\", \"MediumOrchid\", \"RosyBrown\", \"DarkKhaki\", \"Silver\", \"MediumVioletRed\", \"IndianRed\", \"Peru\", \"Chocolate\", \"Tan\", \"LightGray\", \"Thistle\", \"Orchid\", \"GoldenRod\", \"PaleVioletRed\",\n \"Crimson\", \"Gainsboro\", \"Plum\", \"BurlyWood\", \"LightCyan\", \"Lavender\", \"DarkSalmon\", \"Violet\", \"PaleGoldenRod\", \"LightCoral\", \"Khaki\", \"AliceBlue\", \"HoneyDew\", \"Azure\", \"SandyBrown\", \"Wheat\", \"Beige\", \"WhiteSmoke\",\n \"MintCream\", \"GhostWhite\", \"Salmon\", \"AntiqueWhite\", \"Linen\", \"LightGoldenRodYellow\", \"OldLace\", \"Red\", \"Fuchsia\", \"Magenta\", \"DeepPink\", \"OrangeRed\", \"Tomato\", \"HotPink\", \"Coral\", \"DarkOrange\", \"LightSalmon\", \"Orange\",\n \"LightPink\", \"Pink\", \"Gold\", \"PeachPuff\", \"NavajoWhite\", \"Moccasin\", \"Bisque\", \"MistyRose\", \"BlanchedAlmond\", \"PapayaWhip\", \"LavenderBlush\", \"SeaShell\", \"Cornsilk\", \"LemonChiffon\", \"FloralWhite\", \"Snow\", \"Yellow\", \"LightYellow\"\n ],\n\n // Data taken from https://www.sec.gov/rules/other/4-460list.htm\n company: [ \"3Com Corp\",\n \"3M Company\",\n \"A.G. Edwards Inc.\",\n \"Abbott Laboratories\",\n \"Abercrombie & Fitch Co.\",\n \"ABM Industries Incorporated\",\n \"Ace Hardware Corporation\",\n \"ACT Manufacturing Inc.\",\n \"Acterna Corp.\",\n \"Adams Resources & Energy, Inc.\",\n \"ADC Telecommunications, Inc.\",\n \"Adelphia Communications Corporation\",\n \"Administaff, Inc.\",\n \"Adobe Systems Incorporated\",\n \"Adolph Coors Company\",\n \"Advance Auto Parts, Inc.\",\n \"Advanced Micro Devices, Inc.\",\n \"AdvancePCS, Inc.\",\n \"Advantica Restaurant Group, Inc.\",\n \"The AES Corporation\",\n \"Aetna Inc.\",\n \"Affiliated Computer Services, Inc.\",\n \"AFLAC Incorporated\",\n \"AGCO Corporation\",\n \"Agilent Technologies, Inc.\",\n \"Agway Inc.\",\n \"Apartment Investment and Management Company\",\n \"Air Products and Chemicals, Inc.\",\n \"Airborne, Inc.\",\n \"Airgas, Inc.\",\n \"AK Steel Holding Corporation\",\n \"Alaska Air Group, Inc.\",\n \"Alberto-Culver Company\",\n \"Albertson's, Inc.\",\n \"Alcoa Inc.\",\n \"Alleghany Corporation\",\n \"Allegheny Energy, Inc.\",\n \"Allegheny Technologies Incorporated\",\n \"Allergan, Inc.\",\n \"ALLETE, Inc.\",\n \"Alliant Energy Corporation\",\n \"Allied Waste Industries, Inc.\",\n \"Allmerica Financial Corporation\",\n \"The Allstate Corporation\",\n \"ALLTEL Corporation\",\n \"The Alpine Group, Inc.\",\n \"Amazon.com, Inc.\",\n \"AMC Entertainment Inc.\",\n \"American Power Conversion Corporation\",\n \"Amerada Hess Corporation\",\n \"AMERCO\",\n \"Ameren Corporation\",\n \"America West Holdings Corporation\",\n \"American Axle & Manufacturing Holdings, Inc.\",\n \"American Eagle Outfitters, Inc.\",\n \"American Electric Power Company, Inc.\",\n \"American Express Company\",\n \"American Financial Group, Inc.\",\n \"American Greetings Corporation\",\n \"American International Group, Inc.\",\n \"American Standard Companies Inc.\",\n \"American Water Works Company, Inc.\",\n \"AmerisourceBergen Corporation\",\n \"Ames Department Stores, Inc.\",\n \"Amgen Inc.\",\n \"Amkor Technology, Inc.\",\n \"AMR Corporation\",\n \"AmSouth Bancorp.\",\n \"Amtran, Inc.\",\n \"Anadarko Petroleum Corporation\",\n \"Analog Devices, Inc.\",\n \"Anheuser-Busch Companies, Inc.\",\n \"Anixter International Inc.\",\n \"AnnTaylor Inc.\",\n \"Anthem, Inc.\",\n \"AOL Time Warner Inc.\",\n \"Aon Corporation\",\n \"Apache Corporation\",\n \"Apple Computer, Inc.\",\n \"Applera Corporation\",\n \"Applied Industrial Technologies, Inc.\",\n \"Applied Materials, Inc.\",\n \"Aquila, Inc.\",\n \"ARAMARK Corporation\",\n \"Arch Coal, Inc.\",\n \"Archer Daniels Midland Company\",\n \"Arkansas Best Corporation\",\n \"Armstrong Holdings, Inc.\",\n \"Arrow Electronics, Inc.\",\n \"ArvinMeritor, Inc.\",\n \"Ashland Inc.\",\n \"Astoria Financial Corporation\",\n \"AT&T Corp.\",\n \"Atmel Corporation\",\n \"Atmos Energy Corporation\",\n \"Audiovox Corporation\",\n \"Autoliv, Inc.\",\n \"Automatic Data Processing, Inc.\",\n \"AutoNation, Inc.\",\n \"AutoZone, Inc.\",\n \"Avaya Inc.\",\n \"Avery Dennison Corporation\",\n \"Avista Corporation\",\n \"Avnet, Inc.\",\n \"Avon Products, Inc.\",\n \"Baker Hughes Incorporated\",\n \"Ball Corporation\",\n \"Bank of America Corporation\",\n \"The Bank of New York Company, Inc.\",\n \"Bank One Corporation\",\n \"Banknorth Group, Inc.\",\n \"Banta Corporation\",\n \"Barnes & Noble, Inc.\",\n \"Bausch & Lomb Incorporated\",\n \"Baxter International Inc.\",\n \"BB&T Corporation\",\n \"The Bear Stearns Companies Inc.\",\n \"Beazer Homes USA, Inc.\",\n \"Beckman Coulter, Inc.\",\n \"Becton, Dickinson and Company\",\n \"Bed Bath & Beyond Inc.\",\n \"Belk, Inc.\",\n \"Bell Microproducts Inc.\",\n \"BellSouth Corporation\",\n \"Belo Corp.\",\n \"Bemis Company, Inc.\",\n \"Benchmark Electronics, Inc.\",\n \"Berkshire Hathaway Inc.\",\n \"Best Buy Co., Inc.\",\n \"Bethlehem Steel Corporation\",\n \"Beverly Enterprises, Inc.\",\n \"Big Lots, Inc.\",\n \"BJ Services Company\",\n \"BJ's Wholesale Club, Inc.\",\n \"The Black & Decker Corporation\",\n \"Black Hills Corporation\",\n \"BMC Software, Inc.\",\n \"The Boeing Company\",\n \"Boise Cascade Corporation\",\n \"Borders Group, Inc.\",\n \"BorgWarner Inc.\",\n \"Boston Scientific Corporation\",\n \"Bowater Incorporated\",\n \"Briggs & Stratton Corporation\",\n \"Brightpoint, Inc.\",\n \"Brinker International, Inc.\",\n \"Bristol-Myers Squibb Company\",\n \"Broadwing, Inc.\",\n \"Brown Shoe Company, Inc.\",\n \"Brown-Forman Corporation\",\n \"Brunswick Corporation\",\n \"Budget Group, Inc.\",\n \"Burlington Coat Factory Warehouse Corporation\",\n \"Burlington Industries, Inc.\",\n \"Burlington Northern Santa Fe Corporation\",\n \"Burlington Resources Inc.\",\n \"C. H. Robinson Worldwide Inc.\",\n \"Cablevision Systems Corp\",\n \"Cabot Corp\",\n \"Cadence Design Systems, Inc.\",\n \"Calpine Corp.\",\n \"Campbell Soup Co.\",\n \"Capital One Financial Corp.\",\n \"Cardinal Health Inc.\",\n \"Caremark Rx Inc.\",\n \"Carlisle Cos. Inc.\",\n \"Carpenter Technology Corp.\",\n \"Casey's General Stores Inc.\",\n \"Caterpillar Inc.\",\n \"CBRL Group Inc.\",\n \"CDI Corp.\",\n \"CDW Computer Centers Inc.\",\n \"CellStar Corp.\",\n \"Cendant Corp\",\n \"Cenex Harvest States Cooperatives\",\n \"Centex Corp.\",\n \"CenturyTel Inc.\",\n \"Ceridian Corp.\",\n \"CH2M Hill Cos. Ltd.\",\n \"Champion Enterprises Inc.\",\n \"Charles Schwab Corp.\",\n \"Charming Shoppes Inc.\",\n \"Charter Communications Inc.\",\n \"Charter One Financial Inc.\",\n \"ChevronTexaco Corp.\",\n \"Chiquita Brands International Inc.\",\n \"Chubb Corp\",\n \"Ciena Corp.\",\n \"Cigna Corp\",\n \"Cincinnati Financial Corp.\",\n \"Cinergy Corp.\",\n \"Cintas Corp.\",\n \"Circuit City Stores Inc.\",\n \"Cisco Systems Inc.\",\n \"Citigroup, Inc\",\n \"Citizens Communications Co.\",\n \"CKE Restaurants Inc.\",\n \"Clear Channel Communications Inc.\",\n \"The Clorox Co.\",\n \"CMGI Inc.\",\n \"CMS Energy Corp.\",\n \"CNF Inc.\",\n \"Coca-Cola Co.\",\n \"Coca-Cola Enterprises Inc.\",\n \"Colgate-Palmolive Co.\",\n \"Collins & Aikman Corp.\",\n \"Comcast Corp.\",\n \"Comdisco Inc.\",\n \"Comerica Inc.\",\n \"Comfort Systems USA Inc.\",\n \"Commercial Metals Co.\",\n \"Community Health Systems Inc.\",\n \"Compass Bancshares Inc\",\n \"Computer Associates International Inc.\",\n \"Computer Sciences Corp.\",\n \"Compuware Corp.\",\n \"Comverse Technology Inc.\",\n \"ConAgra Foods Inc.\",\n \"Concord EFS Inc.\",\n \"Conectiv, Inc\",\n \"Conoco Inc\",\n \"Conseco Inc.\",\n \"Consolidated Freightways Corp.\",\n \"Consolidated Edison Inc.\",\n \"Constellation Brands Inc.\",\n \"Constellation Emergy Group Inc.\",\n \"Continental Airlines Inc.\",\n \"Convergys Corp.\",\n \"Cooper Cameron Corp.\",\n \"Cooper Industries Ltd.\",\n \"Cooper Tire & Rubber Co.\",\n \"Corn Products International Inc.\",\n \"Corning Inc.\",\n \"Costco Wholesale Corp.\",\n \"Countrywide Credit Industries Inc.\",\n \"Coventry Health Care Inc.\",\n \"Cox Communications Inc.\",\n \"Crane Co.\",\n \"Crompton Corp.\",\n \"Crown Cork & Seal Co. Inc.\",\n \"CSK Auto Corp.\",\n \"CSX Corp.\",\n \"Cummins Inc.\",\n \"CVS Corp.\",\n \"Cytec Industries Inc.\",\n \"D&K Healthcare Resources, Inc.\",\n \"D.R. Horton Inc.\",\n \"Dana Corporation\",\n \"Danaher Corporation\",\n \"Darden Restaurants Inc.\",\n \"DaVita Inc.\",\n \"Dean Foods Company\",\n \"Deere & Company\",\n \"Del Monte Foods Co\",\n \"Dell Computer Corporation\",\n \"Delphi Corp.\",\n \"Delta Air Lines Inc.\",\n \"Deluxe Corporation\",\n \"Devon Energy Corporation\",\n \"Di Giorgio Corporation\",\n \"Dial Corporation\",\n \"Diebold Incorporated\",\n \"Dillard's Inc.\",\n \"DIMON Incorporated\",\n \"Dole Food Company, Inc.\",\n \"Dollar General Corporation\",\n \"Dollar Tree Stores, Inc.\",\n \"Dominion Resources, Inc.\",\n \"Domino's Pizza LLC\",\n \"Dover Corporation, Inc.\",\n \"Dow Chemical Company\",\n \"Dow Jones & Company, Inc.\",\n \"DPL Inc.\",\n \"DQE Inc.\",\n \"Dreyer's Grand Ice Cream, Inc.\",\n \"DST Systems, Inc.\",\n \"DTE Energy Co.\",\n \"E.I. Du Pont de Nemours and Company\",\n \"Duke Energy Corp\",\n \"Dun & Bradstreet Inc.\",\n \"DURA Automotive Systems Inc.\",\n \"DynCorp\",\n \"Dynegy Inc.\",\n \"E*Trade Group, Inc.\",\n \"E.W. Scripps Company\",\n \"Earthlink, Inc.\",\n \"Eastman Chemical Company\",\n \"Eastman Kodak Company\",\n \"Eaton Corporation\",\n \"Echostar Communications Corporation\",\n \"Ecolab Inc.\",\n \"Edison International\",\n \"EGL Inc.\",\n \"El Paso Corporation\",\n \"Electronic Arts Inc.\",\n \"Electronic Data Systems Corp.\",\n \"Eli Lilly and Company\",\n \"EMC Corporation\",\n \"Emcor Group Inc.\",\n \"Emerson Electric Co.\",\n \"Encompass Services Corporation\",\n \"Energizer Holdings Inc.\",\n \"Energy East Corporation\",\n \"Engelhard Corporation\",\n \"Enron Corp.\",\n \"Entergy Corporation\",\n \"Enterprise Products Partners L.P.\",\n \"EOG Resources, Inc.\",\n \"Equifax Inc.\",\n \"Equitable Resources Inc.\",\n \"Equity Office Properties Trust\",\n \"Equity Residential Properties Trust\",\n \"Estee Lauder Companies Inc.\",\n \"Exelon Corporation\",\n \"Exide Technologies\",\n \"Expeditors International of Washington Inc.\",\n \"Express Scripts Inc.\",\n \"ExxonMobil Corporation\",\n \"Fairchild Semiconductor International Inc.\",\n \"Family Dollar Stores Inc.\",\n \"Farmland Industries Inc.\",\n \"Federal Mogul Corp.\",\n \"Federated Department Stores Inc.\",\n \"Federal Express Corp.\",\n \"Felcor Lodging Trust Inc.\",\n \"Ferro Corp.\",\n \"Fidelity National Financial Inc.\",\n \"Fifth Third Bancorp\",\n \"First American Financial Corp.\",\n \"First Data Corp.\",\n \"First National of Nebraska Inc.\",\n \"First Tennessee National Corp.\",\n \"FirstEnergy Corp.\",\n \"Fiserv Inc.\",\n \"Fisher Scientific International Inc.\",\n \"FleetBoston Financial Co.\",\n \"Fleetwood Enterprises Inc.\",\n \"Fleming Companies Inc.\",\n \"Flowers Foods Inc.\",\n \"Flowserv Corp\",\n \"Fluor Corp\",\n \"FMC Corp\",\n \"Foamex International Inc\",\n \"Foot Locker Inc\",\n \"Footstar Inc.\",\n \"Ford Motor Co\",\n \"Forest Laboratories Inc.\",\n \"Fortune Brands Inc.\",\n \"Foster Wheeler Ltd.\",\n \"FPL Group Inc.\",\n \"Franklin Resources Inc.\",\n \"Freeport McMoran Copper & Gold Inc.\",\n \"Frontier Oil Corp\",\n \"Furniture Brands International Inc.\",\n \"Gannett Co., Inc.\",\n \"Gap Inc.\",\n \"Gateway Inc.\",\n \"GATX Corporation\",\n \"Gemstar-TV Guide International Inc.\",\n \"GenCorp Inc.\",\n \"General Cable Corporation\",\n \"General Dynamics Corporation\",\n \"General Electric Company\",\n \"General Mills Inc\",\n \"General Motors Corporation\",\n \"Genesis Health Ventures Inc.\",\n \"Gentek Inc.\",\n \"Gentiva Health Services Inc.\",\n \"Genuine Parts Company\",\n \"Genuity Inc.\",\n \"Genzyme Corporation\",\n \"Georgia Gulf Corporation\",\n \"Georgia-Pacific Corporation\",\n \"Gillette Company\",\n \"Gold Kist Inc.\",\n \"Golden State Bancorp Inc.\",\n \"Golden West Financial Corporation\",\n \"Goldman Sachs Group Inc.\",\n \"Goodrich Corporation\",\n \"The Goodyear Tire & Rubber Company\",\n \"Granite Construction Incorporated\",\n \"Graybar Electric Company Inc.\",\n \"Great Lakes Chemical Corporation\",\n \"Great Plains Energy Inc.\",\n \"GreenPoint Financial Corp.\",\n \"Greif Bros. Corporation\",\n \"Grey Global Group Inc.\",\n \"Group 1 Automotive Inc.\",\n \"Guidant Corporation\",\n \"H&R Block Inc.\",\n \"H.B. Fuller Company\",\n \"H.J. Heinz Company\",\n \"Halliburton Co.\",\n \"Harley-Davidson Inc.\",\n \"Harman International Industries Inc.\",\n \"Harrah's Entertainment Inc.\",\n \"Harris Corp.\",\n \"Harsco Corp.\",\n \"Hartford Financial Services Group Inc.\",\n \"Hasbro Inc.\",\n \"Hawaiian Electric Industries Inc.\",\n \"HCA Inc.\",\n \"Health Management Associates Inc.\",\n \"Health Net Inc.\",\n \"Healthsouth Corp\",\n \"Henry Schein Inc.\",\n \"Hercules Inc.\",\n \"Herman Miller Inc.\",\n \"Hershey Foods Corp.\",\n \"Hewlett-Packard Company\",\n \"Hibernia Corp.\",\n \"Hillenbrand Industries Inc.\",\n \"Hilton Hotels Corp.\",\n \"Hollywood Entertainment Corp.\",\n \"Home Depot Inc.\",\n \"Hon Industries Inc.\",\n \"Honeywell International Inc.\",\n \"Hormel Foods Corp.\",\n \"Host Marriott Corp.\",\n \"Household International Corp.\",\n \"Hovnanian Enterprises Inc.\",\n \"Hub Group Inc.\",\n \"Hubbell Inc.\",\n \"Hughes Supply Inc.\",\n \"Humana Inc.\",\n \"Huntington Bancshares Inc.\",\n \"Idacorp Inc.\",\n \"IDT Corporation\",\n \"IKON Office Solutions Inc.\",\n \"Illinois Tool Works Inc.\",\n \"IMC Global Inc.\",\n \"Imperial Sugar Company\",\n \"IMS Health Inc.\",\n \"Ingles Market Inc\",\n \"Ingram Micro Inc.\",\n \"Insight Enterprises Inc.\",\n \"Integrated Electrical Services Inc.\",\n \"Intel Corporation\",\n \"International Paper Co.\",\n \"Interpublic Group of Companies Inc.\",\n \"Interstate Bakeries Corporation\",\n \"International Business Machines Corp.\",\n \"International Flavors & Fragrances Inc.\",\n \"International Multifoods Corporation\",\n \"Intuit Inc.\",\n \"IT Group Inc.\",\n \"ITT Industries Inc.\",\n \"Ivax Corp.\",\n \"J.B. Hunt Transport Services Inc.\",\n \"J.C. Penny Co.\",\n \"J.P. Morgan Chase & Co.\",\n \"Jabil Circuit Inc.\",\n \"Jack In The Box Inc.\",\n \"Jacobs Engineering Group Inc.\",\n \"JDS Uniphase Corp.\",\n \"Jefferson-Pilot Co.\",\n \"John Hancock Financial Services Inc.\",\n \"Johnson & Johnson\",\n \"Johnson Controls Inc.\",\n \"Jones Apparel Group Inc.\",\n \"KB Home\",\n \"Kellogg Company\",\n \"Kellwood Company\",\n \"Kelly Services Inc.\",\n \"Kemet Corp.\",\n \"Kennametal Inc.\",\n \"Kerr-McGee Corporation\",\n \"KeyCorp\",\n \"KeySpan Corp.\",\n \"Kimball International Inc.\",\n \"Kimberly-Clark Corporation\",\n \"Kindred Healthcare Inc.\",\n \"KLA-Tencor Corporation\",\n \"K-Mart Corp.\",\n \"Knight-Ridder Inc.\",\n \"Kohl's Corp.\",\n \"KPMG Consulting Inc.\",\n \"Kroger Co.\",\n \"L-3 Communications Holdings Inc.\",\n \"Laboratory Corporation of America Holdings\",\n \"Lam Research Corporation\",\n \"LandAmerica Financial Group Inc.\",\n \"Lands' End Inc.\",\n \"Landstar System Inc.\",\n \"La-Z-Boy Inc.\",\n \"Lear Corporation\",\n \"Legg Mason Inc.\",\n \"Leggett & Platt Inc.\",\n \"Lehman Brothers Holdings Inc.\",\n \"Lennar Corporation\",\n \"Lennox International Inc.\",\n \"Level 3 Communications Inc.\",\n \"Levi Strauss & Co.\",\n \"Lexmark International Inc.\",\n \"Limited Inc.\",\n \"Lincoln National Corporation\",\n \"Linens 'n Things Inc.\",\n \"Lithia Motors Inc.\",\n \"Liz Claiborne Inc.\",\n \"Lockheed Martin Corporation\",\n \"Loews Corporation\",\n \"Longs Drug Stores Corporation\",\n \"Louisiana-Pacific Corporation\",\n \"Lowe's Companies Inc.\",\n \"LSI Logic Corporation\",\n \"The LTV Corporation\",\n \"The Lubrizol Corporation\",\n \"Lucent Technologies Inc.\",\n \"Lyondell Chemical Company\",\n \"M & T Bank Corporation\",\n \"Magellan Health Services Inc.\",\n \"Mail-Well Inc.\",\n \"Mandalay Resort Group\",\n \"Manor Care Inc.\",\n \"Manpower Inc.\",\n \"Marathon Oil Corporation\",\n \"Mariner Health Care Inc.\",\n \"Markel Corporation\",\n \"Marriott International Inc.\",\n \"Marsh & McLennan Companies Inc.\",\n \"Marsh Supermarkets Inc.\",\n \"Marshall & Ilsley Corporation\",\n \"Martin Marietta Materials Inc.\",\n \"Masco Corporation\",\n \"Massey Energy Company\",\n \"MasTec Inc.\",\n \"Mattel Inc.\",\n \"Maxim Integrated Products Inc.\",\n \"Maxtor Corporation\",\n \"Maxxam Inc.\",\n \"The May Department Stores Company\",\n \"Maytag Corporation\",\n \"MBNA Corporation\",\n \"McCormick & Company Incorporated\",\n \"McDonald's Corporation\",\n \"The McGraw-Hill Companies Inc.\",\n \"McKesson Corporation\",\n \"McLeodUSA Incorporated\",\n \"M.D.C. Holdings Inc.\",\n \"MDU Resources Group Inc.\",\n \"MeadWestvaco Corporation\",\n \"Medtronic Inc.\",\n \"Mellon Financial Corporation\",\n \"The Men's Wearhouse Inc.\",\n \"Merck & Co., Inc.\",\n \"Mercury General Corporation\",\n \"Merrill Lynch & Co. Inc.\",\n \"Metaldyne Corporation\",\n \"Metals USA Inc.\",\n \"MetLife Inc.\",\n \"Metris Companies Inc\",\n \"MGIC Investment Corporation\",\n \"MGM Mirage\",\n \"Michaels Stores Inc.\",\n \"Micron Technology Inc.\",\n \"Microsoft Corporation\",\n \"Milacron Inc.\",\n \"Millennium Chemicals Inc.\",\n \"Mirant Corporation\",\n \"Mohawk Industries Inc.\",\n \"Molex Incorporated\",\n \"The MONY Group Inc.\",\n \"Morgan Stanley Dean Witter & Co.\",\n \"Motorola Inc.\",\n \"MPS Group Inc.\",\n \"Murphy Oil Corporation\",\n \"Nabors Industries Inc\",\n \"Nacco Industries Inc\",\n \"Nash Finch Company\",\n \"National City Corp.\",\n \"National Commerce Financial Corporation\",\n \"National Fuel Gas Company\",\n \"National Oilwell Inc\",\n \"National Rural Utilities Cooperative Finance Corporation\",\n \"National Semiconductor Corporation\",\n \"National Service Industries Inc\",\n \"Navistar International Corporation\",\n \"NCR Corporation\",\n \"The Neiman Marcus Group Inc.\",\n \"New Jersey Resources Corporation\",\n \"New York Times Company\",\n \"Newell Rubbermaid Inc\",\n \"Newmont Mining Corporation\",\n \"Nextel Communications Inc\",\n \"Nicor Inc\",\n \"Nike Inc\",\n \"NiSource Inc\",\n \"Noble Energy Inc\",\n \"Nordstrom Inc\",\n \"Norfolk Southern Corporation\",\n \"Nortek Inc\",\n \"North Fork Bancorporation Inc\",\n \"Northeast Utilities System\",\n \"Northern Trust Corporation\",\n \"Northrop Grumman Corporation\",\n \"NorthWestern Corporation\",\n \"Novellus Systems Inc\",\n \"NSTAR\",\n \"NTL Incorporated\",\n \"Nucor Corp\",\n \"Nvidia Corp\",\n \"NVR Inc\",\n \"Northwest Airlines Corp\",\n \"Occidental Petroleum Corp\",\n \"Ocean Energy Inc\",\n \"Office Depot Inc.\",\n \"OfficeMax Inc\",\n \"OGE Energy Corp\",\n \"Oglethorpe Power Corp.\",\n \"Ohio Casualty Corp.\",\n \"Old Republic International Corp.\",\n \"Olin Corp.\",\n \"OM Group Inc\",\n \"Omnicare Inc\",\n \"Omnicom Group\",\n \"On Semiconductor Corp\",\n \"ONEOK Inc\",\n \"Oracle Corp\",\n \"Oshkosh Truck Corp\",\n \"Outback Steakhouse Inc.\",\n \"Owens & Minor Inc.\",\n \"Owens Corning\",\n \"Owens-Illinois Inc\",\n \"Oxford Health Plans Inc\",\n \"Paccar Inc\",\n \"PacifiCare Health Systems Inc\",\n \"Packaging Corp. of America\",\n \"Pactiv Corp\",\n \"Pall Corp\",\n \"Pantry Inc\",\n \"Park Place Entertainment Corp\",\n \"Parker Hannifin Corp.\",\n \"Pathmark Stores Inc.\",\n \"Paychex Inc\",\n \"Payless Shoesource Inc\",\n \"Penn Traffic Co.\",\n \"Pennzoil-Quaker State Company\",\n \"Pentair Inc\",\n \"Peoples Energy Corp.\",\n \"PeopleSoft Inc\",\n \"Pep Boys Manny, Moe & Jack\",\n \"Potomac Electric Power Co.\",\n \"Pepsi Bottling Group Inc.\",\n \"PepsiAmericas Inc.\",\n \"PepsiCo Inc.\",\n \"Performance Food Group Co.\",\n \"Perini Corp\",\n \"PerkinElmer Inc\",\n \"Perot Systems Corp\",\n \"Petco Animal Supplies Inc.\",\n \"Peter Kiewit Sons', Inc.\",\n \"PETsMART Inc\",\n \"Pfizer Inc\",\n \"Pacific Gas & Electric Corp.\",\n \"Pharmacia Corp\",\n \"Phar Mor Inc.\",\n \"Phelps Dodge Corp.\",\n \"Philip Morris Companies Inc.\",\n \"Phillips Petroleum Co\",\n \"Phillips Van Heusen Corp.\",\n \"Phoenix Companies Inc\",\n \"Pier 1 Imports Inc.\",\n \"Pilgrim's Pride Corporation\",\n \"Pinnacle West Capital Corp\",\n \"Pioneer-Standard Electronics Inc.\",\n \"Pitney Bowes Inc.\",\n \"Pittston Brinks Group\",\n \"Plains All American Pipeline LP\",\n \"PNC Financial Services Group Inc.\",\n \"PNM Resources Inc\",\n \"Polaris Industries Inc.\",\n \"Polo Ralph Lauren Corp\",\n \"PolyOne Corp\",\n \"Popular Inc\",\n \"Potlatch Corp\",\n \"PPG Industries Inc\",\n \"PPL Corp\",\n \"Praxair Inc\",\n \"Precision Castparts Corp\",\n \"Premcor Inc.\",\n \"Pride International Inc\",\n \"Primedia Inc\",\n \"Principal Financial Group Inc.\",\n \"Procter & Gamble Co.\",\n \"Pro-Fac Cooperative Inc.\",\n \"Progress Energy Inc\",\n \"Progressive Corporation\",\n \"Protective Life Corp\",\n \"Provident Financial Group\",\n \"Providian Financial Corp.\",\n \"Prudential Financial Inc.\",\n \"PSS World Medical Inc\",\n \"Public Service Enterprise Group Inc.\",\n \"Publix Super Markets Inc.\",\n \"Puget Energy Inc.\",\n \"Pulte Homes Inc\",\n \"Qualcomm Inc\",\n \"Quanta Services Inc.\",\n \"Quantum Corp\",\n \"Quest Diagnostics Inc.\",\n \"Questar Corp\",\n \"Quintiles Transnational\",\n \"Qwest Communications Intl Inc\",\n \"R.J. Reynolds Tobacco Company\",\n \"R.R. Donnelley & Sons Company\",\n \"Radio Shack Corporation\",\n \"Raymond James Financial Inc.\",\n \"Raytheon Company\",\n \"Reader's Digest Association Inc.\",\n \"Reebok International Ltd.\",\n \"Regions Financial Corp.\",\n \"Regis Corporation\",\n \"Reliance Steel & Aluminum Co.\",\n \"Reliant Energy Inc.\",\n \"Rent A Center Inc\",\n \"Republic Services Inc\",\n \"Revlon Inc\",\n \"RGS Energy Group Inc\",\n \"Rite Aid Corp\",\n \"Riverwood Holding Inc.\",\n \"RoadwayCorp\",\n \"Robert Half International Inc.\",\n \"Rock-Tenn Co\",\n \"Rockwell Automation Inc\",\n \"Rockwell Collins Inc\",\n \"Rohm & Haas Co.\",\n \"Ross Stores Inc\",\n \"RPM Inc.\",\n \"Ruddick Corp\",\n \"Ryder System Inc\",\n \"Ryerson Tull Inc\",\n \"Ryland Group Inc.\",\n \"Sabre Holdings Corp\",\n \"Safeco Corp\",\n \"Safeguard Scientifics Inc.\",\n \"Safeway Inc\",\n \"Saks Inc\",\n \"Sanmina-SCI Inc\",\n \"Sara Lee Corp\",\n \"SBC Communications Inc\",\n \"Scana Corp.\",\n \"Schering-Plough Corp\",\n \"Scholastic Corp\",\n \"SCI Systems Onc.\",\n \"Science Applications Intl. Inc.\",\n \"Scientific-Atlanta Inc\",\n \"Scotts Company\",\n \"Seaboard Corp\",\n \"Sealed Air Corp\",\n \"Sears Roebuck & Co\",\n \"Sempra Energy\",\n \"Sequa Corp\",\n \"Service Corp. International\",\n \"ServiceMaster Co\",\n \"Shaw Group Inc\",\n \"Sherwin-Williams Company\",\n \"Shopko Stores Inc\",\n \"Siebel Systems Inc\",\n \"Sierra Health Services Inc\",\n \"Sierra Pacific Resources\",\n \"Silgan Holdings Inc.\",\n \"Silicon Graphics Inc\",\n \"Simon Property Group Inc\",\n \"SLM Corporation\",\n \"Smith International Inc\",\n \"Smithfield Foods Inc\",\n \"Smurfit-Stone Container Corp\",\n \"Snap-On Inc\",\n \"Solectron Corp\",\n \"Solutia Inc\",\n \"Sonic Automotive Inc.\",\n \"Sonoco Products Co.\",\n \"Southern Company\",\n \"Southern Union Company\",\n \"SouthTrust Corp.\",\n \"Southwest Airlines Co\",\n \"Southwest Gas Corp\",\n \"Sovereign Bancorp Inc.\",\n \"Spartan Stores Inc\",\n \"Spherion Corp\",\n \"Sports Authority Inc\",\n \"Sprint Corp.\",\n \"SPX Corp\",\n \"St. Jude Medical Inc\",\n \"St. Paul Cos.\",\n \"Staff Leasing Inc.\",\n \"StanCorp Financial Group Inc\",\n \"Standard Pacific Corp.\",\n \"Stanley Works\",\n \"Staples Inc\",\n \"Starbucks Corp\",\n \"Starwood Hotels & Resorts Worldwide Inc\",\n \"State Street Corp.\",\n \"Stater Bros. Holdings Inc.\",\n \"Steelcase Inc\",\n \"Stein Mart Inc\",\n \"Stewart & Stevenson Services Inc\",\n \"Stewart Information Services Corp\",\n \"Stilwell Financial Inc\",\n \"Storage Technology Corporation\",\n \"Stryker Corp\",\n \"Sun Healthcare Group Inc.\",\n \"Sun Microsystems Inc.\",\n \"SunGard Data Systems Inc.\",\n \"Sunoco Inc.\",\n \"SunTrust Banks Inc\",\n \"Supervalu Inc\",\n \"Swift Transportation, Co., Inc\",\n \"Symbol Technologies Inc\",\n \"Synovus Financial Corp.\",\n \"Sysco Corp\",\n \"Systemax Inc.\",\n \"Target Corp.\",\n \"Tech Data Corporation\",\n \"TECO Energy Inc\",\n \"Tecumseh Products Company\",\n \"Tektronix Inc\",\n \"Teleflex Incorporated\",\n \"Telephone & Data Systems Inc\",\n \"Tellabs Inc.\",\n \"Temple-Inland Inc\",\n \"Tenet Healthcare Corporation\",\n \"Tenneco Automotive Inc.\",\n \"Teradyne Inc\",\n \"Terex Corp\",\n \"Tesoro Petroleum Corp.\",\n \"Texas Industries Inc.\",\n \"Texas Instruments Incorporated\",\n \"Textron Inc\",\n \"Thermo Electron Corporation\",\n \"Thomas & Betts Corporation\",\n \"Tiffany & Co\",\n \"Timken Company\",\n \"TJX Companies Inc\",\n \"TMP Worldwide Inc\",\n \"Toll Brothers Inc\",\n \"Torchmark Corporation\",\n \"Toro Company\",\n \"Tower Automotive Inc.\",\n \"Toys 'R' Us Inc\",\n \"Trans World Entertainment Corp.\",\n \"TransMontaigne Inc\",\n \"Transocean Inc\",\n \"TravelCenters of America Inc.\",\n \"Triad Hospitals Inc\",\n \"Tribune Company\",\n \"Trigon Healthcare Inc.\",\n \"Trinity Industries Inc\",\n \"Trump Hotels & Casino Resorts Inc.\",\n \"TruServ Corporation\",\n \"TRW Inc\",\n \"TXU Corp\",\n \"Tyson Foods Inc\",\n \"U.S. Bancorp\",\n \"U.S. Industries Inc.\",\n \"UAL Corporation\",\n \"UGI Corporation\",\n \"Unified Western Grocers Inc\",\n \"Union Pacific Corporation\",\n \"Union Planters Corp\",\n \"Unisource Energy Corp\",\n \"Unisys Corporation\",\n \"United Auto Group Inc\",\n \"United Defense Industries Inc.\",\n \"United Parcel Service Inc\",\n \"United Rentals Inc\",\n \"United Stationers Inc\",\n \"United Technologies Corporation\",\n \"UnitedHealth Group Incorporated\",\n \"Unitrin Inc\",\n \"Universal Corporation\",\n \"Universal Forest Products Inc\",\n \"Universal Health Services Inc\",\n \"Unocal Corporation\",\n \"Unova Inc\",\n \"UnumProvident Corporation\",\n \"URS Corporation\",\n \"US Airways Group Inc\",\n \"US Oncology Inc\",\n \"USA Interactive\",\n \"USFreighways Corporation\",\n \"USG Corporation\",\n \"UST Inc\",\n \"Valero Energy Corporation\",\n \"Valspar Corporation\",\n \"Value City Department Stores Inc\",\n \"Varco International Inc\",\n \"Vectren Corporation\",\n \"Veritas Software Corporation\",\n \"Verizon Communications Inc\",\n \"VF Corporation\",\n \"Viacom Inc\",\n \"Viad Corp\",\n \"Viasystems Group Inc\",\n \"Vishay Intertechnology Inc\",\n \"Visteon Corporation\",\n \"Volt Information Sciences Inc\",\n \"Vulcan Materials Company\",\n \"W.R. Berkley Corporation\",\n \"W.R. Grace & Co\",\n \"W.W. Grainger Inc\",\n \"Wachovia Corporation\",\n \"Wakenhut Corporation\",\n \"Walgreen Co\",\n \"Wallace Computer Services Inc\",\n \"Wal-Mart Stores Inc\",\n \"Walt Disney Co\",\n \"Walter Industries Inc\",\n \"Washington Mutual Inc\",\n \"Washington Post Co.\",\n \"Waste Management Inc\",\n \"Watsco Inc\",\n \"Weatherford International Inc\",\n \"Weis Markets Inc.\",\n \"Wellpoint Health Networks Inc\",\n \"Wells Fargo & Company\",\n \"Wendy's International Inc\",\n \"Werner Enterprises Inc\",\n \"WESCO International Inc\",\n \"Western Digital Inc\",\n \"Western Gas Resources Inc\",\n \"WestPoint Stevens Inc\",\n \"Weyerhauser Company\",\n \"WGL Holdings Inc\",\n \"Whirlpool Corporation\",\n \"Whole Foods Market Inc\",\n \"Willamette Industries Inc.\",\n \"Williams Companies Inc\",\n \"Williams Sonoma Inc\",\n \"Winn Dixie Stores Inc\",\n \"Wisconsin Energy Corporation\",\n \"Wm Wrigley Jr Company\",\n \"World Fuel Services Corporation\",\n \"WorldCom Inc\",\n \"Worthington Industries Inc\",\n \"WPS Resources Corporation\",\n \"Wyeth\",\n \"Wyndham International Inc\",\n \"Xcel Energy Inc\",\n \"Xerox Corp\",\n \"Xilinx Inc\",\n \"XO Communications Inc\",\n \"Yellow Corporation\",\n \"York International Corp\",\n \"Yum Brands Inc.\",\n \"Zale Corporation\",\n \"Zions Bancorporation\"\n ],\n\n fileExtension : {\n \"raster\" : [\"bmp\", \"gif\", \"gpl\", \"ico\", \"jpeg\", \"psd\", \"png\", \"psp\", \"raw\", \"tiff\"],\n \"vector\" : [\"3dv\", \"amf\", \"awg\", \"ai\", \"cgm\", \"cdr\", \"cmx\", \"dxf\", \"e2d\", \"egt\", \"eps\", \"fs\", \"odg\", \"svg\", \"xar\"],\n \"3d\" : [\"3dmf\", \"3dm\", \"3mf\", \"3ds\", \"an8\", \"aoi\", \"blend\", \"cal3d\", \"cob\", \"ctm\", \"iob\", \"jas\", \"max\", \"mb\", \"mdx\", \"obj\", \"x\", \"x3d\"],\n \"document\" : [\"doc\", \"docx\", \"dot\", \"html\", \"xml\", \"odt\", \"odm\", \"ott\", \"csv\", \"rtf\", \"tex\", \"xhtml\", \"xps\"]\n },\n\n // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json\n timezones: [\n {\n \"name\": \"Dateline Standard Time\",\n \"abbr\": \"DST\",\n \"offset\": -12,\n \"isdst\": false,\n \"text\": \"(UTC-12:00) International Date Line West\",\n \"utc\": [\n \"Etc/GMT+12\"\n ]\n },\n {\n \"name\": \"UTC-11\",\n \"abbr\": \"U\",\n \"offset\": -11,\n \"isdst\": false,\n \"text\": \"(UTC-11:00) Coordinated Universal Time-11\",\n \"utc\": [\n \"Etc/GMT+11\",\n \"Pacific/Midway\",\n \"Pacific/Niue\",\n \"Pacific/Pago_Pago\"\n ]\n },\n {\n \"name\": \"Hawaiian Standard Time\",\n \"abbr\": \"HST\",\n \"offset\": -10,\n \"isdst\": false,\n \"text\": \"(UTC-10:00) Hawaii\",\n \"utc\": [\n \"Etc/GMT+10\",\n \"Pacific/Honolulu\",\n \"Pacific/Johnston\",\n \"Pacific/Rarotonga\",\n \"Pacific/Tahiti\"\n ]\n },\n {\n \"name\": \"Alaskan Standard Time\",\n \"abbr\": \"AKDT\",\n \"offset\": -8,\n \"isdst\": true,\n \"text\": \"(UTC-09:00) Alaska\",\n \"utc\": [\n \"America/Anchorage\",\n \"America/Juneau\",\n \"America/Nome\",\n \"America/Sitka\",\n \"America/Yakutat\"\n ]\n },\n {\n \"name\": \"Pacific Standard Time (Mexico)\",\n \"abbr\": \"PDT\",\n \"offset\": -7,\n \"isdst\": true,\n \"text\": \"(UTC-08:00) Baja California\",\n \"utc\": [\n \"America/Santa_Isabel\"\n ]\n },\n {\n \"name\": \"Pacific Standard Time\",\n \"abbr\": \"PDT\",\n \"offset\": -7,\n \"isdst\": true,\n \"text\": \"(UTC-08:00) Pacific Time (US & Canada)\",\n \"utc\": [\n \"America/Dawson\",\n \"America/Los_Angeles\",\n \"America/Tijuana\",\n \"America/Vancouver\",\n \"America/Whitehorse\",\n \"PST8PDT\"\n ]\n },\n {\n \"name\": \"US Mountain Standard Time\",\n \"abbr\": \"UMST\",\n \"offset\": -7,\n \"isdst\": false,\n \"text\": \"(UTC-07:00) Arizona\",\n \"utc\": [\n \"America/Creston\",\n \"America/Dawson_Creek\",\n \"America/Hermosillo\",\n \"America/Phoenix\",\n \"Etc/GMT+7\"\n ]\n },\n {\n \"name\": \"Mountain Standard Time (Mexico)\",\n \"abbr\": \"MDT\",\n \"offset\": -6,\n \"isdst\": true,\n \"text\": \"(UTC-07:00) Chihuahua, La Paz, Mazatlan\",\n \"utc\": [\n \"America/Chihuahua\",\n \"America/Mazatlan\"\n ]\n },\n {\n \"name\": \"Mountain Standard Time\",\n \"abbr\": \"MDT\",\n \"offset\": -6,\n \"isdst\": true,\n \"text\": \"(UTC-07:00) Mountain Time (US & Canada)\",\n \"utc\": [\n \"America/Boise\",\n \"America/Cambridge_Bay\",\n \"America/Denver\",\n \"America/Edmonton\",\n \"America/Inuvik\",\n \"America/Ojinaga\",\n \"America/Yellowknife\",\n \"MST7MDT\"\n ]\n },\n {\n \"name\": \"Central America Standard Time\",\n \"abbr\": \"CAST\",\n \"offset\": -6,\n \"isdst\": false,\n \"text\": \"(UTC-06:00) Central America\",\n \"utc\": [\n \"America/Belize\",\n \"America/Costa_Rica\",\n \"America/El_Salvador\",\n \"America/Guatemala\",\n \"America/Managua\",\n \"America/Tegucigalpa\",\n \"Etc/GMT+6\",\n \"Pacific/Galapagos\"\n ]\n },\n {\n \"name\": \"Central Standard Time\",\n \"abbr\": \"CDT\",\n \"offset\": -5,\n \"isdst\": true,\n \"text\": \"(UTC-06:00) Central Time (US & Canada)\",\n \"utc\": [\n \"America/Chicago\",\n \"America/Indiana/Knox\",\n \"America/Indiana/Tell_City\",\n \"America/Matamoros\",\n \"America/Menominee\",\n \"America/North_Dakota/Beulah\",\n \"America/North_Dakota/Center\",\n \"America/North_Dakota/New_Salem\",\n \"America/Rainy_River\",\n \"America/Rankin_Inlet\",\n \"America/Resolute\",\n \"America/Winnipeg\",\n \"CST6CDT\"\n ]\n },\n {\n \"name\": \"Central Standard Time (Mexico)\",\n \"abbr\": \"CDT\",\n \"offset\": -5,\n \"isdst\": true,\n \"text\": \"(UTC-06:00) Guadalajara, Mexico City, Monterrey\",\n \"utc\": [\n \"America/Bahia_Banderas\",\n \"America/Cancun\",\n \"America/Merida\",\n \"America/Mexico_City\",\n \"America/Monterrey\"\n ]\n },\n {\n \"name\": \"Canada Central Standard Time\",\n \"abbr\": \"CCST\",\n \"offset\": -6,\n \"isdst\": false,\n \"text\": \"(UTC-06:00) Saskatchewan\",\n \"utc\": [\n \"America/Regina\",\n \"America/Swift_Current\"\n ]\n },\n {\n \"name\": \"SA Pacific Standard Time\",\n \"abbr\": \"SPST\",\n \"offset\": -5,\n \"isdst\": false,\n \"text\": \"(UTC-05:00) Bogota, Lima, Quito\",\n \"utc\": [\n \"America/Bogota\",\n \"America/Cayman\",\n \"America/Coral_Harbour\",\n \"America/Eirunepe\",\n \"America/Guayaquil\",\n \"America/Jamaica\",\n \"America/Lima\",\n \"America/Panama\",\n \"America/Rio_Branco\",\n \"Etc/GMT+5\"\n ]\n },\n {\n \"name\": \"Eastern Standard Time\",\n \"abbr\": \"EDT\",\n \"offset\": -4,\n \"isdst\": true,\n \"text\": \"(UTC-05:00) Eastern Time (US & Canada)\",\n \"utc\": [\n \"America/Detroit\",\n \"America/Havana\",\n \"America/Indiana/Petersburg\",\n \"America/Indiana/Vincennes\",\n \"America/Indiana/Winamac\",\n \"America/Iqaluit\",\n \"America/Kentucky/Monticello\",\n \"America/Louisville\",\n \"America/Montreal\",\n \"America/Nassau\",\n \"America/New_York\",\n \"America/Nipigon\",\n \"America/Pangnirtung\",\n \"America/Port-au-Prince\",\n \"America/Thunder_Bay\",\n \"America/Toronto\",\n \"EST5EDT\"\n ]\n },\n {\n \"name\": \"US Eastern Standard Time\",\n \"abbr\": \"UEDT\",\n \"offset\": -4,\n \"isdst\": true,\n \"text\": \"(UTC-05:00) Indiana (East)\",\n \"utc\": [\n \"America/Indiana/Marengo\",\n \"America/Indiana/Vevay\",\n \"America/Indianapolis\"\n ]\n },\n {\n \"name\": \"Venezuela Standard Time\",\n \"abbr\": \"VST\",\n \"offset\": -4.5,\n \"isdst\": false,\n \"text\": \"(UTC-04:30) Caracas\",\n \"utc\": [\n \"America/Caracas\"\n ]\n },\n {\n \"name\": \"Paraguay Standard Time\",\n \"abbr\": \"PST\",\n \"offset\": -4,\n \"isdst\": false,\n \"text\": \"(UTC-04:00) Asuncion\",\n \"utc\": [\n \"America/Asuncion\"\n ]\n },\n {\n \"name\": \"Atlantic Standard Time\",\n \"abbr\": \"ADT\",\n \"offset\": -3,\n \"isdst\": true,\n \"text\": \"(UTC-04:00) Atlantic Time (Canada)\",\n \"utc\": [\n \"America/Glace_Bay\",\n \"America/Goose_Bay\",\n \"America/Halifax\",\n \"America/Moncton\",\n \"America/Thule\",\n \"Atlantic/Bermuda\"\n ]\n },\n {\n \"name\": \"Central Brazilian Standard Time\",\n \"abbr\": \"CBST\",\n \"offset\": -4,\n \"isdst\": false,\n \"text\": \"(UTC-04:00) Cuiaba\",\n \"utc\": [\n \"America/Campo_Grande\",\n \"America/Cuiaba\"\n ]\n },\n {\n \"name\": \"SA Western Standard Time\",\n \"abbr\": \"SWST\",\n \"offset\": -4,\n \"isdst\": false,\n \"text\": \"(UTC-04:00) Georgetown, La Paz, Manaus, San Juan\",\n \"utc\": [\n \"America/Anguilla\",\n \"America/Antigua\",\n \"America/Aruba\",\n \"America/Barbados\",\n \"America/Blanc-Sablon\",\n \"America/Boa_Vista\",\n \"America/Curacao\",\n \"America/Dominica\",\n \"America/Grand_Turk\",\n \"America/Grenada\",\n \"America/Guadeloupe\",\n \"America/Guyana\",\n \"America/Kralendijk\",\n \"America/La_Paz\",\n \"America/Lower_Princes\",\n \"America/Manaus\",\n \"America/Marigot\",\n \"America/Martinique\",\n \"America/Montserrat\",\n \"America/Port_of_Spain\",\n \"America/Porto_Velho\",\n \"America/Puerto_Rico\",\n \"America/Santo_Domingo\",\n \"America/St_Barthelemy\",\n \"America/St_Kitts\",\n \"America/St_Lucia\",\n \"America/St_Thomas\",\n \"America/St_Vincent\",\n \"America/Tortola\",\n \"Etc/GMT+4\"\n ]\n },\n {\n \"name\": \"Pacific SA Standard Time\",\n \"abbr\": \"PSST\",\n \"offset\": -4,\n \"isdst\": false,\n \"text\": \"(UTC-04:00) Santiago\",\n \"utc\": [\n \"America/Santiago\",\n \"Antarctica/Palmer\"\n ]\n },\n {\n \"name\": \"Newfoundland Standard Time\",\n \"abbr\": \"NDT\",\n \"offset\": -2.5,\n \"isdst\": true,\n \"text\": \"(UTC-03:30) Newfoundland\",\n \"utc\": [\n \"America/St_Johns\"\n ]\n },\n {\n \"name\": \"E. South America Standard Time\",\n \"abbr\": \"ESAST\",\n \"offset\": -3,\n \"isdst\": false,\n \"text\": \"(UTC-03:00) Brasilia\",\n \"utc\": [\n \"America/Sao_Paulo\"\n ]\n },\n {\n \"name\": \"Argentina Standard Time\",\n \"abbr\": \"AST\",\n \"offset\": -3,\n \"isdst\": false,\n \"text\": \"(UTC-03:00) Buenos Aires\",\n \"utc\": [\n \"America/Argentina/La_Rioja\",\n \"America/Argentina/Rio_Gallegos\",\n \"America/Argentina/Salta\",\n \"America/Argentina/San_Juan\",\n \"America/Argentina/San_Luis\",\n \"America/Argentina/Tucuman\",\n \"America/Argentina/Ushuaia\",\n \"America/Buenos_Aires\",\n \"America/Catamarca\",\n \"America/Cordoba\",\n \"America/Jujuy\",\n \"America/Mendoza\"\n ]\n },\n {\n \"name\": \"SA Eastern Standard Time\",\n \"abbr\": \"SEST\",\n \"offset\": -3,\n \"isdst\": false,\n \"text\": \"(UTC-03:00) Cayenne, Fortaleza\",\n \"utc\": [\n \"America/Araguaina\",\n \"America/Belem\",\n \"America/Cayenne\",\n \"America/Fortaleza\",\n \"America/Maceio\",\n \"America/Paramaribo\",\n \"America/Recife\",\n \"America/Santarem\",\n \"Antarctica/Rothera\",\n \"Atlantic/Stanley\",\n \"Etc/GMT+3\"\n ]\n },\n {\n \"name\": \"Greenland Standard Time\",\n \"abbr\": \"GDT\",\n \"offset\": -2,\n \"isdst\": true,\n \"text\": \"(UTC-03:00) Greenland\",\n \"utc\": [\n \"America/Godthab\"\n ]\n },\n {\n \"name\": \"Montevideo Standard Time\",\n \"abbr\": \"MST\",\n \"offset\": -3,\n \"isdst\": false,\n \"text\": \"(UTC-03:00) Montevideo\",\n \"utc\": [\n \"America/Montevideo\"\n ]\n },\n {\n \"name\": \"Bahia Standard Time\",\n \"abbr\": \"BST\",\n \"offset\": -3,\n \"isdst\": false,\n \"text\": \"(UTC-03:00) Salvador\",\n \"utc\": [\n \"America/Bahia\"\n ]\n },\n {\n \"name\": \"UTC-02\",\n \"abbr\": \"U\",\n \"offset\": -2,\n \"isdst\": false,\n \"text\": \"(UTC-02:00) Coordinated Universal Time-02\",\n \"utc\": [\n \"America/Noronha\",\n \"Atlantic/South_Georgia\",\n \"Etc/GMT+2\"\n ]\n },\n {\n \"name\": \"Mid-Atlantic Standard Time\",\n \"abbr\": \"MDT\",\n \"offset\": -1,\n \"isdst\": true,\n \"text\": \"(UTC-02:00) Mid-Atlantic - Old\"\n },\n {\n \"name\": \"Azores Standard Time\",\n \"abbr\": \"ADT\",\n \"offset\": 0,\n \"isdst\": true,\n \"text\": \"(UTC-01:00) Azores\",\n \"utc\": [\n \"America/Scoresbysund\",\n \"Atlantic/Azores\"\n ]\n },\n {\n \"name\": \"Cape Verde Standard Time\",\n \"abbr\": \"CVST\",\n \"offset\": -1,\n \"isdst\": false,\n \"text\": \"(UTC-01:00) Cape Verde Is.\",\n \"utc\": [\n \"Atlantic/Cape_Verde\",\n \"Etc/GMT+1\"\n ]\n },\n {\n \"name\": \"Morocco Standard Time\",\n \"abbr\": \"MDT\",\n \"offset\": 1,\n \"isdst\": true,\n \"text\": \"(UTC) Casablanca\",\n \"utc\": [\n \"Africa/Casablanca\",\n \"Africa/El_Aaiun\"\n ]\n },\n {\n \"name\": \"UTC\",\n \"abbr\": \"CUT\",\n \"offset\": 0,\n \"isdst\": false,\n \"text\": \"(UTC) Coordinated Universal Time\",\n \"utc\": [\n \"America/Danmarkshavn\",\n \"Etc/GMT\"\n ]\n },\n {\n \"name\": \"GMT Standard Time\",\n \"abbr\": \"GDT\",\n \"offset\": 1,\n \"isdst\": true,\n \"text\": \"(UTC) Dublin, Edinburgh, Lisbon, London\",\n \"utc\": [\n \"Atlantic/Canary\",\n \"Atlantic/Faeroe\",\n \"Atlantic/Madeira\",\n \"Europe/Dublin\",\n \"Europe/Guernsey\",\n \"Europe/Isle_of_Man\",\n \"Europe/Jersey\",\n \"Europe/Lisbon\",\n \"Europe/London\"\n ]\n },\n {\n \"name\": \"Greenwich Standard Time\",\n \"abbr\": \"GST\",\n \"offset\": 0,\n \"isdst\": false,\n \"text\": \"(UTC) Monrovia, Reykjavik\",\n \"utc\": [\n \"Africa/Abidjan\",\n \"Africa/Accra\",\n \"Africa/Bamako\",\n \"Africa/Banjul\",\n \"Africa/Bissau\",\n \"Africa/Conakry\",\n \"Africa/Dakar\",\n \"Africa/Freetown\",\n \"Africa/Lome\",\n \"Africa/Monrovia\",\n \"Africa/Nouakchott\",\n \"Africa/Ouagadougou\",\n \"Africa/Sao_Tome\",\n \"Atlantic/Reykjavik\",\n \"Atlantic/St_Helena\"\n ]\n },\n {\n \"name\": \"W. Europe Standard Time\",\n \"abbr\": \"WEDT\",\n \"offset\": 2,\n \"isdst\": true,\n \"text\": \"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\",\n \"utc\": [\n \"Arctic/Longyearbyen\",\n \"Europe/Amsterdam\",\n \"Europe/Andorra\",\n \"Europe/Berlin\",\n \"Europe/Busingen\",\n \"Europe/Gibraltar\",\n \"Europe/Luxembourg\",\n \"Europe/Malta\",\n \"Europe/Monaco\",\n \"Europe/Oslo\",\n \"Europe/Rome\",\n \"Europe/San_Marino\",\n \"Europe/Stockholm\",\n \"Europe/Vaduz\",\n \"Europe/Vatican\",\n \"Europe/Vienna\",\n \"Europe/Zurich\"\n ]\n },\n {\n \"name\": \"Central Europe Standard Time\",\n \"abbr\": \"CEDT\",\n \"offset\": 2,\n \"isdst\": true,\n \"text\": \"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague\",\n \"utc\": [\n \"Europe/Belgrade\",\n \"Europe/Bratislava\",\n \"Europe/Budapest\",\n \"Europe/Ljubljana\",\n \"Europe/Podgorica\",\n \"Europe/Prague\",\n \"Europe/Tirane\"\n ]\n },\n {\n \"name\": \"Romance Standard Time\",\n \"abbr\": \"RDT\",\n \"offset\": 2,\n \"isdst\": true,\n \"text\": \"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris\",\n \"utc\": [\n \"Africa/Ceuta\",\n \"Europe/Brussels\",\n \"Europe/Copenhagen\",\n \"Europe/Madrid\",\n \"Europe/Paris\"\n ]\n },\n {\n \"name\": \"Central European Standard Time\",\n \"abbr\": \"CEDT\",\n \"offset\": 2,\n \"isdst\": true,\n \"text\": \"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb\",\n \"utc\": [\n \"Europe/Sarajevo\",\n \"Europe/Skopje\",\n \"Europe/Warsaw\",\n \"Europe/Zagreb\"\n ]\n },\n {\n \"name\": \"W. Central Africa Standard Time\",\n \"abbr\": \"WCAST\",\n \"offset\": 1,\n \"isdst\": false,\n \"text\": \"(UTC+01:00) West Central Africa\",\n \"utc\": [\n \"Africa/Algiers\",\n \"Africa/Bangui\",\n \"Africa/Brazzaville\",\n \"Africa/Douala\",\n \"Africa/Kinshasa\",\n \"Africa/Lagos\",\n \"Africa/Libreville\",\n \"Africa/Luanda\",\n \"Africa/Malabo\",\n \"Africa/Ndjamena\",\n \"Africa/Niamey\",\n \"Africa/Porto-Novo\",\n \"Africa/Tunis\",\n \"Etc/GMT-1\"\n ]\n },\n {\n \"name\": \"Namibia Standard Time\",\n \"abbr\": \"NST\",\n \"offset\": 1,\n \"isdst\": false,\n \"text\": \"(UTC+01:00) Windhoek\",\n \"utc\": [\n \"Africa/Windhoek\"\n ]\n },\n {\n \"name\": \"GTB Standard Time\",\n \"abbr\": \"GDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) Athens, Bucharest\",\n \"utc\": [\n \"Asia/Nicosia\",\n \"Europe/Athens\",\n \"Europe/Bucharest\",\n \"Europe/Chisinau\"\n ]\n },\n {\n \"name\": \"Middle East Standard Time\",\n \"abbr\": \"MEDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) Beirut\",\n \"utc\": [\n \"Asia/Beirut\"\n ]\n },\n {\n \"name\": \"Egypt Standard Time\",\n \"abbr\": \"EST\",\n \"offset\": 2,\n \"isdst\": false,\n \"text\": \"(UTC+02:00) Cairo\",\n \"utc\": [\n \"Africa/Cairo\"\n ]\n },\n {\n \"name\": \"Syria Standard Time\",\n \"abbr\": \"SDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) Damascus\",\n \"utc\": [\n \"Asia/Damascus\"\n ]\n },\n {\n \"name\": \"E. Europe Standard Time\",\n \"abbr\": \"EEDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) E. Europe\"\n },\n {\n \"name\": \"South Africa Standard Time\",\n \"abbr\": \"SAST\",\n \"offset\": 2,\n \"isdst\": false,\n \"text\": \"(UTC+02:00) Harare, Pretoria\",\n \"utc\": [\n \"Africa/Blantyre\",\n \"Africa/Bujumbura\",\n \"Africa/Gaborone\",\n \"Africa/Harare\",\n \"Africa/Johannesburg\",\n \"Africa/Kigali\",\n \"Africa/Lubumbashi\",\n \"Africa/Lusaka\",\n \"Africa/Maputo\",\n \"Africa/Maseru\",\n \"Africa/Mbabane\",\n \"Etc/GMT-2\"\n ]\n },\n {\n \"name\": \"FLE Standard Time\",\n \"abbr\": \"FDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius\",\n \"utc\": [\n \"Europe/Helsinki\",\n \"Europe/Kiev\",\n \"Europe/Mariehamn\",\n \"Europe/Riga\",\n \"Europe/Sofia\",\n \"Europe/Tallinn\",\n \"Europe/Uzhgorod\",\n \"Europe/Vilnius\",\n \"Europe/Zaporozhye\"\n ]\n },\n {\n \"name\": \"Turkey Standard Time\",\n \"abbr\": \"TDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) Istanbul\",\n \"utc\": [\n \"Europe/Istanbul\"\n ]\n },\n {\n \"name\": \"Israel Standard Time\",\n \"abbr\": \"JDT\",\n \"offset\": 3,\n \"isdst\": true,\n \"text\": \"(UTC+02:00) Jerusalem\",\n \"utc\": [\n \"Asia/Jerusalem\"\n ]\n },\n {\n \"name\": \"Libya Standard Time\",\n \"abbr\": \"LST\",\n \"offset\": 2,\n \"isdst\": false,\n \"text\": \"(UTC+02:00) Tripoli\",\n \"utc\": [\n \"Africa/Tripoli\"\n ]\n },\n {\n \"name\": \"Jordan Standard Time\",\n \"abbr\": \"JST\",\n \"offset\": 3,\n \"isdst\": false,\n \"text\": \"(UTC+03:00) Amman\",\n \"utc\": [\n \"Asia/Amman\"\n ]\n },\n {\n \"name\": \"Arabic Standard Time\",\n \"abbr\": \"AST\",\n \"offset\": 3,\n \"isdst\": false,\n \"text\": \"(UTC+03:00) Baghdad\",\n \"utc\": [\n \"Asia/Baghdad\"\n ]\n },\n {\n \"name\": \"Kaliningrad Standard Time\",\n \"abbr\": \"KST\",\n \"offset\": 3,\n \"isdst\": false,\n \"text\": \"(UTC+03:00) Kaliningrad, Minsk\",\n \"utc\": [\n \"Europe/Kaliningrad\",\n \"Europe/Minsk\"\n ]\n },\n {\n \"name\": \"Arab Standard Time\",\n \"abbr\": \"AST\",\n \"offset\": 3,\n \"isdst\": false,\n \"text\": \"(UTC+03:00) Kuwait, Riyadh\",\n \"utc\": [\n \"Asia/Aden\",\n \"Asia/Bahrain\",\n \"Asia/Kuwait\",\n \"Asia/Qatar\",\n \"Asia/Riyadh\"\n ]\n },\n {\n \"name\": \"E. Africa Standard Time\",\n \"abbr\": \"EAST\",\n \"offset\": 3,\n \"isdst\": false,\n \"text\": \"(UTC+03:00) Nairobi\",\n \"utc\": [\n \"Africa/Addis_Ababa\",\n \"Africa/Asmera\",\n \"Africa/Dar_es_Salaam\",\n \"Africa/Djibouti\",\n \"Africa/Juba\",\n \"Africa/Kampala\",\n \"Africa/Khartoum\",\n \"Africa/Mogadishu\",\n \"Africa/Nairobi\",\n \"Antarctica/Syowa\",\n \"Etc/GMT-3\",\n \"Indian/Antananarivo\",\n \"Indian/Comoro\",\n \"Indian/Mayotte\"\n ]\n },\n {\n \"name\": \"Iran Standard Time\",\n \"abbr\": \"IDT\",\n \"offset\": 4.5,\n \"isdst\": true,\n \"text\": \"(UTC+03:30) Tehran\",\n \"utc\": [\n \"Asia/Tehran\"\n ]\n },\n {\n \"name\": \"Arabian Standard Time\",\n \"abbr\": \"AST\",\n \"offset\": 4,\n \"isdst\": false,\n \"text\": \"(UTC+04:00) Abu Dhabi, Muscat\",\n \"utc\": [\n \"Asia/Dubai\",\n \"Asia/Muscat\",\n \"Etc/GMT-4\"\n ]\n },\n {\n \"name\": \"Azerbaijan Standard Time\",\n \"abbr\": \"ADT\",\n \"offset\": 5,\n \"isdst\": true,\n \"text\": \"(UTC+04:00) Baku\",\n \"utc\": [\n \"Asia/Baku\"\n ]\n },\n {\n \"name\": \"Russian Standard Time\",\n \"abbr\": \"RST\",\n \"offset\": 4,\n \"isdst\": false,\n \"text\": \"(UTC+04:00) Moscow, St. Petersburg, Volgograd\",\n \"utc\": [\n \"Europe/Moscow\",\n \"Europe/Samara\",\n \"Europe/Simferopol\",\n \"Europe/Volgograd\"\n ]\n },\n {\n \"name\": \"Mauritius Standard Time\",\n \"abbr\": \"MST\",\n \"offset\": 4,\n \"isdst\": false,\n \"text\": \"(UTC+04:00) Port Louis\",\n \"utc\": [\n \"Indian/Mahe\",\n \"Indian/Mauritius\",\n \"Indian/Reunion\"\n ]\n },\n {\n \"name\": \"Georgian Standard Time\",\n \"abbr\": \"GST\",\n \"offset\": 4,\n \"isdst\": false,\n \"text\": \"(UTC+04:00) Tbilisi\",\n \"utc\": [\n \"Asia/Tbilisi\"\n ]\n },\n {\n \"name\": \"Caucasus Standard Time\",\n \"abbr\": \"CST\",\n \"offset\": 4,\n \"isdst\": false,\n \"text\": \"(UTC+04:00) Yerevan\",\n \"utc\": [\n \"Asia/Yerevan\"\n ]\n },\n {\n \"name\": \"Afghanistan Standard Time\",\n \"abbr\": \"AST\",\n \"offset\": 4.5,\n \"isdst\": false,\n \"text\": \"(UTC+04:30) Kabul\",\n \"utc\": [\n \"Asia/Kabul\"\n ]\n },\n {\n \"name\": \"West Asia Standard Time\",\n \"abbr\": \"WAST\",\n \"offset\": 5,\n \"isdst\": false,\n \"text\": \"(UTC+05:00) Ashgabat, Tashkent\",\n \"utc\": [\n \"Antarctica/Mawson\",\n \"Asia/Aqtau\",\n \"Asia/Aqtobe\",\n \"Asia/Ashgabat\",\n \"Asia/Dushanbe\",\n \"Asia/Oral\",\n \"Asia/Samarkand\",\n \"Asia/Tashkent\",\n \"Etc/GMT-5\",\n \"Indian/Kerguelen\",\n \"Indian/Maldives\"\n ]\n },\n {\n \"name\": \"Pakistan Standard Time\",\n \"abbr\": \"PST\",\n \"offset\": 5,\n \"isdst\": false,\n \"text\": \"(UTC+05:00) Islamabad, Karachi\",\n \"utc\": [\n \"Asia/Karachi\"\n ]\n },\n {\n \"name\": \"India Standard Time\",\n \"abbr\": \"IST\",\n \"offset\": 5.5,\n \"isdst\": false,\n \"text\": \"(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi\",\n \"utc\": [\n \"Asia/Calcutta\"\n ]\n },\n {\n \"name\": \"Sri Lanka Standard Time\",\n \"abbr\": \"SLST\",\n \"offset\": 5.5,\n \"isdst\": false,\n \"text\": \"(UTC+05:30) Sri Jayawardenepura\",\n \"utc\": [\n \"Asia/Colombo\"\n ]\n },\n {\n \"name\": \"Nepal Standard Time\",\n \"abbr\": \"NST\",\n \"offset\": 5.75,\n \"isdst\": false,\n \"text\": \"(UTC+05:45) Kathmandu\",\n \"utc\": [\n \"Asia/Katmandu\"\n ]\n },\n {\n \"name\": \"Central Asia Standard Time\",\n \"abbr\": \"CAST\",\n \"offset\": 6,\n \"isdst\": false,\n \"text\": \"(UTC+06:00) Astana\",\n \"utc\": [\n \"Antarctica/Vostok\",\n \"Asia/Almaty\",\n \"Asia/Bishkek\",\n \"Asia/Qyzylorda\",\n \"Asia/Urumqi\",\n \"Etc/GMT-6\",\n \"Indian/Chagos\"\n ]\n },\n {\n \"name\": \"Bangladesh Standard Time\",\n \"abbr\": \"BST\",\n \"offset\": 6,\n \"isdst\": false,\n \"text\": \"(UTC+06:00) Dhaka\",\n \"utc\": [\n \"Asia/Dhaka\",\n \"Asia/Thimphu\"\n ]\n },\n {\n \"name\": \"Ekaterinburg Standard Time\",\n \"abbr\": \"EST\",\n \"offset\": 6,\n \"isdst\": false,\n \"text\": \"(UTC+06:00) Ekaterinburg\",\n \"utc\": [\n \"Asia/Yekaterinburg\"\n ]\n },\n {\n \"name\": \"Myanmar Standard Time\",\n \"abbr\": \"MST\",\n \"offset\": 6.5,\n \"isdst\": false,\n \"text\": \"(UTC+06:30) Yangon (Rangoon)\",\n \"utc\": [\n \"Asia/Rangoon\",\n \"Indian/Cocos\"\n ]\n },\n {\n \"name\": \"SE Asia Standard Time\",\n \"abbr\": \"SAST\",\n \"offset\": 7,\n \"isdst\": false,\n \"text\": \"(UTC+07:00) Bangkok, Hanoi, Jakarta\",\n \"utc\": [\n \"Antarctica/Davis\",\n \"Asia/Bangkok\",\n \"Asia/Hovd\",\n \"Asia/Jakarta\",\n \"Asia/Phnom_Penh\",\n \"Asia/Pontianak\",\n \"Asia/Saigon\",\n \"Asia/Vientiane\",\n \"Etc/GMT-7\",\n \"Indian/Christmas\"\n ]\n },\n {\n \"name\": \"N. Central Asia Standard Time\",\n \"abbr\": \"NCAST\",\n \"offset\": 7,\n \"isdst\": false,\n \"text\": \"(UTC+07:00) Novosibirsk\",\n \"utc\": [\n \"Asia/Novokuznetsk\",\n \"Asia/Novosibirsk\",\n \"Asia/Omsk\"\n ]\n },\n {\n \"name\": \"China Standard Time\",\n \"abbr\": \"CST\",\n \"offset\": 8,\n \"isdst\": false,\n \"text\": \"(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi\",\n \"utc\": [\n \"Asia/Hong_Kong\",\n \"Asia/Macau\",\n \"Asia/Shanghai\"\n ]\n },\n {\n \"name\": \"North Asia Standard Time\",\n \"abbr\": \"NAST\",\n \"offset\": 8,\n \"isdst\": false,\n \"text\": \"(UTC+08:00) Krasnoyarsk\",\n \"utc\": [\n \"Asia/Krasnoyarsk\"\n ]\n },\n {\n \"name\": \"Singapore Standard Time\",\n \"abbr\": \"MPST\",\n \"offset\": 8,\n \"isdst\": false,\n \"text\": \"(UTC+08:00) Kuala Lumpur, Singapore\",\n \"utc\": [\n \"Asia/Brunei\",\n \"Asia/Kuala_Lumpur\",\n \"Asia/Kuching\",\n \"Asia/Makassar\",\n \"Asia/Manila\",\n \"Asia/Singapore\",\n \"Etc/GMT-8\"\n ]\n },\n {\n \"name\": \"W. Australia Standard Time\",\n \"abbr\": \"WAST\",\n \"offset\": 8,\n \"isdst\": false,\n \"text\": \"(UTC+08:00) Perth\",\n \"utc\": [\n \"Antarctica/Casey\",\n \"Australia/Perth\"\n ]\n },\n {\n \"name\": \"Taipei Standard Time\",\n \"abbr\": \"TST\",\n \"offset\": 8,\n \"isdst\": false,\n \"text\": \"(UTC+08:00) Taipei\",\n \"utc\": [\n \"Asia/Taipei\"\n ]\n },\n {\n \"name\": \"Ulaanbaatar Standard Time\",\n \"abbr\": \"UST\",\n \"offset\": 8,\n \"isdst\": false,\n \"text\": \"(UTC+08:00) Ulaanbaatar\",\n \"utc\": [\n \"Asia/Choibalsan\",\n \"Asia/Ulaanbaatar\"\n ]\n },\n {\n \"name\": \"North Asia East Standard Time\",\n \"abbr\": \"NAEST\",\n \"offset\": 9,\n \"isdst\": false,\n \"text\": \"(UTC+09:00) Irkutsk\",\n \"utc\": [\n \"Asia/Irkutsk\"\n ]\n },\n {\n \"name\": \"Tokyo Standard Time\",\n \"abbr\": \"TST\",\n \"offset\": 9,\n \"isdst\": false,\n \"text\": \"(UTC+09:00) Osaka, Sapporo, Tokyo\",\n \"utc\": [\n \"Asia/Dili\",\n \"Asia/Jayapura\",\n \"Asia/Tokyo\",\n \"Etc/GMT-9\",\n \"Pacific/Palau\"\n ]\n },\n {\n \"name\": \"Korea Standard Time\",\n \"abbr\": \"KST\",\n \"offset\": 9,\n \"isdst\": false,\n \"text\": \"(UTC+09:00) Seoul\",\n \"utc\": [\n \"Asia/Pyongyang\",\n \"Asia/Seoul\"\n ]\n },\n {\n \"name\": \"Cen. Australia Standard Time\",\n \"abbr\": \"CAST\",\n \"offset\": 9.5,\n \"isdst\": false,\n \"text\": \"(UTC+09:30) Adelaide\",\n \"utc\": [\n \"Australia/Adelaide\",\n \"Australia/Broken_Hill\"\n ]\n },\n {\n \"name\": \"AUS Central Standard Time\",\n \"abbr\": \"ACST\",\n \"offset\": 9.5,\n \"isdst\": false,\n \"text\": \"(UTC+09:30) Darwin\",\n \"utc\": [\n \"Australia/Darwin\"\n ]\n },\n {\n \"name\": \"E. Australia Standard Time\",\n \"abbr\": \"EAST\",\n \"offset\": 10,\n \"isdst\": false,\n \"text\": \"(UTC+10:00) Brisbane\",\n \"utc\": [\n \"Australia/Brisbane\",\n \"Australia/Lindeman\"\n ]\n },\n {\n \"name\": \"AUS Eastern Standard Time\",\n \"abbr\": \"AEST\",\n \"offset\": 10,\n \"isdst\": false,\n \"text\": \"(UTC+10:00) Canberra, Melbourne, Sydney\",\n \"utc\": [\n \"Australia/Melbourne\",\n \"Australia/Sydney\"\n ]\n },\n {\n \"name\": \"West Pacific Standard Time\",\n \"abbr\": \"WPST\",\n \"offset\": 10,\n \"isdst\": false,\n \"text\": \"(UTC+10:00) Guam, Port Moresby\",\n \"utc\": [\n \"Antarctica/DumontDUrville\",\n \"Etc/GMT-10\",\n \"Pacific/Guam\",\n \"Pacific/Port_Moresby\",\n \"Pacific/Saipan\",\n \"Pacific/Truk\"\n ]\n },\n {\n \"name\": \"Tasmania Standard Time\",\n \"abbr\": \"TST\",\n \"offset\": 10,\n \"isdst\": false,\n \"text\": \"(UTC+10:00) Hobart\",\n \"utc\": [\n \"Australia/Currie\",\n \"Australia/Hobart\"\n ]\n },\n {\n \"name\": \"Yakutsk Standard Time\",\n \"abbr\": \"YST\",\n \"offset\": 10,\n \"isdst\": false,\n \"text\": \"(UTC+10:00) Yakutsk\",\n \"utc\": [\n \"Asia/Chita\",\n \"Asia/Khandyga\",\n \"Asia/Yakutsk\"\n ]\n },\n {\n \"name\": \"Central Pacific Standard Time\",\n \"abbr\": \"CPST\",\n \"offset\": 11,\n \"isdst\": false,\n \"text\": \"(UTC+11:00) Solomon Is., New Caledonia\",\n \"utc\": [\n \"Antarctica/Macquarie\",\n \"Etc/GMT-11\",\n \"Pacific/Efate\",\n \"Pacific/Guadalcanal\",\n \"Pacific/Kosrae\",\n \"Pacific/Noumea\",\n \"Pacific/Ponape\"\n ]\n },\n {\n \"name\": \"Vladivostok Standard Time\",\n \"abbr\": \"VST\",\n \"offset\": 11,\n \"isdst\": false,\n \"text\": \"(UTC+11:00) Vladivostok\",\n \"utc\": [\n \"Asia/Sakhalin\",\n \"Asia/Ust-Nera\",\n \"Asia/Vladivostok\"\n ]\n },\n {\n \"name\": \"New Zealand Standard Time\",\n \"abbr\": \"NZST\",\n \"offset\": 12,\n \"isdst\": false,\n \"text\": \"(UTC+12:00) Auckland, Wellington\",\n \"utc\": [\n \"Antarctica/McMurdo\",\n \"Pacific/Auckland\"\n ]\n },\n {\n \"name\": \"UTC+12\",\n \"abbr\": \"U\",\n \"offset\": 12,\n \"isdst\": false,\n \"text\": \"(UTC+12:00) Coordinated Universal Time+12\",\n \"utc\": [\n \"Etc/GMT-12\",\n \"Pacific/Funafuti\",\n \"Pacific/Kwajalein\",\n \"Pacific/Majuro\",\n \"Pacific/Nauru\",\n \"Pacific/Tarawa\",\n \"Pacific/Wake\",\n \"Pacific/Wallis\"\n ]\n },\n {\n \"name\": \"Fiji Standard Time\",\n \"abbr\": \"FST\",\n \"offset\": 12,\n \"isdst\": false,\n \"text\": \"(UTC+12:00) Fiji\",\n \"utc\": [\n \"Pacific/Fiji\"\n ]\n },\n {\n \"name\": \"Magadan Standard Time\",\n \"abbr\": \"MST\",\n \"offset\": 12,\n \"isdst\": false,\n \"text\": \"(UTC+12:00) Magadan\",\n \"utc\": [\n \"Asia/Anadyr\",\n \"Asia/Kamchatka\",\n \"Asia/Magadan\",\n \"Asia/Srednekolymsk\"\n ]\n },\n {\n \"name\": \"Kamchatka Standard Time\",\n \"abbr\": \"KDT\",\n \"offset\": 13,\n \"isdst\": true,\n \"text\": \"(UTC+12:00) Petropavlovsk-Kamchatsky - Old\"\n },\n {\n \"name\": \"Tonga Standard Time\",\n \"abbr\": \"TST\",\n \"offset\": 13,\n \"isdst\": false,\n \"text\": \"(UTC+13:00) Nuku'alofa\",\n \"utc\": [\n \"Etc/GMT-13\",\n \"Pacific/Enderbury\",\n \"Pacific/Fakaofo\",\n \"Pacific/Tongatapu\"\n ]\n },\n {\n \"name\": \"Samoa Standard Time\",\n \"abbr\": \"SST\",\n \"offset\": 13,\n \"isdst\": false,\n \"text\": \"(UTC+13:00) Samoa\",\n \"utc\": [\n \"Pacific/Apia\"\n ]\n }\n ],\n //List source: http://answers.google.com/answers/threadview/id/589312.html\n profession: [\n \"Airline Pilot\",\n \"Academic Team\",\n \"Accountant\",\n \"Account Executive\",\n \"Actor\",\n \"Actuary\",\n \"Acquisition Analyst\",\n \"Administrative Asst.\",\n \"Administrative Analyst\",\n \"Administrator\",\n \"Advertising Director\",\n \"Aerospace Engineer\",\n \"Agent\",\n \"Agricultural Inspector\",\n \"Agricultural Scientist\",\n \"Air Traffic Controller\",\n \"Animal Trainer\",\n \"Anthropologist\",\n \"Appraiser\",\n \"Architect\",\n \"Art Director\",\n \"Artist\",\n \"Astronomer\",\n \"Athletic Coach\",\n \"Auditor\",\n \"Author\",\n \"Baker\",\n \"Banker\",\n \"Bankruptcy Attorney\",\n \"Benefits Manager\",\n \"Biologist\",\n \"Bio-feedback Specialist\",\n \"Biomedical Engineer\",\n \"Biotechnical Researcher\",\n \"Broadcaster\",\n \"Broker\",\n \"Building Manager\",\n \"Building Contractor\",\n \"Building Inspector\",\n \"Business Analyst\",\n \"Business Planner\",\n \"Business Manager\",\n \"Buyer\",\n \"Call Center Manager\",\n \"Career Counselor\",\n \"Cash Manager\",\n \"Ceramic Engineer\",\n \"Chief Executive Officer\",\n \"Chief Operation Officer\",\n \"Chef\",\n \"Chemical Engineer\",\n \"Chemist\",\n \"Child Care Manager\",\n \"Chief Medical Officer\",\n \"Chiropractor\",\n \"Cinematographer\",\n \"City Housing Manager\",\n \"City Manager\",\n \"Civil Engineer\",\n \"Claims Manager\",\n \"Clinical Research Assistant\",\n \"Collections Manager.\",\n \"Compliance Manager\",\n \"Comptroller\",\n \"Computer Manager\",\n \"Commercial Artist\",\n \"Communications Affairs Director\",\n \"Communications Director\",\n \"Communications Engineer\",\n \"Compensation Analyst\",\n \"Computer Programmer\",\n \"Computer Ops. Manager\",\n \"Computer Engineer\",\n \"Computer Operator\",\n \"Computer Graphics Specialist\",\n \"Construction Engineer\",\n \"Construction Manager\",\n \"Consultant\",\n \"Consumer Relations Manager\",\n \"Contract Administrator\",\n \"Copyright Attorney\",\n \"Copywriter\",\n \"Corporate Planner\",\n \"Corrections Officer\",\n \"Cosmetologist\",\n \"Credit Analyst\",\n \"Cruise Director\",\n \"Chief Information Officer\",\n \"Chief Technology Officer\",\n \"Customer Service Manager\",\n \"Cryptologist\",\n \"Dancer\",\n \"Data Security Manager\",\n \"Database Manager\",\n \"Day Care Instructor\",\n \"Dentist\",\n \"Designer\",\n \"Design Engineer\",\n \"Desktop Publisher\",\n \"Developer\",\n \"Development Officer\",\n \"Diamond Merchant\",\n \"Dietitian\",\n \"Direct Marketer\",\n \"Director\",\n \"Distribution Manager\",\n \"Diversity Manager\",\n \"Economist\",\n \"EEO Compliance Manager\",\n \"Editor\",\n \"Education Adminator\",\n \"Electrical Engineer\",\n \"Electro Optical Engineer\",\n \"Electronics Engineer\",\n \"Embassy Management\",\n \"Employment Agent\",\n \"Engineer Technician\",\n \"Entrepreneur\",\n \"Environmental Analyst\",\n \"Environmental Attorney\",\n \"Environmental Engineer\",\n \"Environmental Specialist\",\n \"Escrow Officer\",\n \"Estimator\",\n \"Executive Assistant\",\n \"Executive Director\",\n \"Executive Recruiter\",\n \"Facilities Manager\",\n \"Family Counselor\",\n \"Fashion Events Manager\",\n \"Fashion Merchandiser\",\n \"Fast Food Manager\",\n \"Film Producer\",\n \"Film Production Assistant\",\n \"Financial Analyst\",\n \"Financial Planner\",\n \"Financier\",\n \"Fine Artist\",\n \"Wildlife Specialist\",\n \"Fitness Consultant\",\n \"Flight Attendant\",\n \"Flight Engineer\",\n \"Floral Designer\",\n \"Food & Beverage Director\",\n \"Food Service Manager\",\n \"Forestry Technician\",\n \"Franchise Management\",\n \"Franchise Sales\",\n \"Fraud Investigator\",\n \"Freelance Writer\",\n \"Fund Raiser\",\n \"General Manager\",\n \"Geologist\",\n \"General Counsel\",\n \"Geriatric Specialist\",\n \"Gerontologist\",\n \"Glamour Photographer\",\n \"Golf Club Manager\",\n \"Gourmet Chef\",\n \"Graphic Designer\",\n \"Grounds Keeper\",\n \"Hazardous Waste Manager\",\n \"Health Care Manager\",\n \"Health Therapist\",\n \"Health Service Administrator\",\n \"Hearing Officer\",\n \"Home Economist\",\n \"Horticulturist\",\n \"Hospital Administrator\",\n \"Hotel Manager\",\n \"Human Resources Manager\",\n \"Importer\",\n \"Industrial Designer\",\n \"Industrial Engineer\",\n \"Information Director\",\n \"Inside Sales\",\n \"Insurance Adjuster\",\n \"Interior Decorator\",\n \"Internal Controls Director\",\n \"International Acct.\",\n \"International Courier\",\n \"International Lawyer\",\n \"Interpreter\",\n \"Investigator\",\n \"Investment Banker\",\n \"Investment Manager\",\n \"IT Architect\",\n \"IT Project Manager\",\n \"IT Systems Analyst\",\n \"Jeweler\",\n \"Joint Venture Manager\",\n \"Journalist\",\n \"Labor Negotiator\",\n \"Labor Organizer\",\n \"Labor Relations Manager\",\n \"Lab Services Director\",\n \"Lab Technician\",\n \"Land Developer\",\n \"Landscape Architect\",\n \"Law Enforcement Officer\",\n \"Lawyer\",\n \"Lead Software Engineer\",\n \"Lead Software Test Engineer\",\n \"Leasing Manager\",\n \"Legal Secretary\",\n \"Library Manager\",\n \"Litigation Attorney\",\n \"Loan Officer\",\n \"Lobbyist\",\n \"Logistics Manager\",\n \"Maintenance Manager\",\n \"Management Consultant\",\n \"Managed Care Director\",\n \"Managing Partner\",\n \"Manufacturing Director\",\n \"Manpower Planner\",\n \"Marine Biologist\",\n \"Market Res. Analyst\",\n \"Marketing Director\",\n \"Materials Manager\",\n \"Mathematician\",\n \"Membership Chairman\",\n \"Mechanic\",\n \"Mechanical Engineer\",\n \"Media Buyer\",\n \"Medical Investor\",\n \"Medical Secretary\",\n \"Medical Technician\",\n \"Mental Health Counselor\",\n \"Merchandiser\",\n \"Metallurgical Engineering\",\n \"Meteorologist\",\n \"Microbiologist\",\n \"MIS Manager\",\n \"Motion Picture Director\",\n \"Multimedia Director\",\n \"Musician\",\n \"Network Administrator\",\n \"Network Specialist\",\n \"Network Operator\",\n \"New Product Manager\",\n \"Novelist\",\n \"Nuclear Engineer\",\n \"Nuclear Specialist\",\n \"Nutritionist\",\n \"Nursing Administrator\",\n \"Occupational Therapist\",\n \"Oceanographer\",\n \"Office Manager\",\n \"Operations Manager\",\n \"Operations Research Director\",\n \"Optical Technician\",\n \"Optometrist\",\n \"Organizational Development Manager\",\n \"Outplacement Specialist\",\n \"Paralegal\",\n \"Park Ranger\",\n \"Patent Attorney\",\n \"Payroll Specialist\",\n \"Personnel Specialist\",\n \"Petroleum Engineer\",\n \"Pharmacist\",\n \"Photographer\",\n \"Physical Therapist\",\n \"Physician\",\n \"Physician Assistant\",\n \"Physicist\",\n \"Planning Director\",\n \"Podiatrist\",\n \"Political Analyst\",\n \"Political Scientist\",\n \"Politician\",\n \"Portfolio Manager\",\n \"Preschool Management\",\n \"Preschool Teacher\",\n \"Principal\",\n \"Private Banker\",\n \"Private Investigator\",\n \"Probation Officer\",\n \"Process Engineer\",\n \"Producer\",\n \"Product Manager\",\n \"Product Engineer\",\n \"Production Engineer\",\n \"Production Planner\",\n \"Professional Athlete\",\n \"Professional Coach\",\n \"Professor\",\n \"Project Engineer\",\n \"Project Manager\",\n \"Program Manager\",\n \"Property Manager\",\n \"Public Administrator\",\n \"Public Safety Director\",\n \"PR Specialist\",\n \"Publisher\",\n \"Purchasing Agent\",\n \"Publishing Director\",\n \"Quality Assurance Specialist\",\n \"Quality Control Engineer\",\n \"Quality Control Inspector\",\n \"Radiology Manager\",\n \"Railroad Engineer\",\n \"Real Estate Broker\",\n \"Recreational Director\",\n \"Recruiter\",\n \"Redevelopment Specialist\",\n \"Regulatory Affairs Manager\",\n \"Registered Nurse\",\n \"Rehabilitation Counselor\",\n \"Relocation Manager\",\n \"Reporter\",\n \"Research Specialist\",\n \"Restaurant Manager\",\n \"Retail Store Manager\",\n \"Risk Analyst\",\n \"Safety Engineer\",\n \"Sales Engineer\",\n \"Sales Trainer\",\n \"Sales Promotion Manager\",\n \"Sales Representative\",\n \"Sales Manager\",\n \"Service Manager\",\n \"Sanitation Engineer\",\n \"Scientific Programmer\",\n \"Scientific Writer\",\n \"Securities Analyst\",\n \"Security Consultant\",\n \"Security Director\",\n \"Seminar Presenter\",\n \"Ship's Officer\",\n \"Singer\",\n \"Social Director\",\n \"Social Program Planner\",\n \"Social Research\",\n \"Social Scientist\",\n \"Social Worker\",\n \"Sociologist\",\n \"Software Developer\",\n \"Software Engineer\",\n \"Software Test Engineer\",\n \"Soil Scientist\",\n \"Special Events Manager\",\n \"Special Education Teacher\",\n \"Special Projects Director\",\n \"Speech Pathologist\",\n \"Speech Writer\",\n \"Sports Event Manager\",\n \"Statistician\",\n \"Store Manager\",\n \"Strategic Alliance Director\",\n \"Strategic Planning Director\",\n \"Stress Reduction Specialist\",\n \"Stockbroker\",\n \"Surveyor\",\n \"Structural Engineer\",\n \"Superintendent\",\n \"Supply Chain Director\",\n \"System Engineer\",\n \"Systems Analyst\",\n \"Systems Programmer\",\n \"System Administrator\",\n \"Tax Specialist\",\n \"Teacher\",\n \"Technical Support Specialist\",\n \"Technical Illustrator\",\n \"Technical Writer\",\n \"Technology Director\",\n \"Telecom Analyst\",\n \"Telemarketer\",\n \"Theatrical Director\",\n \"Title Examiner\",\n \"Tour Escort\",\n \"Tour Guide Director\",\n \"Traffic Manager\",\n \"Trainer Translator\",\n \"Transportation Manager\",\n \"Travel Agent\",\n \"Treasurer\",\n \"TV Programmer\",\n \"Underwriter\",\n \"Union Representative\",\n \"University Administrator\",\n \"University Dean\",\n \"Urban Planner\",\n \"Veterinarian\",\n \"Vendor Relations Director\",\n \"Viticulturist\",\n \"Warehouse Manager\"\n ],\n animals : {\n //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals\n \"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\"],\n //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/\n \"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\"],\n \"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\"],\n \"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\"],\n //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html\n \"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\"],\n //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm\n \"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\"],\n //list of zoo animals comes from https://bronxzoo.com/animals\n \"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\"]\n }\n };\n\n var o_hasOwnProperty = Object.prototype.hasOwnProperty;\n var o_keys = (Object.keys || function(obj) {\n var result = [];\n for (var key in obj) {\n if (o_hasOwnProperty.call(obj, key)) {\n result.push(key);\n }\n }\n\n return result;\n });\n\n\n function _copyObject(source, target) {\n var keys = o_keys(source);\n var key;\n\n for (var i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n target[key] = source[key] || target[key];\n }\n }\n\n function _copyArray(source, target) {\n for (var i = 0, l = source.length; i < l; i++) {\n target[i] = source[i];\n }\n }\n\n function copyObject(source, _target) {\n var isArray = Array.isArray(source);\n var target = _target || (isArray ? new Array(source.length) : {});\n\n if (isArray) {\n _copyArray(source, target);\n } else {\n _copyObject(source, target);\n }\n\n return target;\n }\n\n /** Get the data based on key**/\n Chance.prototype.get = function (name) {\n return copyObject(data[name]);\n };\n\n // Mac Address\n Chance.prototype.mac_address = function(options){\n // typically mac addresses are separated by \":\"\n // however they can also be separated by \"-\"\n // the network variant uses a dot every fourth byte\n\n options = initOptions(options);\n if(!options.separator) {\n options.separator = options.networkVersion ? \".\" : \":\";\n }\n\n var mac_pool=\"ABCDEF1234567890\",\n mac = \"\";\n if(!options.networkVersion) {\n mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);\n } else {\n mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);\n }\n\n return mac;\n };\n\n Chance.prototype.normal = function (options) {\n options = initOptions(options, {mean : 0, dev : 1, pool : []});\n\n testRange(\n options.pool.constructor !== Array,\n \"Chance: The pool option must be a valid array.\"\n );\n testRange(\n typeof options.mean !== 'number',\n \"Chance: Mean (mean) must be a number\"\n );\n testRange(\n typeof options.dev !== 'number',\n \"Chance: Standard deviation (dev) must be a number\"\n );\n\n // If a pool has been passed, then we are returning an item from that pool,\n // using the normal distribution settings that were passed in\n if (options.pool.length > 0) {\n return this.normal_pool(options);\n }\n\n // The Marsaglia Polar method\n var s, u, v, norm,\n mean = options.mean,\n dev = options.dev;\n\n do {\n // U and V are from the uniform distribution on (-1, 1)\n u = this.random() * 2 - 1;\n v = this.random() * 2 - 1;\n\n s = u * u + v * v;\n } while (s >= 1);\n\n // Compute the standard normal variate\n norm = u * Math.sqrt(-2 * Math.log(s) / s);\n\n // Shape and scale\n return dev * norm + mean;\n };\n\n Chance.prototype.normal_pool = function(options) {\n var performanceCounter = 0;\n do {\n var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));\n if (idx < options.pool.length && idx >= 0) {\n return options.pool[idx];\n } else {\n performanceCounter++;\n }\n } while(performanceCounter < 100);\n\n throw new RangeError(\"Chance: Your pool is too small for the given mean and standard deviation. Please adjust.\");\n };\n\n Chance.prototype.radio = function (options) {\n // Initial Letter (Typically Designated by Side of Mississippi River)\n options = initOptions(options, {side : \"?\"});\n var fl = \"\";\n switch (options.side.toLowerCase()) {\n case \"east\":\n case \"e\":\n fl = \"W\";\n break;\n case \"west\":\n case \"w\":\n fl = \"K\";\n break;\n default:\n fl = this.character({pool: \"KW\"});\n break;\n }\n\n return fl + this.character({alpha: true, casing: \"upper\"}) +\n this.character({alpha: true, casing: \"upper\"}) +\n this.character({alpha: true, casing: \"upper\"});\n };\n\n // Set the data as key and data or the data map\n Chance.prototype.set = function (name, values) {\n if (typeof name === \"string\") {\n data[name] = values;\n } else {\n data = copyObject(name, data);\n }\n };\n\n Chance.prototype.tv = function (options) {\n return this.radio(options);\n };\n\n // ID number for Brazil companies\n Chance.prototype.cnpj = function () {\n var n = this.n(this.natural, 8, { max: 9 });\n 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;\n d1 = 11 - (d1 % 11);\n if (d1>=10){\n d1 = 0;\n }\n 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;\n d2 = 11 - (d2 % 11);\n if (d2>=10){\n d2 = 0;\n }\n return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;\n };\n\n // -- End Miscellaneous --\n\n Chance.prototype.mersenne_twister = function (seed) {\n return new MersenneTwister(seed);\n };\n\n Chance.prototype.blueimp_md5 = function () {\n return new BlueImpMD5();\n };\n\n // Mersenne Twister from https://gist.github.com/banksean/300494\n /*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_genrand(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n */\n var MersenneTwister = function (seed) {\n if (seed === undefined) {\n // kept random number same size as time used previously to ensure no unexpected results downstream\n seed = Math.floor(Math.random()*Math.pow(10,13));\n }\n /* Period parameters */\n this.N = 624;\n this.M = 397;\n this.MATRIX_A = 0x9908b0df; /* constant vector a */\n this.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n this.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n this.mt = new Array(this.N); /* the array for the state vector */\n this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */\n\n this.init_genrand(seed);\n };\n\n /* initializes mt[N] with a seed */\n MersenneTwister.prototype.init_genrand = function (s) {\n this.mt[0] = s >>> 0;\n for (this.mti = 1; this.mti < this.N; this.mti++) {\n s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);\n this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;\n /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n /* In the previous versions, MSBs of the seed affect */\n /* only MSBs of the array mt[]. */\n /* 2002/01/09 modified by Makoto Matsumoto */\n this.mt[this.mti] >>>= 0;\n /* for >32 bit machines */\n }\n };\n\n /* initialize by an array with array-length */\n /* init_key is the array for initializing keys */\n /* key_length is its length */\n /* slight change for C++, 2004/2/26 */\n MersenneTwister.prototype.init_by_array = function (init_key, key_length) {\n var i = 1, j = 0, k, s;\n this.init_genrand(19650218);\n k = (this.N > key_length ? this.N : key_length);\n for (; k; k--) {\n s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);\n this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */\n this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n i++;\n j++;\n if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }\n if (j >= key_length) { j = 0; }\n }\n for (k = this.N - 1; k; k--) {\n s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);\n this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */\n this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n i++;\n if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }\n }\n\n this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n };\n\n /* generates a random number on [0,0xffffffff]-interval */\n MersenneTwister.prototype.genrand_int32 = function () {\n var y;\n var mag01 = new Array(0x0, this.MATRIX_A);\n /* mag01[x] = x * MATRIX_A for x=0,1 */\n\n if (this.mti >= this.N) { /* generate N words at one time */\n var kk;\n\n if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */\n this.init_genrand(5489); /* a default initial seed is used */\n }\n for (kk = 0; kk < this.N - this.M; kk++) {\n y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);\n this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];\n }\n for (;kk < this.N - 1; kk++) {\n y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);\n this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];\n }\n y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n this.mti = 0;\n }\n\n y = this.mt[this.mti++];\n\n /* Tempering */\n y ^= (y >>> 11);\n y ^= (y << 7) & 0x9d2c5680;\n y ^= (y << 15) & 0xefc60000;\n y ^= (y >>> 18);\n\n return y >>> 0;\n };\n\n /* generates a random number on [0,0x7fffffff]-interval */\n MersenneTwister.prototype.genrand_int31 = function () {\n return (this.genrand_int32() >>> 1);\n };\n\n /* generates a random number on [0,1]-real-interval */\n MersenneTwister.prototype.genrand_real1 = function () {\n return this.genrand_int32() * (1.0 / 4294967295.0);\n /* divided by 2^32-1 */\n };\n\n /* generates a random number on [0,1)-real-interval */\n MersenneTwister.prototype.random = function () {\n return this.genrand_int32() * (1.0 / 4294967296.0);\n /* divided by 2^32 */\n };\n\n /* generates a random number on (0,1)-real-interval */\n MersenneTwister.prototype.genrand_real3 = function () {\n return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);\n /* divided by 2^32 */\n };\n\n /* generates a random number on [0,1) with 53-bit resolution*/\n MersenneTwister.prototype.genrand_res53 = function () {\n var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;\n return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);\n };\n\n // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5\n var BlueImpMD5 = function () {};\n\n BlueImpMD5.prototype.VERSION = '1.0.1';\n\n /*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n BlueImpMD5.prototype.safe_add = function safe_add(x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n\n /*\n * Bitwise rotate a 32-bit number to the left.\n */\n BlueImpMD5.prototype.bit_roll = function (num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n };\n\n /*\n * These functions implement the five basic operations the algorithm uses.\n */\n BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {\n return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);\n };\n BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {\n return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\n };\n BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {\n return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\n };\n BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {\n return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);\n };\n BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {\n return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\n };\n\n /*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n BlueImpMD5.prototype.binl_md5 = function (x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i, olda, oldb, oldc, oldd,\n a = 1732584193,\n b = -271733879,\n c = -1732584194,\n d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);\n d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);\n b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);\n a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);\n d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);\n c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);\n d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = this.safe_add(a, olda);\n b = this.safe_add(b, oldb);\n c = this.safe_add(c, oldc);\n d = this.safe_add(d, oldd);\n }\n return [a, b, c, d];\n };\n\n /*\n * Convert an array of little-endian words to a string\n */\n BlueImpMD5.prototype.binl2rstr = function (input) {\n var i,\n output = '';\n for (i = 0; i < input.length * 32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);\n }\n return output;\n };\n\n /*\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n BlueImpMD5.prototype.rstr2binl = function (input) {\n var i,\n output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n for (i = 0; i < input.length * 8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);\n }\n return output;\n };\n\n /*\n * Calculate the MD5 of a raw string\n */\n BlueImpMD5.prototype.rstr_md5 = function (s) {\n return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));\n };\n\n /*\n * Calculate the HMAC-MD5, of a key and some data (raw strings)\n */\n BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {\n var i,\n bkey = this.rstr2binl(key),\n ipad = [],\n opad = [],\n hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = this.binl_md5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5C5C5C5C;\n }\n hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);\n return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));\n };\n\n /*\n * Convert a raw string to a hex string\n */\n BlueImpMD5.prototype.rstr2hex = function (input) {\n var hex_tab = '0123456789abcdef',\n output = '',\n x,\n i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hex_tab.charAt((x >>> 4) & 0x0F) +\n hex_tab.charAt(x & 0x0F);\n }\n return output;\n };\n\n /*\n * Encode a string as utf-8\n */\n BlueImpMD5.prototype.str2rstr_utf8 = function (input) {\n return unescape(encodeURIComponent(input));\n };\n\n /*\n * Take string arguments and return either raw or hex encoded strings\n */\n BlueImpMD5.prototype.raw_md5 = function (s) {\n return this.rstr_md5(this.str2rstr_utf8(s));\n };\n BlueImpMD5.prototype.hex_md5 = function (s) {\n return this.rstr2hex(this.raw_md5(s));\n };\n BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {\n return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));\n };\n BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {\n return this.rstr2hex(this.raw_hmac_md5(k, d));\n };\n\n BlueImpMD5.prototype.md5 = function (string, key, raw) {\n if (!key) {\n if (!raw) {\n return this.hex_md5(string);\n }\n\n return this.raw_md5(string);\n }\n\n if (!raw) {\n return this.hex_hmac_md5(key, string);\n }\n\n return this.raw_hmac_md5(key, string);\n };\n\n // CommonJS module\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = Chance;\n }\n exports.Chance = Chance;\n }\n\n // Register as an anonymous AMD module\n if (typeof define === 'function' && define.amd) {\n define([], function () {\n return Chance;\n });\n }\n\n // if there is a importsScrips object define chance for worker\n // allows worker to use full Chance functionality with seed\n if (typeof importScripts !== 'undefined') {\n chance = new Chance();\n self.Chance = Chance;\n }\n\n // If there is a window object, that at least has a document property,\n // instantiate and define chance on the window\n if (typeof window === \"object\" && typeof window.document === \"object\") {\n window.Chance = Chance;\n window.chance = new Chance();\n }\n})();\n"]} \ No newline at end of file
diff --git a/src/node_modules/chance/docs/CNAME b/src/node_modules/chance/docs/CNAME
new file mode 100644
index 0000000..3b7f8f4
--- /dev/null
+++ b/src/node_modules/chance/docs/CNAME
@@ -0,0 +1 @@
+chancejs.com
diff --git a/src/node_modules/chance/docs/README.md b/src/node_modules/chance/docs/README.md
new file mode 100644
index 0000000..82aca56
--- /dev/null
+++ b/src/node_modules/chance/docs/README.md
@@ -0,0 +1,127 @@
+* [Chance](intro.md)
+* Usage
+ * [bower](usage/bower.md)
+ * [browser](usage/browser.md)
+ * [cli](usage/cli.md)
+ * [node](usage/node.md)
+ * [requirejs](usage/requirejs.md)
+ * [seed](usage/seed.md)
+ * [function](usage/function.md)
+* Basics
+ * [bool](basics/bool.md)
+ * [falsy](basics/falsy.md)
+ * [character](basics/character.md)
+ * [floating](basics/floating.md)
+ * [integer](basics/integer.md)
+ * [letter](basics/letter.md)
+ * [natural](basics/natural.md)
+ * [prime](basics/prime.md)
+ * [string](basics/string.md)
+ * [template](basics/template.md)
+* Text
+ * [paragraph](text/paragraph.md)
+ * [sentence](text/sentence.md)
+ * [syllable](text/syllable.md)
+ * [word](text/word.md)
+* Person
+ * [age](person/age.md)
+ * [birthday](person/birthday.md)
+ * [cf](person/cf.md)
+ * [cpf](person/cpf.md)
+ * [first](person/first.md)
+ * [gender](person/gender.md)
+ * [last](person/last.md)
+ * [name](person/name.md)
+ * [prefix](person/prefix.md)
+ * [ssn](person/ssn.md)
+ * [suffix](person/suffix.md)
+* Thing
+ * [animal](thing/animal.md)
+* Mobile
+ * [android_id](mobile/android_id.md)
+ * [apple_token](mobile/apple_token.md)
+ * [bb_pin](mobile/bb_pin.md)
+ * [wp7_anid](mobile/wp7_anid.md)
+ * [wp8_anid2](mobile/wp8_anid2.md)
+* Web
+ * [avatar](web/avatar.md)
+ * [color](web/color.md)
+ * [company](web/company.md)
+ * [domain](web/domain.md)
+ * [email](web/email.md)
+ * [fbid](web/fbid.md)
+ * [google_analytics](web/google_analytics.md)
+ * [hashtag](web/hashtag.md)
+ * [ip](web/ip.md)
+ * [ipv6](web/ipv6.md)
+ * [klout](web/klout.md)
+ * [profession](web/profession.md)
+ * [tld](web/tld.md)
+ * [twitter](web/twitter.md)
+ * [url](web/url.md)
+* Location
+ * [address](location/address.md)
+ * [altitude](location/altitude.md)
+ * [areacode](location/areacode.md)
+ * [city](location/city.md)
+ * [coordinates](location/coordinates.md)
+ * [country](location/country.md)
+ * [depth](location/depth.md)
+ * [geohash](location/geohash.md)
+ * [latitude](location/latitude.md)
+ * [locale](location/locale.md)
+ * [longitude](location/longitude.md)
+ * [phone](location/phone.md)
+ * [postal](location/postal.md)
+ * [postcode](location/postcode.md)
+ * [province](location/province.md)
+ * [state](location/state.md)
+ * [street](location/street.md)
+ * [zip](location/zip.md)
+* Time
+ * [ampm](time/ampm.md)
+ * [date](time/date.md)
+ * [hammertime](time/hammertime.md)
+ * [hour](time/hour.md)
+ * [millisecond](time/millisecond.md)
+ * [minute](time/minute.md)
+ * [month](time/month.md)
+ * [second](time/second.md)
+ * [timestamp](time/timestamp.md)
+ * [timezone](time/timezone.md)
+ * [weekday](time/weekday.md)
+ * [year](time/year.md)
+* Finance
+ * [cc](finance/cc.md)
+ * [cc_type](finance/cc_type.md)
+ * [currency](finance/currency.md)
+ * [currency_pair](finance/currency_pair.md)
+ * [dollar](finance/dollar.md)
+ * [euro](finance/euro.md)
+ * [exp](finance/exp.md)
+ * [exp_month](finance/exp_month.md)
+ * [exp_year](finance/exp_year.md)
+* Helpers
+ * [capitalize](helpers/capitalize.md)
+ * [mixin](helpers/mixin.md)
+ * [pad](helpers/pad.md)
+ * [pick](helpers/pick.md)
+ * [pickone](helpers/pickone.md)
+ * [pickset](helpers/pickset.md)
+ * [set](helpers/set.md)
+ * [shuffle](helpers/shuffle.md)
+* Miscellaneous
+ * [coin](miscellaneous/coin.md)
+ * [dice](miscellaneous/dice.md)
+ * [guid](miscellaneous/guid.md)
+ * [hash](miscellaneous/hash.md)
+ * [hidden](miscellaneous/hidden.md)
+ * [n](miscellaneous/n.md)
+ * [normal](miscellaneous/normal.md)
+ * [radio](miscellaneous/radio.md)
+ * [rpg](miscellaneous/rpg.md)
+ * [tv](miscellaneous/tv.md)
+ * [unique](miscellaneous/unique.md)
+ * [weighted](miscellaneous/weighted.md)
+
+<script type="text/javascript" src="chance.js"></script>
diff --git a/src/node_modules/chance/docs/analytics.js b/src/node_modules/chance/docs/analytics.js
new file mode 100644
index 0000000..8ee2429
--- /dev/null
+++ b/src/node_modules/chance/docs/analytics.js
@@ -0,0 +1,3 @@
+window.analytics=window.analytics||[],window.analytics.methods=["identify","group","track","page","pageview","alias","ready","on","once","off","trackLink","trackForm","trackClick","trackSubmit"],window.analytics.factory=function(t){return function(){var a=Array.prototype.slice.call(arguments);return a.unshift(t),window.analytics.push(a),window.analytics}};for(var i=0;i<window.analytics.methods.length;i++){var key=window.analytics.methods[i];window.analytics[key]=window.analytics.factory(key)}window.analytics.load=function(t){if(!document.getElementById("analytics-js")){var a=document.createElement("script");a.type="text/javascript",a.id="analytics-js",a.async=!0,a.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.io/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(a,n)}},window.analytics.SNIPPET_VERSION="2.0.9",
+window.analytics.load("5u8961mhro");
+window.analytics.page();
diff --git a/src/node_modules/chance/docs/basics/bool.md b/src/node_modules/chance/docs/basics/bool.md
new file mode 100644
index 0000000..e5b6a88
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/bool.md
@@ -0,0 +1,24 @@
+# bool
+
+```js
+ // usages
+ chance.bool()
+ chance.bool({ likelihood: 30 })
+```
+Return a random boolean value (`true` or `false`).
+
+```js
+chance.bool();
+=> true
+```
+
+The default likelihood of success (returning `true`) is 50%.
+Can optionally specify the likelihood in percent:
+
+```js
+chance.bool({likelihood: 30});
+=> false
+```
+
+In this case only a 30% likelihood of `true`, and a 70% likelihood of `false`.
+
diff --git a/src/node_modules/chance/docs/basics/character.md b/src/node_modules/chance/docs/basics/character.md
new file mode 100644
index 0000000..6c90ed6
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/character.md
@@ -0,0 +1,65 @@
+# character
+
+```js
+// usages
+chance.character()
+chance.character({ pool: 'abcde' })
+chance.character({ alpha: true })
+chance.character({ numeric: true })
+chance.character({ casing: 'lower' })
+chance.character({ symbols: true })
+```
+
+Return a random character.
+
+```js
+chance.character();
+=> 'v'
+```
+
+By default it will return a string with random character from the following
+pool.
+
+```js
+'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'
+```
+
+Optionally specify a pool and the character will be generated with characters
+only from that pool.
+
+```js
+chance.character({ pool: 'abcde' });
+=> 'c'
+```
+
+Optionally specify alpha for an alphabetic character.
+
+```js
+chance.character({ alpha: true });
+=> 'N'
+```
+
+Optionally specify numeric for a numeric character.
+
+```js
+chance.character({ numeric: true });
+=> '8'
+```
+
+Default includes both upper and lower case. It's possible to specify one or the
+other.
+
+```js
+chance.character({ casing: 'lower' });
+=> 'j'
+```
+
+*Note, wanted to call this key just ```case``` but unfortunately that's a
+reserved word in JavaScript for use in a switch statement*
+
+Optionally return only symbols
+
+```js
+chance.character({ symbols: true });
+=> '%'
+```
diff --git a/src/node_modules/chance/docs/basics/falsy.md b/src/node_modules/chance/docs/basics/falsy.md
new file mode 100644
index 0000000..24222a4
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/falsy.md
@@ -0,0 +1,22 @@
+# falsy
+
+```js
+// usages
+chance.falsy()
+chance.falsy({ pool: [ NaN, undefined ] })
+```
+Return a random falsy value (`false`, `null`, `undefined`, `0`, `NaN`, `''`).
+
+```js
+chance.falsy();
+=> false
+```
+
+The default pool can be changed to better meet the needs:
+
+```js
+chance.falsy({ pool: [ NaN, undefined ] });
+=> NaN
+```
+
+
diff --git a/src/node_modules/chance/docs/basics/floating.md b/src/node_modules/chance/docs/basics/floating.md
new file mode 100644
index 0000000..623e40c
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/floating.md
@@ -0,0 +1,44 @@
+# floating
+
+```js
+// usages
+chance.floating()
+chance.floating({ fixed: 7 })
+chance.floating({ min: 0, max: 100 })
+```
+<p class="pullquote">I wanted to use float or double as the method name but both are JS reserved words even though they aren't really used...</p>
+
+Return a random floating point number.
+
+```js
+chance.floating();
+=> -211920142886.5024
+```
+
+By default it will return a fixed number of at most 4 digits after the decimal.
+
+Note: *at most* 4 digits. This because, unless we returned trailing zeroes
+(which aren't allowed on the JavaScript float) we can't guarantee 4 digits after
+the decimal. So if random chance comes back with `82383854.2000` then
+`82383854.2` is what will be returned.
+
+To retrieve a set number of fixed digits after the decimal, provide it as an option.
+
+```js
+chance.floating({ fixed: 7 });
+=> -749512327.7447168
+```
+
+As with other number functions, can include a min and/or max.
+
+```js
+chance.floating({ min: 0, max: 100 });
+=> 31.9021
+```
+
+Or combine them.
+
+```js
+chance.floating({ min: 0, max: 100, fixed: 8 });
+=> 45.92367599
+```
diff --git a/src/node_modules/chance/docs/basics/integer.md b/src/node_modules/chance/docs/basics/integer.md
new file mode 100644
index 0000000..fbce433
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/integer.md
@@ -0,0 +1,42 @@
+# integer
+
+```js
+// usage
+chance.integer()
+chance.integer({ min: -20, max: 20 })
+```
+
+<p class="pullquote">9007199254740991 is 2^53 - 1 and is the largest number value in JavaScript</p>
+
+Return a random integer.
+
+_range: -9007199254740991 to 9007199254740991_
+
+See: [Largest number in JavaScript](http://vq.io/16qnIYj)
+
+```js
+chance.integer();
+=> -1293235
+```
+
+Can optionally provide min and max.
+
+```js
+chance.integer({ min: -20, max: 20 })
+=> -7
+```
+
+
+These min and max are inclusive, so they are included in the range. This means
+```js
+chance.integer({ min: -2, max: 2 })
+```
+would return either -2, -1, 0, 1, or 2.
+
+```js
+// Specific case
+-2 <= random number <= 2
+
+// General case
+min <= random number <= max
+```
diff --git a/src/node_modules/chance/docs/basics/letter.md b/src/node_modules/chance/docs/basics/letter.md
new file mode 100644
index 0000000..9f3ed80
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/letter.md
@@ -0,0 +1,25 @@
+# letter
+
+```js
+// usage
+chance.letter()
+chance.letter({ casing: 'lower' })
+```
+
+Return a random letter.
+
+```js
+chance.letter();
+=> 'p'
+```
+
+By default it will return a random lowercase letter.
+
+<p class="pullquote">Note, wanted to call this option just <strong>case</strong> instead of <strong>casing</strong> but unfortunately that's a reserved word in JavaScript for use in a switch statement</p>
+
+It's possible to specify upper case
+
+```js
+chance.letter({casing: 'upper'});
+=> 'A'
+```
diff --git a/src/node_modules/chance/docs/basics/natural.md b/src/node_modules/chance/docs/basics/natural.md
new file mode 100644
index 0000000..2127341
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/natural.md
@@ -0,0 +1,47 @@
+# natural
+
+```js
+// usage
+chance.natural()
+chance.natural({ min: 1, max: 20 })
+```
+
+Return a natural number.
+
+_range: 0 to 9007199254740991_
+
+```js
+ chance.natural();
+ => 125019392395
+```
+
+Can optionally provide min and max.
+
+```js
+chance.natural({min: 1, max: 20});
+=> 14
+```
+
+Can optionally provide numbers you wish to exclude.
+
+```js
+chance.natural({min: 1, max: 5, exclude: [1, 3]});
+=> 2
+```
+
+These are inclusive, so they are included in the range. This means
+```chance.natural({min: 1, max: 3});``` would return either 1, 2, or 3 or:
+
+```js
+// Specific case
+1 <= random number <= 3
+
+// General case
+min <= random number <= max
+```
+
+
+[Natural Number on Wikipedia][natural]
+
+[natural]: https://en.wikipedia.org/wiki/Natural_number
+
diff --git a/src/node_modules/chance/docs/basics/prime.md b/src/node_modules/chance/docs/basics/prime.md
new file mode 100644
index 0000000..a7a45fd
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/prime.md
@@ -0,0 +1,41 @@
+# prime
+
+```js
+// usage
+chance.prime()
+chance.prime({ min: 1, max: 20 })
+```
+
+Return a prime number.
+
+_default range: 0 to 10000_
+
+```js
+ chance.prime();
+ => 929
+```
+
+Can optionally provide min and max.
+
+```js
+chance.prime({min: 1, max: 20});
+=> 13
+```
+
+
+These are inclusive, so they are included in the range. This means
+```chance.prime({min: 2, max: 5});``` would return either 2, 3, or 5 or:
+
+```js
+// Specific case
+2 <= random number <= 5
+
+// General case
+min <= random number <= max
+```
+
+
+[Prime Number on Wikipedia][prime]
+
+[prime]: https://en.wikipedia.org/wiki/Prime_number
+
diff --git a/src/node_modules/chance/docs/basics/string.md b/src/node_modules/chance/docs/basics/string.md
new file mode 100644
index 0000000..1ddaddd
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/string.md
@@ -0,0 +1,76 @@
+# string
+
+```js
+// usage
+chance.string()
+chance.string({ length: 5 })
+chance.string({ min: 5 })
+chance.string({ max: 50 })
+chance.string({ min: 5, max: 20 })
+chance.string({ pool: 'abcde' })
+chance.string({ alpha: true })
+chance.string({ casing: 'lower' })
+chance.string({ symbols: true })
+```
+
+Return a random string.
+
+```js
+ chance.string();
+ => 'Z&Q78&fqkPq'
+```
+
+By default it will return a string with random length of 5-20 characters and
+will contain any of the following characters.
+
+```js
+ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()[]'
+```
+
+Can optionally specify a length and the string will be exactly that length.
+
+```js
+ chance.string({ length: 5 });
+ => 'YN%fG'
+```
+
+Can optionally specify a min and the string will have a minimum length
+
+```js
+ chance.string({ min: 5 });
+ => '6(Ow1wF)qjUm%W)B2[Q]'
+```
+
+Can optionally specify a max and the string will have a maximum length
+
+```js
+ chance.string({ max: 20 });
+ => 'k7fubkfMS@gs#E'
+```
+
+Can optionally specify a pool and the string will be generated with characters
+only from that pool.
+
+```js
+ chance.string({ pool: 'abcde' });
+ => 'cccdeeabedebb'
+```
+
+Of course these options can also be combined, using length or min and max.
+
+```js
+ chance.string({ length: 5, pool: 'abcde' });
+ => 'cbbdc'
+```
+
+```js
+ chance.string({ min: 5, max: 20, pool: 'abcde' });
+ => 'ebddceaaceeda'
+```
+
+All the options for [chance.character()](./character.md) are supported:
+
+```js
+ chance.string({ length: 8, casing: 'upper', alpha: true, numeric: true });
+ => '3THK7GB1'
+```
diff --git a/src/node_modules/chance/docs/basics/template.md b/src/node_modules/chance/docs/basics/template.md
new file mode 100644
index 0000000..96ba860
--- /dev/null
+++ b/src/node_modules/chance/docs/basics/template.md
@@ -0,0 +1,27 @@
+# template
+
+Return a random string matching the given template.
+
+```js
+// usage
+chance.template('{AA####}')
+=> 'ZQ7803'
+chance.template('{Aa}-{##}')
+=> 'Vr-78'
+chance.template('{####}:{####}:{####}')
+=> '1628:5987:7803'
+```
+
+The template consists of any number of "character replacement" and "character
+literal" sequences. A "character replacement" sequence starts with a left
+brace, has any number of special replacement characters, and ends with a right
+brace. A character literal can be any character except a brace or a backslash.
+A literal brace or backslash character can be included in the output by
+escaping with a backslash.
+
+The following replacement characters can be used in a replacement sequence:
+
+ * "#": a random digit
+ * "a": a random lower case letter
+ * "A": a random upper case letter
+
diff --git a/src/node_modules/chance/docs/chance.css b/src/node_modules/chance/docs/chance.css
new file mode 100644
index 0000000..991bdfb
--- /dev/null
+++ b/src/node_modules/chance/docs/chance.css
@@ -0,0 +1,108 @@
+.markdown-body a {
+ color: #c0392b;
+}
+
+.menu {
+ background-color: #c0392b;
+}
+
+.-menu-visible .menu-toggle {
+ background-color: #c0392b;
+}
+
+.menu-toggle {
+ color: #fff;
+ background-color: #c0392b;
+}
+
+.toc-menu .link.-active, .toc-menu .hlink.-active {
+ box-shadow: inset -2px 0 #fff;
+}
+
+.toc-menu .-level-1.-parent > .title {
+ color: #fff;
+}
+
+.toc-menu .-level-1:first-child > .title {
+ color: #fff;
+}
+
+ul.heading-list .hlink, ul.heading-list .hlink:visited {
+ color: #fff;
+}
+
+.toc-menu .link, .toc-menu .link:visited {
+ color: #fff;
+}
+
+ul.heading-list .hlink::before {
+ background: #fff;
+}
+
+.footer-nav a {
+ color: #c0392b;
+}
+
+.footer-nav .label, .footer-nav .left .title {
+ color: #c0392b;
+}
+
+.header-nav.-expanded .icon {
+ color: #fff;
+}
+
+.pullquote {
+ display: block;
+ float: right;
+ padding: 0 0 0 10px;
+ margin: 0 0 10px 10px;
+ width: 15.0em;
+ font-size: 1.0em;
+ line-height: 1.4em;
+ color: #666;
+ border-left: 3px solid #ccc;
+}
+
+.markdown-body pre {
+ background-color: #fdf6e3;
+ border-radius: 12px;
+}
+
+.markdown-body pre code {
+ background-color: #fdf6e3;
+}
+
+a.download {
+ -webkit-user-select: none;
+ background: #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,32,0.01)), to(rgba(0,0,32,0.08)));
+ background-image: -moz-linear-gradient(rgba(0,0,32,0.01), rgba(0,0,32,0.08));
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ color: #202028;
+ padding: 4px 10px;
+ border: 1px solid #a8a8af;
+ text-decoration: none !important;
+ text-shadow: 0 1px 1px rgba(255,255,255,0.9);
+ font-size: 14px;
+ line-height: 19px;
+ font-family: helvetica, arial, sans-serif;
+ display: inline-block;
+ cursor: pointer;
+ font-weight: bold;
+}
+
+a.download:hover {
+ color: #202028;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,32,0.01)), to(rgba(0,0,32,0.16)));
+ background-image: -moz-linear-gradient(rgba(0,0,32,0.01), rgba(0,0,32,0.16));
+ border-color: #707078;
+}
+
+a.download:active {
+ background-color: rgba(0,0,32,0.05);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,32,0.16)), to(rgba(0,0,32,0.01)));
+ background-image: -moz-linear-gradient(rgba(0,0,32,0.16), rgba(0,0,32,0.01));
+ box-shadow: inset 0 2px 2px rgba(0,0,0,0.1);
+}
diff --git a/src/node_modules/chance/docs/chance.js b/src/node_modules/chance/docs/chance.js
new file mode 100644
index 0000000..c5db82a
--- /dev/null
+++ b/src/node_modules/chance/docs/chance.js
@@ -0,0 +1,7494 @@
+// Chance.js 1.0.16
+// http://chancejs.com
+// (c) 2013 Victor Quinn
+// Chance may be freely distributed or modified under the MIT license.
+
+(function () {
+
+ // Constants
+ var MAX_INT = 9007199254740992;
+ var MIN_INT = -MAX_INT;
+ var NUMBERS = '0123456789';
+ var CHARS_LOWER = 'abcdefghijklmnopqrstuvwxyz';
+ var CHARS_UPPER = CHARS_LOWER.toUpperCase();
+ var HEX_POOL = NUMBERS + "abcdef";
+
+ // Errors
+ function UnsupportedError(message) {
+ this.name = 'UnsupportedError';
+ this.message = message || 'This feature is not supported on this platform';
+ }
+
+ UnsupportedError.prototype = new Error();
+ UnsupportedError.prototype.constructor = UnsupportedError;
+
+ // Cached array helpers
+ var slice = Array.prototype.slice;
+
+ // Constructor
+ function Chance (seed) {
+ if (!(this instanceof Chance)) {
+ if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322
+ return seed === null ? new Chance() : new Chance(seed);
+ }
+
+ // if user has provided a function, use that as the generator
+ if (typeof seed === 'function') {
+ this.random = seed;
+ return this;
+ }
+
+ if (arguments.length) {
+ // set a starting value of zero so we can add to it
+ this.seed = 0;
+ }
+
+ // otherwise, leave this.seed blank so that MT will receive a blank
+
+ for (var i = 0; i < arguments.length; i++) {
+ var seedling = 0;
+ if (Object.prototype.toString.call(arguments[i]) === '[object String]') {
+ for (var j = 0; j < arguments[i].length; j++) {
+ // create a numeric hash for each argument, add to seedling
+ var hash = 0;
+ for (var k = 0; k < arguments[i].length; k++) {
+ hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;
+ }
+ seedling += hash;
+ }
+ } else {
+ seedling = arguments[i];
+ }
+ this.seed += (arguments.length - i) * seedling;
+ }
+
+ // If no generator function was provided, use our MT
+ this.mt = this.mersenne_twister(this.seed);
+ this.bimd5 = this.blueimp_md5();
+ this.random = function () {
+ return this.mt.random(this.seed);
+ };
+
+ return this;
+ }
+
+ Chance.prototype.VERSION = "1.0.16";
+
+ // Random helper functions
+ function initOptions(options, defaults) {
+ options = options || {};
+
+ if (defaults) {
+ for (var i in defaults) {
+ if (typeof options[i] === 'undefined') {
+ options[i] = defaults[i];
+ }
+ }
+ }
+
+ return options;
+ }
+
+ function range(size) {
+ return Array.apply(null, Array(size)).map(function (_, i) {return i;});
+ }
+
+ function testRange(test, errorMessage) {
+ if (test) {
+ throw new RangeError(errorMessage);
+ }
+ }
+
+ /**
+ * Encode the input string with Base64.
+ */
+ var base64 = function() {
+ throw new Error('No Base64 encoder available.');
+ };
+
+ // Select proper Base64 encoder.
+ (function determineBase64Encoder() {
+ if (typeof btoa === 'function') {
+ base64 = btoa;
+ } else if (typeof Buffer === 'function') {
+ base64 = function(input) {
+ return new Buffer(input).toString('base64');
+ };
+ }
+ })();
+
+ // -- Basics --
+
+ /**
+ * Return a random bool, either true or false
+ *
+ * @param {Object} [options={ likelihood: 50 }] alter the likelihood of
+ * receiving a true or false value back.
+ * @throws {RangeError} if the likelihood is out of bounds
+ * @returns {Bool} either true or false
+ */
+ Chance.prototype.bool = function (options) {
+ // likelihood of success (true)
+ options = initOptions(options, {likelihood : 50});
+
+ // Note, we could get some minor perf optimizations by checking range
+ // prior to initializing defaults, but that makes code a bit messier
+ // and the check more complicated as we have to check existence of
+ // the object then existence of the key before checking constraints.
+ // Since the options initialization should be minor computationally,
+ // decision made for code cleanliness intentionally. This is mentioned
+ // here as it's the first occurrence, will not be mentioned again.
+ testRange(
+ options.likelihood < 0 || options.likelihood > 100,
+ "Chance: Likelihood accepts values from 0 to 100."
+ );
+
+ return this.random() * 100 < options.likelihood;
+ };
+
+ Chance.prototype.animal = function (options){
+ //returns a random animal
+ options = initOptions(options);
+
+ if(typeof options.type !== 'undefined'){
+ //if user does not put in a valid animal type, user will get an error
+ testRange(
+ !this.get("animals")[options.type.toLowerCase()],
+ "Please pick from desert, ocean, grassland, forest, zoo, pets, farm."
+ );
+ //if user does put in valid animal type, will return a random animal of that type
+ return this.pick(this.get("animals")[options.type.toLowerCase()]);
+ }
+ //if user does not put in any animal type, will return a random animal regardless
+ animalTypeArray = ["desert","forest","ocean","zoo","farm","pet","grassland"];
+ return this.pick(this.get("animals")[this.pick(animalTypeArray)]);
+ };
+
+ /**
+ * Return a random character.
+ *
+ * @param {Object} [options={}] can specify a character pool, only alpha,
+ * only symbols, and casing (lower or upper)
+ * @returns {String} a single random character
+ * @throws {RangeError} Can only specify alpha or symbols, not both
+ */
+ Chance.prototype.character = function (options) {
+ options = initOptions(options);
+ testRange(
+ options.alpha && options.symbols,
+ "Chance: Cannot specify both alpha and symbols."
+ );
+
+ var symbols = "!@#$%^&*()[]",
+ letters, pool;
+
+ if (options.casing === 'lower') {
+ letters = CHARS_LOWER;
+ } else if (options.casing === 'upper') {
+ letters = CHARS_UPPER;
+ } else {
+ letters = CHARS_LOWER + CHARS_UPPER;
+ }
+
+ if (options.pool) {
+ pool = options.pool;
+ } else if (options.alpha) {
+ pool = letters;
+ } else if (options.symbols) {
+ pool = symbols;
+ } else {
+ pool = letters + NUMBERS + symbols;
+ }
+
+ return pool.charAt(this.natural({max: (pool.length - 1)}));
+ };
+
+ // Note, wanted to use "float" or "double" but those are both JS reserved words.
+
+ // Note, fixed means N OR LESS digits after the decimal. This because
+ // It could be 14.9000 but in JavaScript, when this is cast as a number,
+ // the trailing zeroes are dropped. Left to the consumer if trailing zeroes are
+ // needed
+ /**
+ * Return a random floating point number
+ *
+ * @param {Object} [options={}] can specify a fixed precision, min, max
+ * @returns {Number} a single floating point number
+ * @throws {RangeError} Can only specify fixed or precision, not both. Also
+ * min cannot be greater than max
+ */
+ Chance.prototype.floating = function (options) {
+ options = initOptions(options, {fixed : 4});
+ testRange(
+ options.fixed && options.precision,
+ "Chance: Cannot specify both fixed and precision."
+ );
+
+ var num;
+ var fixed = Math.pow(10, options.fixed);
+
+ var max = MAX_INT / fixed;
+ var min = -max;
+
+ testRange(
+ options.min && options.fixed && options.min < min,
+ "Chance: Min specified is out of range with fixed. Min should be, at least, " + min
+ );
+ testRange(
+ options.max && options.fixed && options.max > max,
+ "Chance: Max specified is out of range with fixed. Max should be, at most, " + max
+ );
+
+ options = initOptions(options, { min : min, max : max });
+
+ // Todo - Make this work!
+ // options.precision = (typeof options.precision !== "undefined") ? options.precision : false;
+
+ num = this.integer({min: options.min * fixed, max: options.max * fixed});
+ var num_fixed = (num / fixed).toFixed(options.fixed);
+
+ return parseFloat(num_fixed);
+ };
+
+ /**
+ * Return a random integer
+ *
+ * NOTE the max and min are INCLUDED in the range. So:
+ * chance.integer({min: 1, max: 3});
+ * would return either 1, 2, or 3.
+ *
+ * @param {Object} [options={}] can specify a min and/or max
+ * @returns {Number} a single random integer number
+ * @throws {RangeError} min cannot be greater than max
+ */
+ Chance.prototype.integer = function (options) {
+ // 9007199254740992 (2^53) is the max integer number in JavaScript
+ // See: http://vq.io/132sa2j
+ options = initOptions(options, {min: MIN_INT, max: MAX_INT});
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ return Math.floor(this.random() * (options.max - options.min + 1) + options.min);
+ };
+
+ /**
+ * Return a random natural
+ *
+ * NOTE the max and min are INCLUDED in the range. So:
+ * chance.natural({min: 1, max: 3});
+ * would return either 1, 2, or 3.
+ *
+ * @param {Object} [options={}] can specify a min and/or maxm or a numerals count.
+ * @returns {Number} a single random integer number
+ * @throws {RangeError} min cannot be greater than max
+ */
+ Chance.prototype.natural = function (options) {
+ options = initOptions(options, {min: 0, max: MAX_INT});
+ if (typeof options.numerals === 'number'){
+ testRange(options.numerals < 1, "Chance: Numerals cannot be less than one.");
+ options.min = Math.pow(10, options.numerals - 1);
+ options.max = Math.pow(10, options.numerals) - 1;
+ }
+ testRange(options.min < 0, "Chance: Min cannot be less than zero.");
+ return this.integer(options);
+ };
+
+ /**
+ * Return a random hex number as string
+ *
+ * NOTE the max and min are INCLUDED in the range. So:
+ * chance.hex({min: '9', max: 'B'});
+ * would return either '9', 'A' or 'B'.
+ *
+ * @param {Object} [options={}] can specify a min and/or max and/or casing
+ * @returns {String} a single random string hex number
+ * @throws {RangeError} min cannot be greater than max
+ */
+ Chance.prototype.hex = function (options) {
+ options = initOptions(options, {min: 0, max: MAX_INT, casing: 'lower'});
+ testRange(options.min < 0, "Chance: Min cannot be less than zero.");
+ var integer = this.natural({min: options.min, max: options.max});
+ if (options.casing === 'upper') {
+ return integer.toString(16).toUpperCase();
+ }
+ return integer.toString(16);
+ };
+
+ Chance.prototype.letter = function(options) {
+ options = initOptions(options, {casing: 'lower'});
+ var pool = "abcdefghijklmnopqrstuvwxyz";
+ var letter = this.character({pool: pool});
+ if (options.casing === 'upper') {
+ letter = letter.toUpperCase();
+ }
+ return letter;
+ }
+
+ /**
+ * Return a random string
+ *
+ * @param {Object} [options={}] can specify a length
+ * @returns {String} a string of random length
+ * @throws {RangeError} length cannot be less than zero
+ */
+ Chance.prototype.string = function (options) {
+ options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
+ testRange(options.length < 0, "Chance: Length cannot be less than zero.");
+ var length = options.length,
+ text = this.n(this.character, length, options);
+
+ return text.join("");
+ };
+
+ /**
+ * Return a random buffer
+ *
+ * @param {Object} [options={}] can specify a length
+ * @returns {Buffer} a buffer of random length
+ * @throws {RangeError} length cannot be less than zero
+ */
+ Chance.prototype.buffer = function (options) {
+ if (typeof Buffer === 'undefined') {
+ throw new UnsupportedError('Sorry, the buffer() function is not supported on your platform');
+ }
+ options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
+ testRange(options.length < 0, "Chance: Length cannot be less than zero.");
+ var length = options.length;
+ var content = this.n(this.character, length, options);
+
+ return Buffer.from(content);
+ };
+
+ // -- End Basics --
+
+ // -- Helpers --
+
+ Chance.prototype.capitalize = function (word) {
+ return word.charAt(0).toUpperCase() + word.substr(1);
+ };
+
+ Chance.prototype.mixin = function (obj) {
+ for (var func_name in obj) {
+ Chance.prototype[func_name] = obj[func_name];
+ }
+ return this;
+ };
+
+ /**
+ * Given a function that generates something random and a number of items to generate,
+ * return an array of items where none repeat.
+ *
+ * @param {Function} fn the function that generates something random
+ * @param {Number} num number of terms to generate
+ * @param {Object} options any options to pass on to the generator function
+ * @returns {Array} an array of length `num` with every item generated by `fn` and unique
+ *
+ * There can be more parameters after these. All additional parameters are provided to the given function
+ */
+ Chance.prototype.unique = function(fn, num, options) {
+ testRange(
+ typeof fn !== "function",
+ "Chance: The first argument must be a function."
+ );
+
+ var comparator = function(arr, val) { return arr.indexOf(val) !== -1; };
+
+ if (options) {
+ comparator = options.comparator || comparator;
+ }
+
+ var arr = [], count = 0, result, MAX_DUPLICATES = num * 50, params = slice.call(arguments, 2);
+
+ while (arr.length < num) {
+ var clonedParams = JSON.parse(JSON.stringify(params));
+ result = fn.apply(this, clonedParams);
+ if (!comparator(arr, result)) {
+ arr.push(result);
+ // reset count when unique found
+ count = 0;
+ }
+
+ if (++count > MAX_DUPLICATES) {
+ throw new RangeError("Chance: num is likely too large for sample set");
+ }
+ }
+ return arr;
+ };
+
+ /**
+ * Gives an array of n random terms
+ *
+ * @param {Function} fn the function that generates something random
+ * @param {Number} n number of terms to generate
+ * @returns {Array} an array of length `n` with items generated by `fn`
+ *
+ * There can be more parameters after these. All additional parameters are provided to the given function
+ */
+ Chance.prototype.n = function(fn, n) {
+ testRange(
+ typeof fn !== "function",
+ "Chance: The first argument must be a function."
+ );
+
+ if (typeof n === 'undefined') {
+ n = 1;
+ }
+ var i = n, arr = [], params = slice.call(arguments, 2);
+
+ // Providing a negative count should result in a noop.
+ i = Math.max( 0, i );
+
+ for (null; i--; null) {
+ arr.push(fn.apply(this, params));
+ }
+
+ return arr;
+ };
+
+ // H/T to SO for this one: http://vq.io/OtUrZ5
+ Chance.prototype.pad = function (number, width, pad) {
+ // Default pad to 0 if none provided
+ pad = pad || '0';
+ // Convert number to a string
+ number = number + '';
+ return number.length >= width ? number : new Array(width - number.length + 1).join(pad) + number;
+ };
+
+ // DEPRECATED on 2015-10-01
+ Chance.prototype.pick = function (arr, count) {
+ if (arr.length === 0) {
+ throw new RangeError("Chance: Cannot pick() from an empty array");
+ }
+ if (!count || count === 1) {
+ return arr[this.natural({max: arr.length - 1})];
+ } else {
+ return this.shuffle(arr).slice(0, count);
+ }
+ };
+
+ // Given an array, returns a single random element
+ Chance.prototype.pickone = function (arr) {
+ if (arr.length === 0) {
+ throw new RangeError("Chance: Cannot pickone() from an empty array");
+ }
+ return arr[this.natural({max: arr.length - 1})];
+ };
+
+ // Given an array, returns a random set with 'count' elements
+ Chance.prototype.pickset = function (arr, count) {
+ if (count === 0) {
+ return [];
+ }
+ if (arr.length === 0) {
+ throw new RangeError("Chance: Cannot pickset() from an empty array");
+ }
+ if (count < 0) {
+ throw new RangeError("Chance: Count must be a positive number");
+ }
+ if (!count || count === 1) {
+ return [ this.pickone(arr) ];
+ } else {
+ return this.shuffle(arr).slice(0, count);
+ }
+ };
+
+ Chance.prototype.shuffle = function (arr) {
+ var new_array = [],
+ j = 0,
+ length = Number(arr.length),
+ source_indexes = range(length),
+ last_source_index = length - 1,
+ selected_source_index;
+
+ for (var i = 0; i < length; i++) {
+ // Pick a random index from the array
+ selected_source_index = this.natural({max: last_source_index});
+ j = source_indexes[selected_source_index];
+
+ // Add it to the new array
+ new_array[i] = arr[j];
+
+ // Mark the source index as used
+ source_indexes[selected_source_index] = source_indexes[last_source_index];
+ last_source_index -= 1;
+ }
+
+ return new_array;
+ };
+
+ // Returns a single item from an array with relative weighting of odds
+ Chance.prototype.weighted = function (arr, weights, trim) {
+ if (arr.length !== weights.length) {
+ throw new RangeError("Chance: Length of array and weights must match");
+ }
+
+ // scan weights array and sum valid entries
+ var sum = 0;
+ var val;
+ for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
+ val = weights[weightIndex];
+ if (isNaN(val)) {
+ throw new RangeError("Chance: All weights must be numbers");
+ }
+
+ if (val > 0) {
+ sum += val;
+ }
+ }
+
+ if (sum === 0) {
+ throw new RangeError("Chance: No valid entries in array weights");
+ }
+
+ // select a value within range
+ var selected = this.random() * sum;
+
+ // find array entry corresponding to selected value
+ var total = 0;
+ var lastGoodIdx = -1;
+ var chosenIdx;
+ for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
+ val = weights[weightIndex];
+ total += val;
+ if (val > 0) {
+ if (selected <= total) {
+ chosenIdx = weightIndex;
+ break;
+ }
+ lastGoodIdx = weightIndex;
+ }
+
+ // handle any possible rounding error comparison to ensure something is picked
+ if (weightIndex === (weights.length - 1)) {
+ chosenIdx = lastGoodIdx;
+ }
+ }
+
+ var chosen = arr[chosenIdx];
+ trim = (typeof trim === 'undefined') ? false : trim;
+ if (trim) {
+ arr.splice(chosenIdx, 1);
+ weights.splice(chosenIdx, 1);
+ }
+
+ return chosen;
+ };
+
+ // -- End Helpers --
+
+ // -- Text --
+
+ Chance.prototype.paragraph = function (options) {
+ options = initOptions(options);
+
+ var sentences = options.sentences || this.natural({min: 3, max: 7}),
+ sentence_array = this.n(this.sentence, sentences);
+
+ return sentence_array.join(' ');
+ };
+
+ // Could get smarter about this than generating random words and
+ // chaining them together. Such as: http://vq.io/1a5ceOh
+ Chance.prototype.sentence = function (options) {
+ options = initOptions(options);
+
+ var words = options.words || this.natural({min: 12, max: 18}),
+ punctuation = options.punctuation,
+ text, word_array = this.n(this.word, words);
+
+ text = word_array.join(' ');
+
+ // Capitalize first letter of sentence
+ text = this.capitalize(text);
+
+ // Make sure punctuation has a usable value
+ if (punctuation !== false && !/^[\.\?;!:]$/.test(punctuation)) {
+ punctuation = '.';
+ }
+
+ // Add punctuation mark
+ if (punctuation) {
+ text += punctuation;
+ }
+
+ return text;
+ };
+
+ Chance.prototype.syllable = function (options) {
+ options = initOptions(options);
+
+ var length = options.length || this.natural({min: 2, max: 3}),
+ consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones
+ vowels = 'aeiou', // vowels
+ all = consonants + vowels, // all
+ text = '',
+ chr;
+
+ // I'm sure there's a more elegant way to do this, but this works
+ // decently well.
+ for (var i = 0; i < length; i++) {
+ if (i === 0) {
+ // First character can be anything
+ chr = this.character({pool: all});
+ } else if (consonants.indexOf(chr) === -1) {
+ // Last character was a vowel, now we want a consonant
+ chr = this.character({pool: consonants});
+ } else {
+ // Last character was a consonant, now we want a vowel
+ chr = this.character({pool: vowels});
+ }
+
+ text += chr;
+ }
+
+ if (options.capitalize) {
+ text = this.capitalize(text);
+ }
+
+ return text;
+ };
+
+ Chance.prototype.word = function (options) {
+ options = initOptions(options);
+
+ testRange(
+ options.syllables && options.length,
+ "Chance: Cannot specify both syllables AND length."
+ );
+
+ var syllables = options.syllables || this.natural({min: 1, max: 3}),
+ text = '';
+
+ if (options.length) {
+ // Either bound word by length
+ do {
+ text += this.syllable();
+ } while (text.length < options.length);
+ text = text.substring(0, options.length);
+ } else {
+ // Or by number of syllables
+ for (var i = 0; i < syllables; i++) {
+ text += this.syllable();
+ }
+ }
+
+ if (options.capitalize) {
+ text = this.capitalize(text);
+ }
+
+ return text;
+ };
+
+ // -- End Text --
+
+ // -- Person --
+
+ Chance.prototype.age = function (options) {
+ options = initOptions(options);
+ var ageRange;
+
+ switch (options.type) {
+ case 'child':
+ ageRange = {min: 0, max: 12};
+ break;
+ case 'teen':
+ ageRange = {min: 13, max: 19};
+ break;
+ case 'adult':
+ ageRange = {min: 18, max: 65};
+ break;
+ case 'senior':
+ ageRange = {min: 65, max: 100};
+ break;
+ case 'all':
+ ageRange = {min: 0, max: 100};
+ break;
+ default:
+ ageRange = {min: 18, max: 65};
+ break;
+ }
+
+ return this.natural(ageRange);
+ };
+
+ Chance.prototype.birthday = function (options) {
+ var age = this.age(options);
+ var currentYear = new Date().getFullYear();
+
+ if (options && options.type) {
+ var min = new Date();
+ var max = new Date();
+ min.setFullYear(currentYear - age - 1);
+ max.setFullYear(currentYear - age);
+
+ options = initOptions(options, {
+ min: min,
+ max: max
+ });
+ } else {
+ options = initOptions(options, {
+ year: currentYear - age
+ });
+ }
+
+ return this.date(options);
+ };
+
+ // CPF; ID to identify taxpayers in Brazil
+ Chance.prototype.cpf = function (options) {
+ options = initOptions(options, {
+ formatted: true
+ });
+
+ var n = this.n(this.natural, 9, { max: 9 });
+ 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;
+ d1 = 11 - (d1 % 11);
+ if (d1>=10) {
+ d1 = 0;
+ }
+ 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;
+ d2 = 11 - (d2 % 11);
+ if (d2>=10) {
+ d2 = 0;
+ }
+ var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;
+ return options.formatted ? cpf : cpf.replace(/\D/g,'');
+ };
+
+ // CNPJ: ID to identify companies in Brazil
+ Chance.prototype.cnpj = function (options) {
+ options = initOptions(options, {
+ formatted: true
+ });
+
+ var n = this.n(this.natural, 12, { max: 12 });
+ 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;
+ d1 = 11 - (d1 % 11);
+ if (d1<2) {
+ d1 = 0;
+ }
+ 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;
+ d2 = 11 - (d2 % 11);
+ if (d2<2) {
+ d2 = 0;
+ }
+ 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;
+ return options.formatted ? cnpj : cnpj.replace(/\D/g,'');
+ };
+
+ Chance.prototype.first = function (options) {
+ options = initOptions(options, {gender: this.gender(), nationality: 'en'});
+ return this.pick(this.get("firstNames")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);
+ };
+
+ Chance.prototype.profession = function (options) {
+ options = initOptions(options);
+ if(options.rank){
+ return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get("profession"));
+ } else{
+ return this.pick(this.get("profession"));
+ }
+ };
+
+ Chance.prototype.company = function (){
+ return this.pick(this.get("company"));
+ };
+
+ Chance.prototype.gender = function (options) {
+ options = initOptions(options, {extraGenders: []});
+ return this.pick(['Male', 'Female'].concat(options.extraGenders));
+ };
+
+ Chance.prototype.last = function (options) {
+ options = initOptions(options, {nationality: '*'});
+ if (options.nationality === "*") {
+ var allLastNames = []
+ var lastNames = this.get("lastNames")
+ Object.keys(lastNames).forEach(function(key, i){
+ allLastNames = allLastNames.concat(lastNames[key])
+ })
+ return this.pick(allLastNames)
+ }
+ else {
+ return this.pick(this.get("lastNames")[options.nationality.toLowerCase()]);
+ }
+
+ };
+
+ Chance.prototype.israelId=function(){
+ var x=this.string({pool: '0123456789',length:8});
+ var y=0;
+ for (var i=0;i<x.length;i++){
+ var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);
+ thisDigit=this.pad(thisDigit,2).toString();
+ thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);
+ y=y+thisDigit;
+ }
+ x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);
+ return x;
+ };
+
+ Chance.prototype.mrz = function (options) {
+ var checkDigit = function (input) {
+ var alpha = "<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(''),
+ multipliers = [ 7, 3, 1 ],
+ runningTotal = 0;
+
+ if (typeof input !== 'string') {
+ input = input.toString();
+ }
+
+ input.split('').forEach(function(character, idx) {
+ var pos = alpha.indexOf(character);
+
+ if(pos !== -1) {
+ character = pos === 0 ? 0 : pos + 9;
+ } else {
+ character = parseInt(character, 10);
+ }
+ character *= multipliers[idx % multipliers.length];
+ runningTotal += character;
+ });
+ return runningTotal % 10;
+ };
+ var generate = function (opts) {
+ var pad = function (length) {
+ return new Array(length + 1).join('<');
+ };
+ var number = [ 'P<',
+ opts.issuer,
+ opts.last.toUpperCase(),
+ '<<',
+ opts.first.toUpperCase(),
+ pad(39 - (opts.last.length + opts.first.length + 2)),
+ opts.passportNumber,
+ checkDigit(opts.passportNumber),
+ opts.nationality,
+ opts.dob,
+ checkDigit(opts.dob),
+ opts.gender,
+ opts.expiry,
+ checkDigit(opts.expiry),
+ pad(14),
+ checkDigit(pad(14)) ].join('');
+
+ return number +
+ (checkDigit(number.substr(44, 10) +
+ number.substr(57, 7) +
+ number.substr(65, 7)));
+ };
+
+ var that = this;
+
+ options = initOptions(options, {
+ first: this.first(),
+ last: this.last(),
+ passportNumber: this.integer({min: 100000000, max: 999999999}),
+ dob: (function () {
+ var date = that.birthday({type: 'adult'});
+ return [date.getFullYear().toString().substr(2),
+ that.pad(date.getMonth() + 1, 2),
+ that.pad(date.getDate(), 2)].join('');
+ }()),
+ expiry: (function () {
+ var date = new Date();
+ return [(date.getFullYear() + 5).toString().substr(2),
+ that.pad(date.getMonth() + 1, 2),
+ that.pad(date.getDate(), 2)].join('');
+ }()),
+ gender: this.gender() === 'Female' ? 'F': 'M',
+ issuer: 'GBR',
+ nationality: 'GBR'
+ });
+ return generate (options);
+ };
+
+ Chance.prototype.name = function (options) {
+ options = initOptions(options);
+
+ var first = this.first(options),
+ last = this.last(options),
+ name;
+
+ if (options.middle) {
+ name = first + ' ' + this.first(options) + ' ' + last;
+ } else if (options.middle_initial) {
+ name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;
+ } else {
+ name = first + ' ' + last;
+ }
+
+ if (options.prefix) {
+ name = this.prefix(options) + ' ' + name;
+ }
+
+ if (options.suffix) {
+ name = name + ' ' + this.suffix(options);
+ }
+
+ return name;
+ };
+
+ // Return the list of available name prefixes based on supplied gender.
+ // @todo introduce internationalization
+ Chance.prototype.name_prefixes = function (gender) {
+ gender = gender || "all";
+ gender = gender.toLowerCase();
+
+ var prefixes = [
+ { name: 'Doctor', abbreviation: 'Dr.' }
+ ];
+
+ if (gender === "male" || gender === "all") {
+ prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });
+ }
+
+ if (gender === "female" || gender === "all") {
+ prefixes.push({ name: 'Miss', abbreviation: 'Miss' });
+ prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });
+ }
+
+ return prefixes;
+ };
+
+ // Alias for name_prefix
+ Chance.prototype.prefix = function (options) {
+ return this.name_prefix(options);
+ };
+
+ Chance.prototype.name_prefix = function (options) {
+ options = initOptions(options, { gender: "all" });
+ return options.full ?
+ this.pick(this.name_prefixes(options.gender)).name :
+ this.pick(this.name_prefixes(options.gender)).abbreviation;
+ };
+ //Hungarian ID number
+ Chance.prototype.HIDN= function(){
+ //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)
+ var idn_pool="0123456789";
+ var idn_chrs="ABCDEFGHIJKLMNOPQRSTUVWXYXZ";
+ var idn="";
+ idn+=this.string({pool:idn_pool,length:6});
+ idn+=this.string({pool:idn_chrs,length:2});
+ return idn;
+ };
+
+
+ Chance.prototype.ssn = function (options) {
+ options = initOptions(options, {ssnFour: false, dashes: true});
+ var ssn_pool = "1234567890",
+ ssn,
+ dash = options.dashes ? '-' : '';
+
+ if(!options.ssnFour) {
+ ssn = this.string({pool: ssn_pool, length: 3}) + dash +
+ this.string({pool: ssn_pool, length: 2}) + dash +
+ this.string({pool: ssn_pool, length: 4});
+ } else {
+ ssn = this.string({pool: ssn_pool, length: 4});
+ }
+ return ssn;
+ };
+
+ // Aadhar is similar to ssn, used in India to uniquely identify a person
+ Chance.prototype.aadhar = function (options) {
+ options = initOptions(options, {onlyLastFour: false, separatedByWhiteSpace: true});
+ var aadhar_pool = "1234567890",
+ aadhar,
+ whiteSpace = options.separatedByWhiteSpace ? ' ' : '';
+
+ if(!options.onlyLastFour) {
+ aadhar = this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
+ this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
+ this.string({pool: aadhar_pool, length: 4});
+ } else {
+ aadhar = this.string({pool: aadhar_pool, length: 4});
+ }
+ return aadhar;
+ };
+
+ // Return the list of available name suffixes
+ // @todo introduce internationalization
+ Chance.prototype.name_suffixes = function () {
+ var suffixes = [
+ { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },
+ { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },
+ { name: 'Esquire', abbreviation: 'Esq.' },
+ { name: 'Junior', abbreviation: 'Jr.' },
+ { name: 'Juris Doctor', abbreviation: 'J.D.' },
+ { name: 'Master of Arts', abbreviation: 'M.A.' },
+ { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },
+ { name: 'Master of Science', abbreviation: 'M.S.' },
+ { name: 'Medical Doctor', abbreviation: 'M.D.' },
+ { name: 'Senior', abbreviation: 'Sr.' },
+ { name: 'The Third', abbreviation: 'III' },
+ { name: 'The Fourth', abbreviation: 'IV' },
+ { name: 'Bachelor of Engineering', abbreviation: 'B.E' },
+ { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }
+ ];
+ return suffixes;
+ };
+
+ // Alias for name_suffix
+ Chance.prototype.suffix = function (options) {
+ return this.name_suffix(options);
+ };
+
+ Chance.prototype.name_suffix = function (options) {
+ options = initOptions(options);
+ return options.full ?
+ this.pick(this.name_suffixes()).name :
+ this.pick(this.name_suffixes()).abbreviation;
+ };
+
+ Chance.prototype.nationalities = function () {
+ return this.get("nationalities");
+ };
+
+ // Generate random nationality based on json list
+ Chance.prototype.nationality = function () {
+ var nationality = this.pick(this.nationalities());
+ return nationality.name;
+ };
+
+ // -- End Person --
+
+ // -- Mobile --
+ // Android GCM Registration ID
+ Chance.prototype.android_id = function () {
+ return "APA91" + this.string({ pool: "0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_", length: 178 });
+ };
+
+ // Apple Push Token
+ Chance.prototype.apple_token = function () {
+ return this.string({ pool: "abcdef1234567890", length: 64 });
+ };
+
+ // Windows Phone 8 ANID2
+ Chance.prototype.wp8_anid2 = function () {
+ return base64( this.hash( { length : 32 } ) );
+ };
+
+ // Windows Phone 7 ANID
+ Chance.prototype.wp7_anid = function () {
+ return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });
+ };
+
+ // BlackBerry Device PIN
+ Chance.prototype.bb_pin = function () {
+ return this.hash({ length: 8 });
+ };
+
+ // -- End Mobile --
+
+ // -- Web --
+ Chance.prototype.avatar = function (options) {
+ var url = null;
+ var URL_BASE = '//www.gravatar.com/avatar/';
+ var PROTOCOLS = {
+ http: 'http',
+ https: 'https'
+ };
+ var FILE_TYPES = {
+ bmp: 'bmp',
+ gif: 'gif',
+ jpg: 'jpg',
+ png: 'png'
+ };
+ var FALLBACKS = {
+ '404': '404', // Return 404 if not found
+ mm: 'mm', // Mystery man
+ identicon: 'identicon', // Geometric pattern based on hash
+ monsterid: 'monsterid', // A generated monster icon
+ wavatar: 'wavatar', // A generated face
+ retro: 'retro', // 8-bit icon
+ blank: 'blank' // A transparent png
+ };
+ var RATINGS = {
+ g: 'g',
+ pg: 'pg',
+ r: 'r',
+ x: 'x'
+ };
+ var opts = {
+ protocol: null,
+ email: null,
+ fileExtension: null,
+ size: null,
+ fallback: null,
+ rating: null
+ };
+
+ if (!options) {
+ // Set to a random email
+ opts.email = this.email();
+ options = {};
+ }
+ else if (typeof options === 'string') {
+ opts.email = options;
+ options = {};
+ }
+ else if (typeof options !== 'object') {
+ return null;
+ }
+ else if (options.constructor === 'Array') {
+ return null;
+ }
+
+ opts = initOptions(options, opts);
+
+ if (!opts.email) {
+ // Set to a random email
+ opts.email = this.email();
+ }
+
+ // Safe checking for params
+ opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';
+ opts.size = parseInt(opts.size, 0) ? opts.size : '';
+ opts.rating = RATINGS[opts.rating] ? opts.rating : '';
+ opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';
+ opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';
+
+ url =
+ opts.protocol +
+ URL_BASE +
+ this.bimd5.md5(opts.email) +
+ (opts.fileExtension ? '.' + opts.fileExtension : '') +
+ (opts.size || opts.rating || opts.fallback ? '?' : '') +
+ (opts.size ? '&s=' + opts.size.toString() : '') +
+ (opts.rating ? '&r=' + opts.rating : '') +
+ (opts.fallback ? '&d=' + opts.fallback : '')
+ ;
+
+ return url;
+ };
+
+ /**
+ * #Description:
+ * ===============================================
+ * Generate random color value base on color type:
+ * -> hex
+ * -> rgb
+ * -> rgba
+ * -> 0x
+ * -> named color
+ *
+ * #Examples:
+ * ===============================================
+ * * Geerate random hex color
+ * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'
+ *
+ * * Generate Hex based color value
+ * chance.color({format: 'hex'}) => '#d67118'
+ *
+ * * Generate simple rgb value
+ * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'
+ *
+ * * Generate Ox based color value
+ * chance.color({format: '0x'}) => '0x67ae0b'
+ *
+ * * Generate graiscale based value
+ * chance.color({grayscale: true}) => '#e2e2e2'
+ *
+ * * Return valide color name
+ * chance.color({format: 'name'}) => 'red'
+ *
+ * * Make color uppercase
+ * chance.color({casing: 'upper'}) => '#29CFA7'
+ *
+ * * Min Max values for RGBA
+ * 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});
+ *
+ * @param [object] options
+ * @return [string] color value
+ */
+ Chance.prototype.color = function (options) {
+ function gray(value, delimiter) {
+ return [value, value, value].join(delimiter || '');
+ }
+
+ function rgb(hasAlpha) {
+ var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';
+ var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : "";
+ 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}));
+ return rgbValue + '(' + colorValue + alphaChannel + ')';
+ }
+
+ function hex(start, end, withHash) {
+ var symbol = (withHash) ? "#" : "";
+ var hexstring = "";
+
+ if (isGrayscale) {
+ hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));
+ if (options.format === "shorthex") {
+ hexstring = gray(this.hex({min: 0, max: 15}));
+ }
+ }
+ else {
+ if (options.format === "shorthex") {
+ 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);
+ }
+ else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {
+ 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);
+ }
+ else {
+ 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);
+ }
+ }
+
+ return symbol + hexstring;
+ }
+
+ options = initOptions(options, {
+ format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),
+ grayscale: false,
+ casing: 'lower',
+ min: 0,
+ max: 255,
+ min_red: undefined,
+ max_red: undefined,
+ min_green: undefined,
+ max_green: undefined,
+ min_blue: undefined,
+ max_blue: undefined,
+ min_alpha: 0,
+ max_alpha: 1
+ });
+
+ var isGrayscale = options.grayscale;
+ var min_rgb = options.min;
+ var max_rgb = options.max;
+ var min_red = options.min_red;
+ var max_red = options.max_red;
+ var min_green = options.min_green;
+ var max_green = options.max_green;
+ var min_blue = options.min_blue;
+ var max_blue = options.max_blue;
+ var min_alpha = options.min_alpha;
+ var max_alpha = options.max_alpha;
+ if (options.min_red === undefined) { min_red = min_rgb; }
+ if (options.max_red === undefined) { max_red = max_rgb; }
+ if (options.min_green === undefined) { min_green = min_rgb; }
+ if (options.max_green === undefined) { max_green = max_rgb; }
+ if (options.min_blue === undefined) { min_blue = min_rgb; }
+ if (options.max_blue === undefined) { max_blue = max_rgb; }
+ if (options.min_alpha === undefined) { min_alpha = 0; }
+ if (options.max_alpha === undefined) { max_alpha = 1; }
+ if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {
+ min_rgb = ((min_red + min_green + min_blue) / 3);
+ max_rgb = ((max_red + max_green + max_blue) / 3);
+ }
+ var colorValue;
+
+ if (options.format === 'hex') {
+ colorValue = hex.call(this, 2, 6, true);
+ }
+ else if (options.format === 'shorthex') {
+ colorValue = hex.call(this, 1, 3, true);
+ }
+ else if (options.format === 'rgb') {
+ colorValue = rgb.call(this, false);
+ }
+ else if (options.format === 'rgba') {
+ colorValue = rgb.call(this, true);
+ }
+ else if (options.format === '0x') {
+ colorValue = '0x' + hex.call(this, 2, 6);
+ }
+ else if(options.format === 'name') {
+ return this.pick(this.get("colorNames"));
+ }
+ else {
+ throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".');
+ }
+
+ if (options.casing === 'upper' ) {
+ colorValue = colorValue.toUpperCase();
+ }
+
+ return colorValue;
+ };
+
+ Chance.prototype.domain = function (options) {
+ options = initOptions(options);
+ return this.word() + '.' + (options.tld || this.tld());
+ };
+
+ Chance.prototype.email = function (options) {
+ options = initOptions(options);
+ return this.word({length: options.length}) + '@' + (options.domain || this.domain());
+ };
+
+ /**
+ * #Description:
+ * ===============================================
+ * Generate a random Facebook id, aka fbid.
+ *
+ * NOTE: At the moment (Sep 2017), Facebook ids are
+ * "numeric strings" of length 16.
+ * However, Facebook Graph API documentation states that
+ * "it is extremely likely to change over time".
+ * @see https://developers.facebook.com/docs/graph-api/overview/
+ *
+ * #Examples:
+ * ===============================================
+ * chance.fbid() => '1000035231661304'
+ *
+ * @return [string] facebook id
+ */
+ Chance.prototype.fbid = function () {
+ return '10000' + this.string({pool: "1234567890", length: 11});
+ };
+
+ Chance.prototype.google_analytics = function () {
+ var account = this.pad(this.natural({max: 999999}), 6);
+ var property = this.pad(this.natural({max: 99}), 2);
+
+ return 'UA-' + account + '-' + property;
+ };
+
+ Chance.prototype.hashtag = function () {
+ return '#' + this.word();
+ };
+
+ Chance.prototype.ip = function () {
+ // Todo: This could return some reserved IPs. See http://vq.io/137dgYy
+ // this should probably be updated to account for that rare as it may be
+ return this.natural({min: 1, max: 254}) + '.' +
+ this.natural({max: 255}) + '.' +
+ this.natural({max: 255}) + '.' +
+ this.natural({min: 1, max: 254});
+ };
+
+ Chance.prototype.ipv6 = function () {
+ var ip_addr = this.n(this.hash, 8, {length: 4});
+
+ return ip_addr.join(":");
+ };
+
+ Chance.prototype.klout = function () {
+ return this.natural({min: 1, max: 99});
+ };
+
+ Chance.prototype.semver = function (options) {
+ options = initOptions(options, { include_prerelease: true });
+
+ var range = this.pickone(["^", "~", "<", ">", "<=", ">=", "="]);
+ if (options.range) {
+ range = options.range;
+ }
+
+ var prerelease = "";
+ if (options.include_prerelease) {
+ prerelease = this.weighted(["", "-dev", "-beta", "-alpha"], [50, 10, 5, 1]);
+ }
+ return range + this.rpg('3d10').join('.') + prerelease;
+ };
+
+ Chance.prototype.tlds = function () {
+ 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'];
+ };
+
+ Chance.prototype.tld = function () {
+ return this.pick(this.tlds());
+ };
+
+ Chance.prototype.twitter = function () {
+ return '@' + this.word();
+ };
+
+ Chance.prototype.url = function (options) {
+ options = initOptions(options, { protocol: "http", domain: this.domain(options), domain_prefix: "", path: this.word(), extensions: []});
+
+ var extension = options.extensions.length > 0 ? "." + this.pick(options.extensions) : "";
+ var domain = options.domain_prefix ? options.domain_prefix + "." + options.domain : options.domain;
+
+ return options.protocol + "://" + domain + "/" + options.path + extension;
+ };
+
+ Chance.prototype.port = function() {
+ return this.integer({min: 0, max: 65535});
+ };
+
+ Chance.prototype.locale = function (options) {
+ options = initOptions(options);
+ if (options.region){
+ return this.pick(this.get("locale_regions"));
+ } else {
+ return this.pick(this.get("locale_languages"));
+ }
+ };
+
+ Chance.prototype.locales = function (options) {
+ options = initOptions(options);
+ if (options.region){
+ return this.get("locale_regions");
+ } else {
+ return this.get("locale_languages");
+ }
+ };
+
+ Chance.prototype.loremPicsum = function (options) {
+ options = initOptions(options, { width: 500, height: 500, greyscale: false, blurred: false });
+
+ var greyscale = options.greyscale ? 'g/' : '';
+ var query = options.blurred ? '/?blur' : '/?random';
+
+ return 'https://picsum.photos/' + greyscale + options.width + '/' + options.height + query;
+ }
+
+ // -- End Web --
+
+ // -- Location --
+
+ Chance.prototype.address = function (options) {
+ options = initOptions(options);
+ return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);
+ };
+
+ Chance.prototype.altitude = function (options) {
+ options = initOptions(options, {fixed: 5, min: 0, max: 8848});
+ return this.floating({
+ min: options.min,
+ max: options.max,
+ fixed: options.fixed
+ });
+ };
+
+ Chance.prototype.areacode = function (options) {
+ options = initOptions(options, {parens : true});
+ // Don't want area codes to start with 1, or have a 9 as the second digit
+ var areacode = this.natural({min: 2, max: 9}).toString() +
+ this.natural({min: 0, max: 8}).toString() +
+ this.natural({min: 0, max: 9}).toString();
+
+ return options.parens ? '(' + areacode + ')' : areacode;
+ };
+
+ Chance.prototype.city = function () {
+ return this.capitalize(this.word({syllables: 3}));
+ };
+
+ Chance.prototype.coordinates = function (options) {
+ return this.latitude(options) + ', ' + this.longitude(options);
+ };
+
+ Chance.prototype.countries = function () {
+ return this.get("countries");
+ };
+
+ Chance.prototype.country = function (options) {
+ options = initOptions(options);
+ var country = this.pick(this.countries());
+ return options.raw ? country : options.full ? country.name : country.abbreviation;
+ };
+
+ Chance.prototype.depth = function (options) {
+ options = initOptions(options, {fixed: 5, min: -10994, max: 0});
+ return this.floating({
+ min: options.min,
+ max: options.max,
+ fixed: options.fixed
+ });
+ };
+
+ Chance.prototype.geohash = function (options) {
+ options = initOptions(options, { length: 7 });
+ return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });
+ };
+
+ Chance.prototype.geojson = function (options) {
+ return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);
+ };
+
+ Chance.prototype.latitude = function (options) {
+ options = initOptions(options, {fixed: 5, min: -90, max: 90});
+ return this.floating({min: options.min, max: options.max, fixed: options.fixed});
+ };
+
+ Chance.prototype.longitude = function (options) {
+ options = initOptions(options, {fixed: 5, min: -180, max: 180});
+ return this.floating({min: options.min, max: options.max, fixed: options.fixed});
+ };
+
+ Chance.prototype.phone = function (options) {
+ var self = this,
+ numPick,
+ ukNum = function (parts) {
+ var section = [];
+ //fills the section part of the phone number with random numbers.
+ parts.sections.forEach(function(n) {
+ section.push(self.string({ pool: '0123456789', length: n}));
+ });
+ return parts.area + section.join(' ');
+ };
+ options = initOptions(options, {
+ formatted: true,
+ country: 'us',
+ mobile: false
+ });
+ if (!options.formatted) {
+ options.parens = false;
+ }
+ var phone;
+ switch (options.country) {
+ case 'fr':
+ if (!options.mobile) {
+ numPick = this.pick([
+ // Valid zone and département codes.
+ '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}),
+ '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}),
+ '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}),
+ '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}),
+ '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}),
+ '09' + self.string({ pool: '0123456789', length: 8}),
+ ]);
+ phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
+ } else {
+ numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});
+ phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
+ }
+ break;
+ case 'uk':
+ if (!options.mobile) {
+ numPick = this.pick([
+ //valid area codes of major cities/counties followed by random numbers in required format.
+
+ { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },
+ { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },
+ { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },
+ { area: '024 7', sections: [3,4] },
+ { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },
+ { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },
+ { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },
+ { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },
+ { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },
+ { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },
+ { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },
+ { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },
+ { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }
+ ]);
+ phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');
+ } else {
+ numPick = this.pick([
+ { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },
+ { area: '07624 ', sections: [6] }
+ ]);
+ phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');
+ }
+ break;
+ case 'za':
+ if (!options.mobile) {
+ numPick = this.pick([
+ '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
+ '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
+ '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),
+ '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),
+ '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
+ ]);
+ phone = options.formatted || numPick;
+ } else {
+ numPick = this.pick([
+ '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
+ '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),
+ '06' + self.string({ pool: '0123456789', length: 7}),
+ '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
+ '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),
+ '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),
+ ]);
+ phone = options.formatted || numPick;
+ }
+ break;
+ case 'us':
+ var areacode = this.areacode(options).toString();
+ var exchange = this.natural({ min: 2, max: 9 }).toString() +
+ this.natural({ min: 0, max: 9 }).toString() +
+ this.natural({ min: 0, max: 9 }).toString();
+ var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}
+ phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;
+ break;
+ case 'br':
+ 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"]);
+ var prefix;
+ if (options.mobile) {
+ // Brasilian official reference (mobile): http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=330
+ prefix = '9' + self.string({ pool: '0123456789', length: 4});
+ } else {
+ // Brasilian official reference: http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=331
+ prefix = this.natural({ min: 2000, max: 5999 }).toString();
+ }
+ var mcdu = self.string({ pool: '0123456789', length: 4});
+ phone = options.formatted ? '(' + areaCode + ') ' + prefix + '-' + mcdu : areaCode + prefix + mcdu;
+ break;
+ }
+ return phone;
+ };
+
+ Chance.prototype.postal = function () {
+ // Postal District
+ var pd = this.character({pool: "XVTSRPNKLMHJGECBA"});
+ // Forward Sortation Area (FSA)
+ var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: "upper"});
+ // Local Delivery Unut (LDU)
+ var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: "upper"}) + this.natural({max: 9});
+
+ return fsa + " " + ldu;
+ };
+
+ Chance.prototype.counties = function (options) {
+ options = initOptions(options, { country: 'uk' });
+ return this.get("counties")[options.country.toLowerCase()];
+ };
+
+ Chance.prototype.county = function (options) {
+ return this.pick(this.counties(options)).name;
+ };
+
+ Chance.prototype.provinces = function (options) {
+ options = initOptions(options, { country: 'ca' });
+ return this.get("provinces")[options.country.toLowerCase()];
+ };
+
+ Chance.prototype.province = function (options) {
+ return (options && options.full) ?
+ this.pick(this.provinces(options)).name :
+ this.pick(this.provinces(options)).abbreviation;
+ };
+
+ Chance.prototype.state = function (options) {
+ return (options && options.full) ?
+ this.pick(this.states(options)).name :
+ this.pick(this.states(options)).abbreviation;
+ };
+
+ Chance.prototype.states = function (options) {
+ options = initOptions(options, { country: 'us', us_states_and_dc: true } );
+
+ var states;
+
+ switch (options.country.toLowerCase()) {
+ case 'us':
+ var us_states_and_dc = this.get("us_states_and_dc"),
+ territories = this.get("territories"),
+ armed_forces = this.get("armed_forces");
+
+ states = [];
+
+ if (options.us_states_and_dc) {
+ states = states.concat(us_states_and_dc);
+ }
+ if (options.territories) {
+ states = states.concat(territories);
+ }
+ if (options.armed_forces) {
+ states = states.concat(armed_forces);
+ }
+ break;
+ case 'it':
+ states = this.get("country_regions")[options.country.toLowerCase()];
+ break;
+ case 'uk':
+ states = this.get("counties")[options.country.toLowerCase()];
+ break;
+ }
+
+ return states;
+ };
+
+ Chance.prototype.street = function (options) {
+ options = initOptions(options, { country: 'us', syllables: 2 });
+ var street;
+
+ switch (options.country.toLowerCase()) {
+ case 'us':
+ street = this.word({ syllables: options.syllables });
+ street = this.capitalize(street);
+ street += ' ';
+ street += options.short_suffix ?
+ this.street_suffix(options).abbreviation :
+ this.street_suffix(options).name;
+ break;
+ case 'it':
+ street = this.word({ syllables: options.syllables });
+ street = this.capitalize(street);
+ street = (options.short_suffix ?
+ this.street_suffix(options).abbreviation :
+ this.street_suffix(options).name) + " " + street;
+ break;
+ }
+ return street;
+ };
+
+ Chance.prototype.street_suffix = function (options) {
+ options = initOptions(options, { country: 'us' });
+ return this.pick(this.street_suffixes(options));
+ };
+
+ Chance.prototype.street_suffixes = function (options) {
+ options = initOptions(options, { country: 'us' });
+ // These are the most common suffixes.
+ return this.get("street_suffixes")[options.country.toLowerCase()];
+ };
+
+ // Note: only returning US zip codes, internationalization will be a whole
+ // other beast to tackle at some point.
+ Chance.prototype.zip = function (options) {
+ var zip = this.n(this.natural, 5, {max: 9});
+
+ if (options && options.plusfour === true) {
+ zip.push('-');
+ zip = zip.concat(this.n(this.natural, 4, {max: 9}));
+ }
+
+ return zip.join("");
+ };
+
+ // -- End Location --
+
+ // -- Time
+
+ Chance.prototype.ampm = function () {
+ return this.bool() ? 'am' : 'pm';
+ };
+
+ Chance.prototype.date = function (options) {
+ var date_string, date;
+
+ // If interval is specified we ignore preset
+ if(options && (options.min || options.max)) {
+ options = initOptions(options, {
+ american: true,
+ string: false
+ });
+ var min = typeof options.min !== "undefined" ? options.min.getTime() : 1;
+ // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1
+ var max = typeof options.max !== "undefined" ? options.max.getTime() : 8640000000000000;
+
+ date = new Date(this.integer({min: min, max: max}));
+ } else {
+ var m = this.month({raw: true});
+ var daysInMonth = m.days;
+
+ if(options && options.month) {
+ // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).
+ daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;
+ }
+
+ options = initOptions(options, {
+ year: parseInt(this.year(), 10),
+ // Necessary to subtract 1 because Date() 0-indexes month but not day or year
+ // for some reason.
+ month: m.numeric - 1,
+ day: this.natural({min: 1, max: daysInMonth}),
+ hour: this.hour({twentyfour: true}),
+ minute: this.minute(),
+ second: this.second(),
+ millisecond: this.millisecond(),
+ american: true,
+ string: false
+ });
+
+ date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);
+ }
+
+ if (options.american) {
+ // Adding 1 to the month is necessary because Date() 0-indexes
+ // months but not day for some odd reason.
+ date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
+ } else {
+ date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
+ }
+
+ return options.string ? date_string : date;
+ };
+
+ Chance.prototype.hammertime = function (options) {
+ return this.date(options).getTime();
+ };
+
+ Chance.prototype.hour = function (options) {
+ options = initOptions(options, {
+ min: options && options.twentyfour ? 0 : 1,
+ max: options && options.twentyfour ? 23 : 12
+ });
+
+ testRange(options.min < 0, "Chance: Min cannot be less than 0.");
+ testRange(options.twentyfour && options.max > 23, "Chance: Max cannot be greater than 23 for twentyfour option.");
+ testRange(!options.twentyfour && options.max > 12, "Chance: Max cannot be greater than 12.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ return this.natural({min: options.min, max: options.max});
+ };
+
+ Chance.prototype.millisecond = function () {
+ return this.natural({max: 999});
+ };
+
+ Chance.prototype.minute = Chance.prototype.second = function (options) {
+ options = initOptions(options, {min: 0, max: 59});
+
+ testRange(options.min < 0, "Chance: Min cannot be less than 0.");
+ testRange(options.max > 59, "Chance: Max cannot be greater than 59.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ return this.natural({min: options.min, max: options.max});
+ };
+
+ Chance.prototype.month = function (options) {
+ options = initOptions(options, {min: 1, max: 12});
+
+ testRange(options.min < 1, "Chance: Min cannot be less than 1.");
+ testRange(options.max > 12, "Chance: Max cannot be greater than 12.");
+ testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
+
+ var month = this.pick(this.months().slice(options.min - 1, options.max));
+ return options.raw ? month : month.name;
+ };
+
+ Chance.prototype.months = function () {
+ return this.get("months");
+ };
+
+ Chance.prototype.second = function () {
+ return this.natural({max: 59});
+ };
+
+ Chance.prototype.timestamp = function () {
+ return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});
+ };
+
+ Chance.prototype.weekday = function (options) {
+ options = initOptions(options, {weekday_only: false});
+ var weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
+ if (!options.weekday_only) {
+ weekdays.push("Saturday");
+ weekdays.push("Sunday");
+ }
+ return this.pickone(weekdays);
+ };
+
+ Chance.prototype.year = function (options) {
+ // Default to current year as min if none specified
+ options = initOptions(options, {min: new Date().getFullYear()});
+
+ // Default to one century after current year as max if none specified
+ options.max = (typeof options.max !== "undefined") ? options.max : options.min + 100;
+
+ return this.natural(options).toString();
+ };
+
+ // -- End Time
+
+ // -- Finance --
+
+ Chance.prototype.cc = function (options) {
+ options = initOptions(options);
+
+ var type, number, to_generate;
+
+ type = (options.type) ?
+ this.cc_type({ name: options.type, raw: true }) :
+ this.cc_type({ raw: true });
+
+ number = type.prefix.split("");
+ to_generate = type.length - type.prefix.length - 1;
+
+ // Generates n - 1 digits
+ number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));
+
+ // Generates the last digit according to Luhn algorithm
+ number.push(this.luhn_calculate(number.join("")));
+
+ return number.join("");
+ };
+
+ Chance.prototype.cc_types = function () {
+ // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
+ return this.get("cc_types");
+ };
+
+ Chance.prototype.cc_type = function (options) {
+ options = initOptions(options);
+ var types = this.cc_types(),
+ type = null;
+
+ if (options.name) {
+ for (var i = 0; i < types.length; i++) {
+ // Accept either name or short_name to specify card type
+ if (types[i].name === options.name || types[i].short_name === options.name) {
+ type = types[i];
+ break;
+ }
+ }
+ if (type === null) {
+ throw new RangeError("Chance: Credit card type '" + options.name + "' is not supported");
+ }
+ } else {
+ type = this.pick(types);
+ }
+
+ return options.raw ? type : type.name;
+ };
+
+ // return all world currency by ISO 4217
+ Chance.prototype.currency_types = function () {
+ return this.get("currency_types");
+ };
+
+ // return random world currency by ISO 4217
+ Chance.prototype.currency = function () {
+ return this.pick(this.currency_types());
+ };
+
+ // return all timezones available
+ Chance.prototype.timezones = function () {
+ return this.get("timezones");
+ };
+
+ // return random timezone
+ Chance.prototype.timezone = function () {
+ return this.pick(this.timezones());
+ };
+
+ //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code
+ Chance.prototype.currency_pair = function (returnAsString) {
+ var currencies = this.unique(this.currency, 2, {
+ comparator: function(arr, val) {
+
+ return arr.reduce(function(acc, item) {
+ // If a match has been found, short circuit check and just return
+ return acc || (item.code === val.code);
+ }, false);
+ }
+ });
+
+ if (returnAsString) {
+ return currencies[0].code + '/' + currencies[1].code;
+ } else {
+ return currencies;
+ }
+ };
+
+ Chance.prototype.dollar = function (options) {
+ // By default, a somewhat more sane max for dollar than all available numbers
+ options = initOptions(options, {max : 10000, min : 0});
+
+ var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),
+ cents = dollar.split('.')[1];
+
+ if (cents === undefined) {
+ dollar += '.00';
+ } else if (cents.length < 2) {
+ dollar = dollar + '0';
+ }
+
+ if (dollar < 0) {
+ return '-$' + dollar.replace('-', '');
+ } else {
+ return '$' + dollar;
+ }
+ };
+
+ Chance.prototype.euro = function (options) {
+ return Number(this.dollar(options).replace("$", "")).toLocaleString() + "€";
+ };
+
+ Chance.prototype.exp = function (options) {
+ options = initOptions(options);
+ var exp = {};
+
+ exp.year = this.exp_year();
+
+ // If the year is this year, need to ensure month is greater than the
+ // current month or this expiration will not be valid
+ if (exp.year === (new Date().getFullYear()).toString()) {
+ exp.month = this.exp_month({future: true});
+ } else {
+ exp.month = this.exp_month();
+ }
+
+ return options.raw ? exp : exp.month + '/' + exp.year;
+ };
+
+ Chance.prototype.exp_month = function (options) {
+ options = initOptions(options);
+ var month, month_int,
+ // Date object months are 0 indexed
+ curMonth = new Date().getMonth() + 1;
+
+ if (options.future && (curMonth !== 12)) {
+ do {
+ month = this.month({raw: true}).numeric;
+ month_int = parseInt(month, 10);
+ } while (month_int <= curMonth);
+ } else {
+ month = this.month({raw: true}).numeric;
+ }
+
+ return month;
+ };
+
+ Chance.prototype.exp_year = function () {
+ var curMonth = new Date().getMonth() + 1,
+ curYear = new Date().getFullYear();
+
+ return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});
+ };
+
+ Chance.prototype.vat = function (options) {
+ options = initOptions(options, { country: 'it' });
+ switch (options.country.toLowerCase()) {
+ case 'it':
+ return this.it_vat();
+ }
+ };
+
+ /**
+ * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).
+ * No country-specific formats support (yet)
+ */
+ Chance.prototype.iban = function () {
+ var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ var alphanum = alpha + '0123456789';
+ var iban =
+ this.string({ length: 2, pool: alpha }) +
+ this.pad(this.integer({ min: 0, max: 99 }), 2) +
+ this.string({ length: 4, pool: alphanum }) +
+ this.pad(this.natural(), this.natural({ min: 6, max: 26 }));
+ return iban;
+ };
+
+ // -- End Finance
+
+ // -- Regional
+
+ Chance.prototype.it_vat = function () {
+ var it_vat = this.natural({min: 1, max: 1800000});
+
+ it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);
+ return it_vat + this.luhn_calculate(it_vat);
+ };
+
+ /*
+ * this generator is written following the official algorithm
+ * all data can be passed explicitely or randomized by calling chance.cf() without options
+ * the code does not check that the input data is valid (it goes beyond the scope of the generator)
+ *
+ * @param [Object] options = { first: first name,
+ * last: last name,
+ * gender: female|male,
+ birthday: JavaScript date object,
+ city: string(4), 1 letter + 3 numbers
+ }
+ * @return [string] codice fiscale
+ *
+ */
+ Chance.prototype.cf = function (options) {
+ options = options || {};
+ var gender = !!options.gender ? options.gender : this.gender(),
+ first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),
+ last = !!options.last ? options.last : this.last( { nationality: 'it'} ),
+ birthday = !!options.birthday ? options.birthday : this.birthday(),
+ 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),
+ cf = [],
+ name_generator = function(name, isLast) {
+ var temp,
+ return_value = [];
+
+ if (name.length < 3) {
+ return_value = name.split("").concat("XXX".split("")).splice(0,3);
+ }
+ else {
+ temp = name.toUpperCase().split('').map(function(c){
+ return ("BCDFGHJKLMNPRSTVWZ".indexOf(c) !== -1) ? c : undefined;
+ }).join('');
+ if (temp.length > 3) {
+ if (isLast) {
+ temp = temp.substr(0,3);
+ } else {
+ temp = temp[0] + temp.substr(2,2);
+ }
+ }
+ if (temp.length < 3) {
+ return_value = temp;
+ temp = name.toUpperCase().split('').map(function(c){
+ return ("AEIOU".indexOf(c) !== -1) ? c : undefined;
+ }).join('').substr(0, 3 - return_value.length);
+ }
+ return_value = return_value + temp;
+ }
+
+ return return_value;
+ },
+ date_generator = function(birthday, gender, that) {
+ var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];
+
+ return birthday.getFullYear().toString().substr(2) +
+ lettermonths[birthday.getMonth()] +
+ that.pad(birthday.getDate() + ((gender.toLowerCase() === "female") ? 40 : 0), 2);
+ },
+ checkdigit_generator = function(cf) {
+ var range1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ range2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ evens = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ odds = "BAKPLCQDREVOSFTGUHMINJWZYX",
+ digit = 0;
+
+
+ for(var i = 0; i < 15; i++) {
+ if (i % 2 !== 0) {
+ digit += evens.indexOf(range2[range1.indexOf(cf[i])]);
+ }
+ else {
+ digit += odds.indexOf(range2[range1.indexOf(cf[i])]);
+ }
+ }
+ return evens[digit % 26];
+ };
+
+ cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split("")).join("");
+ cf += checkdigit_generator(cf.toUpperCase(), this);
+
+ return cf.toUpperCase();
+ };
+
+ Chance.prototype.pl_pesel = function () {
+ var number = this.natural({min: 1, max: 9999999999});
+ var arr = this.pad(number, 10).split('');
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = parseInt(arr[i]);
+ }
+
+ 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;
+ if(controlNumber !== 0) {
+ controlNumber = 10 - controlNumber;
+ }
+
+ return arr.join('') + controlNumber;
+ };
+
+ Chance.prototype.pl_nip = function () {
+ var number = this.natural({min: 1, max: 999999999});
+ var arr = this.pad(number, 9).split('');
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = parseInt(arr[i]);
+ }
+
+ 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;
+ if(controlNumber === 10) {
+ return this.pl_nip();
+ }
+
+ return arr.join('') + controlNumber;
+ };
+
+ Chance.prototype.pl_regon = function () {
+ var number = this.natural({min: 1, max: 99999999});
+ var arr = this.pad(number, 8).split('');
+ for (var i = 0; i < arr.length; i++) {
+ arr[i] = parseInt(arr[i]);
+ }
+
+ 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;
+ if(controlNumber === 10) {
+ controlNumber = 0;
+ }
+
+ return arr.join('') + controlNumber;
+ };
+
+ // -- End Regional
+
+ // -- Music --
+
+ Chance.prototype.note = function(options) {
+ // choices for 'notes' option:
+ // flatKey - chromatic scale with flat notes (default)
+ // sharpKey - chromatic scale with sharp notes
+ // flats - just flat notes
+ // sharps - just sharp notes
+ // naturals - just natural notes
+ // all - naturals, sharps and flats
+ options = initOptions(options, { notes : 'flatKey'});
+ var scales = {
+ naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],
+ flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],
+ sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']
+ };
+ scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))
+ scales.flatKey = scales.naturals.concat(scales.flats)
+ scales.sharpKey = scales.naturals.concat(scales.sharps)
+ return this.pickone(scales[options.notes]);
+ }
+
+ Chance.prototype.midi_note = function(options) {
+ var min = 0;
+ var max = 127;
+ options = initOptions(options, { min : min, max : max });
+ return this.integer({min: options.min, max: options.max});
+ }
+
+ Chance.prototype.chord_quality = function(options) {
+ options = initOptions(options, { jazz: true });
+ var chord_qualities = ['maj', 'min', 'aug', 'dim'];
+ if (options.jazz){
+ chord_qualities = [
+ 'maj7',
+ 'min7',
+ '7',
+ 'sus',
+ 'dim',
+ 'ø'
+ ];
+ }
+ return this.pickone(chord_qualities);
+ }
+
+ Chance.prototype.chord = function (options) {
+ options = initOptions(options);
+ return this.note(options) + this.chord_quality(options);
+ }
+
+ Chance.prototype.tempo = function (options) {
+ var min = 40;
+ var max = 320;
+ options = initOptions(options, {min: min, max: max});
+ return this.integer({min: options.min, max: options.max});
+ }
+
+ // -- End Music
+
+ // -- Miscellaneous --
+
+ // Coin - Flip, flip, flipadelphia
+ Chance.prototype.coin = function(options) {
+ return this.bool() ? "heads" : "tails";
+ }
+
+ // Dice - For all the board game geeks out there, myself included ;)
+ function diceFn (range) {
+ return function () {
+ return this.natural(range);
+ };
+ }
+ Chance.prototype.d4 = diceFn({min: 1, max: 4});
+ Chance.prototype.d6 = diceFn({min: 1, max: 6});
+ Chance.prototype.d8 = diceFn({min: 1, max: 8});
+ Chance.prototype.d10 = diceFn({min: 1, max: 10});
+ Chance.prototype.d12 = diceFn({min: 1, max: 12});
+ Chance.prototype.d20 = diceFn({min: 1, max: 20});
+ Chance.prototype.d30 = diceFn({min: 1, max: 30});
+ Chance.prototype.d100 = diceFn({min: 1, max: 100});
+
+ Chance.prototype.rpg = function (thrown, options) {
+ options = initOptions(options);
+ if (!thrown) {
+ throw new RangeError("Chance: A type of die roll must be included");
+ } else {
+ var bits = thrown.toLowerCase().split("d"),
+ rolls = [];
+
+ if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {
+ 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");
+ }
+ for (var i = bits[0]; i > 0; i--) {
+ rolls[i - 1] = this.natural({min: 1, max: bits[1]});
+ }
+ return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;
+ }
+ };
+
+ // Guid
+ Chance.prototype.guid = function (options) {
+ options = initOptions(options, { version: 5 });
+
+ var guid_pool = "abcdef1234567890",
+ variant_pool = "ab89",
+ guid = this.string({ pool: guid_pool, length: 8 }) + '-' +
+ this.string({ pool: guid_pool, length: 4 }) + '-' +
+ // The Version
+ options.version +
+ this.string({ pool: guid_pool, length: 3 }) + '-' +
+ // The Variant
+ this.string({ pool: variant_pool, length: 1 }) +
+ this.string({ pool: guid_pool, length: 3 }) + '-' +
+ this.string({ pool: guid_pool, length: 12 });
+ return guid;
+ };
+
+ // Hash
+ Chance.prototype.hash = function (options) {
+ options = initOptions(options, {length : 40, casing: 'lower'});
+ var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;
+ return this.string({pool: pool, length: options.length});
+ };
+
+ Chance.prototype.luhn_check = function (num) {
+ var str = num.toString();
+ var checkDigit = +str.substring(str.length - 1);
+ return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));
+ };
+
+ Chance.prototype.luhn_calculate = function (num) {
+ var digits = num.toString().split("").reverse();
+ var sum = 0;
+ var digit;
+
+ for (var i = 0, l = digits.length; l > i; ++i) {
+ digit = +digits[i];
+ if (i % 2 === 0) {
+ digit *= 2;
+ if (digit > 9) {
+ digit -= 9;
+ }
+ }
+ sum += digit;
+ }
+ return (sum * 9) % 10;
+ };
+
+ // MD5 Hash
+ Chance.prototype.md5 = function(options) {
+ var opts = { str: '', key: null, raw: false };
+
+ if (!options) {
+ opts.str = this.string();
+ options = {};
+ }
+ else if (typeof options === 'string') {
+ opts.str = options;
+ options = {};
+ }
+ else if (typeof options !== 'object') {
+ return null;
+ }
+ else if(options.constructor === 'Array') {
+ return null;
+ }
+
+ opts = initOptions(options, opts);
+
+ if(!opts.str){
+ throw new Error('A parameter is required to return an md5 hash.');
+ }
+
+ return this.bimd5.md5(opts.str, opts.key, opts.raw);
+ };
+
+ /**
+ * #Description:
+ * =====================================================
+ * Generate random file name with extension
+ *
+ * The argument provide extension type
+ * -> raster
+ * -> vector
+ * -> 3d
+ * -> document
+ *
+ * If nothing is provided the function return random file name with random
+ * extension type of any kind
+ *
+ * The user can validate the file name length range
+ * If nothing provided the generated file name is random
+ *
+ * #Extension Pool :
+ * * Currently the supported extensions are
+ * -> some of the most popular raster image extensions
+ * -> some of the most popular vector image extensions
+ * -> some of the most popular 3d image extensions
+ * -> some of the most popular document extensions
+ *
+ * #Examples :
+ * =====================================================
+ *
+ * Return random file name with random extension. The file extension
+ * is provided by a predefined collection of extensions. More about the extension
+ * pool can be found in #Extension Pool section
+ *
+ * chance.file()
+ * => dsfsdhjf.xml
+ *
+ * In order to generate a file name with specific length, specify the
+ * length property and integer value. The extension is going to be random
+ *
+ * chance.file({length : 10})
+ * => asrtineqos.pdf
+ *
+ * In order to generate file with extension from some of the predefined groups
+ * of the extension pool just specify the extension pool category in fileType property
+ *
+ * chance.file({fileType : 'raster'})
+ * => dshgssds.psd
+ *
+ * You can provide specific extension for your files
+ * chance.file({extension : 'html'})
+ * => djfsd.html
+ *
+ * Or you could pass custom collection of extensions by array or by object
+ * chance.file({extensions : [...]})
+ * => dhgsdsd.psd
+ *
+ * chance.file({extensions : { key : [...], key : [...]}})
+ * => djsfksdjsd.xml
+ *
+ * @param [collection] options
+ * @return [string]
+ *
+ */
+ Chance.prototype.file = function(options) {
+
+ var fileOptions = options || {};
+ var poolCollectionKey = "fileExtension";
+ var typeRange = Object.keys(this.get("fileExtension"));//['raster', 'vector', '3d', 'document'];
+ var fileName;
+ var fileExtension;
+
+ // Generate random file name
+ fileName = this.word({length : fileOptions.length});
+
+ // Generate file by specific extension provided by the user
+ if(fileOptions.extension) {
+
+ fileExtension = fileOptions.extension;
+ return (fileName + '.' + fileExtension);
+ }
+
+ // Generate file by specific extension collection
+ if(fileOptions.extensions) {
+
+ if(Array.isArray(fileOptions.extensions)) {
+
+ fileExtension = this.pickone(fileOptions.extensions);
+ return (fileName + '.' + fileExtension);
+ }
+ else if(fileOptions.extensions.constructor === Object) {
+
+ var extensionObjectCollection = fileOptions.extensions;
+ var keys = Object.keys(extensionObjectCollection);
+
+ fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);
+ return (fileName + '.' + fileExtension);
+ }
+
+ throw new Error("Chance: Extensions must be an Array or Object");
+ }
+
+ // Generate file extension based on specific file type
+ if(fileOptions.fileType) {
+
+ var fileType = fileOptions.fileType;
+ if(typeRange.indexOf(fileType) !== -1) {
+
+ fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);
+ return (fileName + '.' + fileExtension);
+ }
+
+ throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'");
+ }
+
+ // Generate random file name if no extension options are passed
+ fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);
+ return (fileName + '.' + fileExtension);
+ };
+
+ var data = {
+
+
+
+ firstNames: {
+ "male": {
+ "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"],
+ // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163
+ "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"],
+ // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
+ "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"],
+ // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
+ "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"]
+ },
+
+ "female": {
+ "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"],
+ // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162
+ "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"],
+ // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
+ "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ë"],
+ // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
+ "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é"]
+ }
+ },
+
+ lastNames: {
+ "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'],
+ // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)
+ "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"],
+ // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/
+ "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"],
+ // https://surnames.behindthename.com/top/lists/england-wales/1991
+ "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"],
+ // https://surnames.behindthename.com/top/lists/germany/2017
+ "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"],
+ // http://www.japantimes.co.jp/life/2009/10/11/lifestyle/japans-top-100-most-common-family-names/
+ "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"],
+ // http://www.lowchensaustralia.com/names/popular-spanish-names.htm
+ "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"],
+ // Data taken from https://fr.wikipedia.org/wiki/Liste_des_noms_de_famille_les_plus_courants_en_France
+ "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"]
+ },
+
+ // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json
+ 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"}],
+
+ counties: {
+ // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk
+ "uk": [
+ {name: 'Bath and North East Somerset'},
+ {name: 'Aberdeenshire'},
+ {name: 'Anglesey'},
+ {name: 'Angus'},
+ {name: 'Bedford'},
+ {name: 'Blackburn with Darwen'},
+ {name: 'Blackpool'},
+ {name: 'Bournemouth'},
+ {name: 'Bracknell Forest'},
+ {name: 'Brighton & Hove'},
+ {name: 'Bristol'},
+ {name: 'Buckinghamshire'},
+ {name: 'Cambridgeshire'},
+ {name: 'Carmarthenshire'},
+ {name: 'Central Bedfordshire'},
+ {name: 'Ceredigion'},
+ {name: 'Cheshire East'},
+ {name: 'Cheshire West and Chester'},
+ {name: 'Clackmannanshire'},
+ {name: 'Conwy'},
+ {name: 'Cornwall'},
+ {name: 'County Antrim'},
+ {name: 'County Armagh'},
+ {name: 'County Down'},
+ {name: 'County Durham'},
+ {name: 'County Fermanagh'},
+ {name: 'County Londonderry'},
+ {name: 'County Tyrone'},
+ {name: 'Cumbria'},
+ {name: 'Darlington'},
+ {name: 'Denbighshire'},
+ {name: 'Derby'},
+ {name: 'Derbyshire'},
+ {name: 'Devon'},
+ {name: 'Dorset'},
+ {name: 'Dumfries and Galloway'},
+ {name: 'Dundee'},
+ {name: 'East Lothian'},
+ {name: 'East Riding of Yorkshire'},
+ {name: 'East Sussex'},
+ {name: 'Edinburgh?'},
+ {name: 'Essex'},
+ {name: 'Falkirk'},
+ {name: 'Fife'},
+ {name: 'Flintshire'},
+ {name: 'Gloucestershire'},
+ {name: 'Greater London'},
+ {name: 'Greater Manchester'},
+ {name: 'Gwent'},
+ {name: 'Gwynedd'},
+ {name: 'Halton'},
+ {name: 'Hampshire'},
+ {name: 'Hartlepool'},
+ {name: 'Herefordshire'},
+ {name: 'Hertfordshire'},
+ {name: 'Highlands'},
+ {name: 'Hull'},
+ {name: 'Isle of Wight'},
+ {name: 'Isles of Scilly'},
+ {name: 'Kent'},
+ {name: 'Lancashire'},
+ {name: 'Leicester'},
+ {name: 'Leicestershire'},
+ {name: 'Lincolnshire'},
+ {name: 'Lothian'},
+ {name: 'Luton'},
+ {name: 'Medway'},
+ {name: 'Merseyside'},
+ {name: 'Mid Glamorgan'},
+ {name: 'Middlesbrough'},
+ {name: 'Milton Keynes'},
+ {name: 'Monmouthshire'},
+ {name: 'Moray'},
+ {name: 'Norfolk'},
+ {name: 'North East Lincolnshire'},
+ {name: 'North Lincolnshire'},
+ {name: 'North Somerset'},
+ {name: 'North Yorkshire'},
+ {name: 'Northamptonshire'},
+ {name: 'Northumberland'},
+ {name: 'Nottingham'},
+ {name: 'Nottinghamshire'},
+ {name: 'Oxfordshire'},
+ {name: 'Pembrokeshire'},
+ {name: 'Perth and Kinross'},
+ {name: 'Peterborough'},
+ {name: 'Plymouth'},
+ {name: 'Poole'},
+ {name: 'Portsmouth'},
+ {name: 'Powys'},
+ {name: 'Reading'},
+ {name: 'Redcar and Cleveland'},
+ {name: 'Rutland'},
+ {name: 'Scottish Borders'},
+ {name: 'Shropshire'},
+ {name: 'Slough'},
+ {name: 'Somerset'},
+ {name: 'South Glamorgan'},
+ {name: 'South Gloucestershire'},
+ {name: 'South Yorkshire'},
+ {name: 'Southampton'},
+ {name: 'Southend-on-Sea'},
+ {name: 'Staffordshire'},
+ {name: 'Stirlingshire'},
+ {name: 'Stockton-on-Tees'},
+ {name: 'Stoke-on-Trent'},
+ {name: 'Strathclyde'},
+ {name: 'Suffolk'},
+ {name: 'Surrey'},
+ {name: 'Swindon'},
+ {name: 'Telford and Wrekin'},
+ {name: 'Thurrock'},
+ {name: 'Torbay'},
+ {name: 'Tyne and Wear'},
+ {name: 'Warrington'},
+ {name: 'Warwickshire'},
+ {name: 'West Berkshire'},
+ {name: 'West Glamorgan'},
+ {name: 'West Lothian'},
+ {name: 'West Midlands'},
+ {name: 'West Sussex'},
+ {name: 'West Yorkshire'},
+ {name: 'Western Isles'},
+ {name: 'Wiltshire'},
+ {name: 'Windsor and Maidenhead'},
+ {name: 'Wokingham'},
+ {name: 'Worcestershire'},
+ {name: 'Wrexham'},
+ {name: 'York'}]
+ },
+ provinces: {
+ "ca": [
+ {name: 'Alberta', abbreviation: 'AB'},
+ {name: 'British Columbia', abbreviation: 'BC'},
+ {name: 'Manitoba', abbreviation: 'MB'},
+ {name: 'New Brunswick', abbreviation: 'NB'},
+ {name: 'Newfoundland and Labrador', abbreviation: 'NL'},
+ {name: 'Nova Scotia', abbreviation: 'NS'},
+ {name: 'Ontario', abbreviation: 'ON'},
+ {name: 'Prince Edward Island', abbreviation: 'PE'},
+ {name: 'Quebec', abbreviation: 'QC'},
+ {name: 'Saskatchewan', abbreviation: 'SK'},
+
+ // The case could be made that the following are not actually provinces
+ // since they are technically considered "territories" however they all
+ // look the same on an envelope!
+ {name: 'Northwest Territories', abbreviation: 'NT'},
+ {name: 'Nunavut', abbreviation: 'NU'},
+ {name: 'Yukon', abbreviation: 'YT'}
+ ],
+ "it": [
+ { name: "Agrigento", abbreviation: "AG", code: 84 },
+ { name: "Alessandria", abbreviation: "AL", code: 6 },
+ { name: "Ancona", abbreviation: "AN", code: 42 },
+ { name: "Aosta", abbreviation: "AO", code: 7 },
+ { name: "L'Aquila", abbreviation: "AQ", code: 66 },
+ { name: "Arezzo", abbreviation: "AR", code: 51 },
+ { name: "Ascoli-Piceno", abbreviation: "AP", code: 44 },
+ { name: "Asti", abbreviation: "AT", code: 5 },
+ { name: "Avellino", abbreviation: "AV", code: 64 },
+ { name: "Bari", abbreviation: "BA", code: 72 },
+ { name: "Barletta-Andria-Trani", abbreviation: "BT", code: 72 },
+ { name: "Belluno", abbreviation: "BL", code: 25 },
+ { name: "Benevento", abbreviation: "BN", code: 62 },
+ { name: "Bergamo", abbreviation: "BG", code: 16 },
+ { name: "Biella", abbreviation: "BI", code: 96 },
+ { name: "Bologna", abbreviation: "BO", code: 37 },
+ { name: "Bolzano", abbreviation: "BZ", code: 21 },
+ { name: "Brescia", abbreviation: "BS", code: 17 },
+ { name: "Brindisi", abbreviation: "BR", code: 74 },
+ { name: "Cagliari", abbreviation: "CA", code: 92 },
+ { name: "Caltanissetta", abbreviation: "CL", code: 85 },
+ { name: "Campobasso", abbreviation: "CB", code: 70 },
+ { name: "Carbonia Iglesias", abbreviation: "CI", code: 70 },
+ { name: "Caserta", abbreviation: "CE", code: 61 },
+ { name: "Catania", abbreviation: "CT", code: 87 },
+ { name: "Catanzaro", abbreviation: "CZ", code: 79 },
+ { name: "Chieti", abbreviation: "CH", code: 69 },
+ { name: "Como", abbreviation: "CO", code: 13 },
+ { name: "Cosenza", abbreviation: "CS", code: 78 },
+ { name: "Cremona", abbreviation: "CR", code: 19 },
+ { name: "Crotone", abbreviation: "KR", code: 101 },
+ { name: "Cuneo", abbreviation: "CN", code: 4 },
+ { name: "Enna", abbreviation: "EN", code: 86 },
+ { name: "Fermo", abbreviation: "FM", code: 86 },
+ { name: "Ferrara", abbreviation: "FE", code: 38 },
+ { name: "Firenze", abbreviation: "FI", code: 48 },
+ { name: "Foggia", abbreviation: "FG", code: 71 },
+ { name: "Forli-Cesena", abbreviation: "FC", code: 71 },
+ { name: "Frosinone", abbreviation: "FR", code: 60 },
+ { name: "Genova", abbreviation: "GE", code: 10 },
+ { name: "Gorizia", abbreviation: "GO", code: 31 },
+ { name: "Grosseto", abbreviation: "GR", code: 53 },
+ { name: "Imperia", abbreviation: "IM", code: 8 },
+ { name: "Isernia", abbreviation: "IS", code: 94 },
+ { name: "La-Spezia", abbreviation: "SP", code: 66 },
+ { name: "Latina", abbreviation: "LT", code: 59 },
+ { name: "Lecce", abbreviation: "LE", code: 75 },
+ { name: "Lecco", abbreviation: "LC", code: 97 },
+ { name: "Livorno", abbreviation: "LI", code: 49 },
+ { name: "Lodi", abbreviation: "LO", code: 98 },
+ { name: "Lucca", abbreviation: "LU", code: 46 },
+ { name: "Macerata", abbreviation: "MC", code: 43 },
+ { name: "Mantova", abbreviation: "MN", code: 20 },
+ { name: "Massa-Carrara", abbreviation: "MS", code: 45 },
+ { name: "Matera", abbreviation: "MT", code: 77 },
+ { name: "Medio Campidano", abbreviation: "VS", code: 77 },
+ { name: "Messina", abbreviation: "ME", code: 83 },
+ { name: "Milano", abbreviation: "MI", code: 15 },
+ { name: "Modena", abbreviation: "MO", code: 36 },
+ { name: "Monza-Brianza", abbreviation: "MB", code: 36 },
+ { name: "Napoli", abbreviation: "NA", code: 63 },
+ { name: "Novara", abbreviation: "NO", code: 3 },
+ { name: "Nuoro", abbreviation: "NU", code: 91 },
+ { name: "Ogliastra", abbreviation: "OG", code: 91 },
+ { name: "Olbia Tempio", abbreviation: "OT", code: 91 },
+ { name: "Oristano", abbreviation: "OR", code: 95 },
+ { name: "Padova", abbreviation: "PD", code: 28 },
+ { name: "Palermo", abbreviation: "PA", code: 82 },
+ { name: "Parma", abbreviation: "PR", code: 34 },
+ { name: "Pavia", abbreviation: "PV", code: 18 },
+ { name: "Perugia", abbreviation: "PG", code: 54 },
+ { name: "Pesaro-Urbino", abbreviation: "PU", code: 41 },
+ { name: "Pescara", abbreviation: "PE", code: 68 },
+ { name: "Piacenza", abbreviation: "PC", code: 33 },
+ { name: "Pisa", abbreviation: "PI", code: 50 },
+ { name: "Pistoia", abbreviation: "PT", code: 47 },
+ { name: "Pordenone", abbreviation: "PN", code: 93 },
+ { name: "Potenza", abbreviation: "PZ", code: 76 },
+ { name: "Prato", abbreviation: "PO", code: 100 },
+ { name: "Ragusa", abbreviation: "RG", code: 88 },
+ { name: "Ravenna", abbreviation: "RA", code: 39 },
+ { name: "Reggio-Calabria", abbreviation: "RC", code: 35 },
+ { name: "Reggio-Emilia", abbreviation: "RE", code: 35 },
+ { name: "Rieti", abbreviation: "RI", code: 57 },
+ { name: "Rimini", abbreviation: "RN", code: 99 },
+ { name: "Roma", abbreviation: "Roma", code: 58 },
+ { name: "Rovigo", abbreviation: "RO", code: 29 },
+ { name: "Salerno", abbreviation: "SA", code: 65 },
+ { name: "Sassari", abbreviation: "SS", code: 90 },
+ { name: "Savona", abbreviation: "SV", code: 9 },
+ { name: "Siena", abbreviation: "SI", code: 52 },
+ { name: "Siracusa", abbreviation: "SR", code: 89 },
+ { name: "Sondrio", abbreviation: "SO", code: 14 },
+ { name: "Taranto", abbreviation: "TA", code: 73 },
+ { name: "Teramo", abbreviation: "TE", code: 67 },
+ { name: "Terni", abbreviation: "TR", code: 55 },
+ { name: "Torino", abbreviation: "TO", code: 1 },
+ { name: "Trapani", abbreviation: "TP", code: 81 },
+ { name: "Trento", abbreviation: "TN", code: 22 },
+ { name: "Treviso", abbreviation: "TV", code: 26 },
+ { name: "Trieste", abbreviation: "TS", code: 32 },
+ { name: "Udine", abbreviation: "UD", code: 30 },
+ { name: "Varese", abbreviation: "VA", code: 12 },
+ { name: "Venezia", abbreviation: "VE", code: 27 },
+ { name: "Verbania", abbreviation: "VB", code: 27 },
+ { name: "Vercelli", abbreviation: "VC", code: 2 },
+ { name: "Verona", abbreviation: "VR", code: 23 },
+ { name: "Vibo-Valentia", abbreviation: "VV", code: 102 },
+ { name: "Vicenza", abbreviation: "VI", code: 24 },
+ { name: "Viterbo", abbreviation: "VT", code: 56 }
+ ]
+ },
+
+ // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json
+ nationalities: [
+ {name: 'Afghan'},
+ {name: 'Albanian'},
+ {name: 'Algerian'},
+ {name: 'American'},
+ {name: 'Andorran'},
+ {name: 'Angolan'},
+ {name: 'Antiguans'},
+ {name: 'Argentinean'},
+ {name: 'Armenian'},
+ {name: 'Australian'},
+ {name: 'Austrian'},
+ {name: 'Azerbaijani'},
+ {name: 'Bahami'},
+ {name: 'Bahraini'},
+ {name: 'Bangladeshi'},
+ {name: 'Barbadian'},
+ {name: 'Barbudans'},
+ {name: 'Batswana'},
+ {name: 'Belarusian'},
+ {name: 'Belgian'},
+ {name: 'Belizean'},
+ {name: 'Beninese'},
+ {name: 'Bhutanese'},
+ {name: 'Bolivian'},
+ {name: 'Bosnian'},
+ {name: 'Brazilian'},
+ {name: 'British'},
+ {name: 'Bruneian'},
+ {name: 'Bulgarian'},
+ {name: 'Burkinabe'},
+ {name: 'Burmese'},
+ {name: 'Burundian'},
+ {name: 'Cambodian'},
+ {name: 'Cameroonian'},
+ {name: 'Canadian'},
+ {name: 'Cape Verdean'},
+ {name: 'Central African'},
+ {name: 'Chadian'},
+ {name: 'Chilean'},
+ {name: 'Chinese'},
+ {name: 'Colombian'},
+ {name: 'Comoran'},
+ {name: 'Congolese'},
+ {name: 'Costa Rican'},
+ {name: 'Croatian'},
+ {name: 'Cuban'},
+ {name: 'Cypriot'},
+ {name: 'Czech'},
+ {name: 'Danish'},
+ {name: 'Djibouti'},
+ {name: 'Dominican'},
+ {name: 'Dutch'},
+ {name: 'East Timorese'},
+ {name: 'Ecuadorean'},
+ {name: 'Egyptian'},
+ {name: 'Emirian'},
+ {name: 'Equatorial Guinean'},
+ {name: 'Eritrean'},
+ {name: 'Estonian'},
+ {name: 'Ethiopian'},
+ {name: 'Fijian'},
+ {name: 'Filipino'},
+ {name: 'Finnish'},
+ {name: 'French'},
+ {name: 'Gabonese'},
+ {name: 'Gambian'},
+ {name: 'Georgian'},
+ {name: 'German'},
+ {name: 'Ghanaian'},
+ {name: 'Greek'},
+ {name: 'Grenadian'},
+ {name: 'Guatemalan'},
+ {name: 'Guinea-Bissauan'},
+ {name: 'Guinean'},
+ {name: 'Guyanese'},
+ {name: 'Haitian'},
+ {name: 'Herzegovinian'},
+ {name: 'Honduran'},
+ {name: 'Hungarian'},
+ {name: 'I-Kiribati'},
+ {name: 'Icelander'},
+ {name: 'Indian'},
+ {name: 'Indonesian'},
+ {name: 'Iranian'},
+ {name: 'Iraqi'},
+ {name: 'Irish'},
+ {name: 'Israeli'},
+ {name: 'Italian'},
+ {name: 'Ivorian'},
+ {name: 'Jamaican'},
+ {name: 'Japanese'},
+ {name: 'Jordanian'},
+ {name: 'Kazakhstani'},
+ {name: 'Kenyan'},
+ {name: 'Kittian and Nevisian'},
+ {name: 'Kuwaiti'},
+ {name: 'Kyrgyz'},
+ {name: 'Laotian'},
+ {name: 'Latvian'},
+ {name: 'Lebanese'},
+ {name: 'Liberian'},
+ {name: 'Libyan'},
+ {name: 'Liechtensteiner'},
+ {name: 'Lithuanian'},
+ {name: 'Luxembourger'},
+ {name: 'Macedonian'},
+ {name: 'Malagasy'},
+ {name: 'Malawian'},
+ {name: 'Malaysian'},
+ {name: 'Maldivan'},
+ {name: 'Malian'},
+ {name: 'Maltese'},
+ {name: 'Marshallese'},
+ {name: 'Mauritanian'},
+ {name: 'Mauritian'},
+ {name: 'Mexican'},
+ {name: 'Micronesian'},
+ {name: 'Moldovan'},
+ {name: 'Monacan'},
+ {name: 'Mongolian'},
+ {name: 'Moroccan'},
+ {name: 'Mosotho'},
+ {name: 'Motswana'},
+ {name: 'Mozambican'},
+ {name: 'Namibian'},
+ {name: 'Nauruan'},
+ {name: 'Nepalese'},
+ {name: 'New Zealander'},
+ {name: 'Nicaraguan'},
+ {name: 'Nigerian'},
+ {name: 'Nigerien'},
+ {name: 'North Korean'},
+ {name: 'Northern Irish'},
+ {name: 'Norwegian'},
+ {name: 'Omani'},
+ {name: 'Pakistani'},
+ {name: 'Palauan'},
+ {name: 'Panamanian'},
+ {name: 'Papua New Guinean'},
+ {name: 'Paraguayan'},
+ {name: 'Peruvian'},
+ {name: 'Polish'},
+ {name: 'Portuguese'},
+ {name: 'Qatari'},
+ {name: 'Romani'},
+ {name: 'Russian'},
+ {name: 'Rwandan'},
+ {name: 'Saint Lucian'},
+ {name: 'Salvadoran'},
+ {name: 'Samoan'},
+ {name: 'San Marinese'},
+ {name: 'Sao Tomean'},
+ {name: 'Saudi'},
+ {name: 'Scottish'},
+ {name: 'Senegalese'},
+ {name: 'Serbian'},
+ {name: 'Seychellois'},
+ {name: 'Sierra Leonean'},
+ {name: 'Singaporean'},
+ {name: 'Slovakian'},
+ {name: 'Slovenian'},
+ {name: 'Solomon Islander'},
+ {name: 'Somali'},
+ {name: 'South African'},
+ {name: 'South Korean'},
+ {name: 'Spanish'},
+ {name: 'Sri Lankan'},
+ {name: 'Sudanese'},
+ {name: 'Surinamer'},
+ {name: 'Swazi'},
+ {name: 'Swedish'},
+ {name: 'Swiss'},
+ {name: 'Syrian'},
+ {name: 'Taiwanese'},
+ {name: 'Tajik'},
+ {name: 'Tanzanian'},
+ {name: 'Thai'},
+ {name: 'Togolese'},
+ {name: 'Tongan'},
+ {name: 'Trinidadian or Tobagonian'},
+ {name: 'Tunisian'},
+ {name: 'Turkish'},
+ {name: 'Tuvaluan'},
+ {name: 'Ugandan'},
+ {name: 'Ukrainian'},
+ {name: 'Uruguaya'},
+ {name: 'Uzbekistani'},
+ {name: 'Venezuela'},
+ {name: 'Vietnamese'},
+ {name: 'Wels'},
+ {name: 'Yemenit'},
+ {name: 'Zambia'},
+ {name: 'Zimbabwe'},
+ ],
+ // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)
+ locale_languages: [
+ "aa",
+ "ab",
+ "ae",
+ "af",
+ "ak",
+ "am",
+ "an",
+ "ar",
+ "as",
+ "av",
+ "ay",
+ "az",
+ "ba",
+ "be",
+ "bg",
+ "bh",
+ "bi",
+ "bm",
+ "bn",
+ "bo",
+ "br",
+ "bs",
+ "ca",
+ "ce",
+ "ch",
+ "co",
+ "cr",
+ "cs",
+ "cu",
+ "cv",
+ "cy",
+ "da",
+ "de",
+ "dv",
+ "dz",
+ "ee",
+ "el",
+ "en",
+ "eo",
+ "es",
+ "et",
+ "eu",
+ "fa",
+ "ff",
+ "fi",
+ "fj",
+ "fo",
+ "fr",
+ "fy",
+ "ga",
+ "gd",
+ "gl",
+ "gn",
+ "gu",
+ "gv",
+ "ha",
+ "he",
+ "hi",
+ "ho",
+ "hr",
+ "ht",
+ "hu",
+ "hy",
+ "hz",
+ "ia",
+ "id",
+ "ie",
+ "ig",
+ "ii",
+ "ik",
+ "io",
+ "is",
+ "it",
+ "iu",
+ "ja",
+ "jv",
+ "ka",
+ "kg",
+ "ki",
+ "kj",
+ "kk",
+ "kl",
+ "km",
+ "kn",
+ "ko",
+ "kr",
+ "ks",
+ "ku",
+ "kv",
+ "kw",
+ "ky",
+ "la",
+ "lb",
+ "lg",
+ "li",
+ "ln",
+ "lo",
+ "lt",
+ "lu",
+ "lv",
+ "mg",
+ "mh",
+ "mi",
+ "mk",
+ "ml",
+ "mn",
+ "mr",
+ "ms",
+ "mt",
+ "my",
+ "na",
+ "nb",
+ "nd",
+ "ne",
+ "ng",
+ "nl",
+ "nn",
+ "no",
+ "nr",
+ "nv",
+ "ny",
+ "oc",
+ "oj",
+ "om",
+ "or",
+ "os",
+ "pa",
+ "pi",
+ "pl",
+ "ps",
+ "pt",
+ "qu",
+ "rm",
+ "rn",
+ "ro",
+ "ru",
+ "rw",
+ "sa",
+ "sc",
+ "sd",
+ "se",
+ "sg",
+ "si",
+ "sk",
+ "sl",
+ "sm",
+ "sn",
+ "so",
+ "sq",
+ "sr",
+ "ss",
+ "st",
+ "su",
+ "sv",
+ "sw",
+ "ta",
+ "te",
+ "tg",
+ "th",
+ "ti",
+ "tk",
+ "tl",
+ "tn",
+ "to",
+ "tr",
+ "ts",
+ "tt",
+ "tw",
+ "ty",
+ "ug",
+ "uk",
+ "ur",
+ "uz",
+ "ve",
+ "vi",
+ "vo",
+ "wa",
+ "wo",
+ "xh",
+ "yi",
+ "yo",
+ "za",
+ "zh",
+ "zu"
+ ],
+
+ // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)
+ locale_regions: [
+ "agq-CM",
+ "asa-TZ",
+ "ast-ES",
+ "bas-CM",
+ "bem-ZM",
+ "bez-TZ",
+ "brx-IN",
+ "cgg-UG",
+ "chr-US",
+ "dav-KE",
+ "dje-NE",
+ "dsb-DE",
+ "dua-CM",
+ "dyo-SN",
+ "ebu-KE",
+ "ewo-CM",
+ "fil-PH",
+ "fur-IT",
+ "gsw-CH",
+ "gsw-FR",
+ "gsw-LI",
+ "guz-KE",
+ "haw-US",
+ "hsb-DE",
+ "jgo-CM",
+ "jmc-TZ",
+ "kab-DZ",
+ "kam-KE",
+ "kde-TZ",
+ "kea-CV",
+ "khq-ML",
+ "kkj-CM",
+ "kln-KE",
+ "kok-IN",
+ "ksb-TZ",
+ "ksf-CM",
+ "ksh-DE",
+ "lag-TZ",
+ "lkt-US",
+ "luo-KE",
+ "luy-KE",
+ "mas-KE",
+ "mas-TZ",
+ "mer-KE",
+ "mfe-MU",
+ "mgh-MZ",
+ "mgo-CM",
+ "mua-CM",
+ "naq-NA",
+ "nmg-CM",
+ "nnh-CM",
+ "nus-SD",
+ "nyn-UG",
+ "rof-TZ",
+ "rwk-TZ",
+ "sah-RU",
+ "saq-KE",
+ "sbp-TZ",
+ "seh-MZ",
+ "ses-ML",
+ "shi-Latn",
+ "shi-Latn-MA",
+ "shi-Tfng",
+ "shi-Tfng-MA",
+ "smn-FI",
+ "teo-KE",
+ "teo-UG",
+ "twq-NE",
+ "tzm-Latn",
+ "tzm-Latn-MA",
+ "vai-Latn",
+ "vai-Latn-LR",
+ "vai-Vaii",
+ "vai-Vaii-LR",
+ "vun-TZ",
+ "wae-CH",
+ "xog-UG",
+ "yav-CM",
+ "zgh-MA",
+ "af-NA",
+ "af-ZA",
+ "ak-GH",
+ "am-ET",
+ "ar-001",
+ "ar-AE",
+ "ar-BH",
+ "ar-DJ",
+ "ar-DZ",
+ "ar-EG",
+ "ar-EH",
+ "ar-ER",
+ "ar-IL",
+ "ar-IQ",
+ "ar-JO",
+ "ar-KM",
+ "ar-KW",
+ "ar-LB",
+ "ar-LY",
+ "ar-MA",
+ "ar-MR",
+ "ar-OM",
+ "ar-PS",
+ "ar-QA",
+ "ar-SA",
+ "ar-SD",
+ "ar-SO",
+ "ar-SS",
+ "ar-SY",
+ "ar-TD",
+ "ar-TN",
+ "ar-YE",
+ "as-IN",
+ "az-Cyrl",
+ "az-Cyrl-AZ",
+ "az-Latn",
+ "az-Latn-AZ",
+ "be-BY",
+ "bg-BG",
+ "bm-Latn",
+ "bm-Latn-ML",
+ "bn-BD",
+ "bn-IN",
+ "bo-CN",
+ "bo-IN",
+ "br-FR",
+ "bs-Cyrl",
+ "bs-Cyrl-BA",
+ "bs-Latn",
+ "bs-Latn-BA",
+ "ca-AD",
+ "ca-ES",
+ "ca-ES-VALENCIA",
+ "ca-FR",
+ "ca-IT",
+ "cs-CZ",
+ "cy-GB",
+ "da-DK",
+ "da-GL",
+ "de-AT",
+ "de-BE",
+ "de-CH",
+ "de-DE",
+ "de-LI",
+ "de-LU",
+ "dz-BT",
+ "ee-GH",
+ "ee-TG",
+ "el-CY",
+ "el-GR",
+ "en-001",
+ "en-150",
+ "en-AG",
+ "en-AI",
+ "en-AS",
+ "en-AU",
+ "en-BB",
+ "en-BE",
+ "en-BM",
+ "en-BS",
+ "en-BW",
+ "en-BZ",
+ "en-CA",
+ "en-CC",
+ "en-CK",
+ "en-CM",
+ "en-CX",
+ "en-DG",
+ "en-DM",
+ "en-ER",
+ "en-FJ",
+ "en-FK",
+ "en-FM",
+ "en-GB",
+ "en-GD",
+ "en-GG",
+ "en-GH",
+ "en-GI",
+ "en-GM",
+ "en-GU",
+ "en-GY",
+ "en-HK",
+ "en-IE",
+ "en-IM",
+ "en-IN",
+ "en-IO",
+ "en-JE",
+ "en-JM",
+ "en-KE",
+ "en-KI",
+ "en-KN",
+ "en-KY",
+ "en-LC",
+ "en-LR",
+ "en-LS",
+ "en-MG",
+ "en-MH",
+ "en-MO",
+ "en-MP",
+ "en-MS",
+ "en-MT",
+ "en-MU",
+ "en-MW",
+ "en-MY",
+ "en-NA",
+ "en-NF",
+ "en-NG",
+ "en-NR",
+ "en-NU",
+ "en-NZ",
+ "en-PG",
+ "en-PH",
+ "en-PK",
+ "en-PN",
+ "en-PR",
+ "en-PW",
+ "en-RW",
+ "en-SB",
+ "en-SC",
+ "en-SD",
+ "en-SG",
+ "en-SH",
+ "en-SL",
+ "en-SS",
+ "en-SX",
+ "en-SZ",
+ "en-TC",
+ "en-TK",
+ "en-TO",
+ "en-TT",
+ "en-TV",
+ "en-TZ",
+ "en-UG",
+ "en-UM",
+ "en-US",
+ "en-US-POSIX",
+ "en-VC",
+ "en-VG",
+ "en-VI",
+ "en-VU",
+ "en-WS",
+ "en-ZA",
+ "en-ZM",
+ "en-ZW",
+ "eo-001",
+ "es-419",
+ "es-AR",
+ "es-BO",
+ "es-CL",
+ "es-CO",
+ "es-CR",
+ "es-CU",
+ "es-DO",
+ "es-EA",
+ "es-EC",
+ "es-ES",
+ "es-GQ",
+ "es-GT",
+ "es-HN",
+ "es-IC",
+ "es-MX",
+ "es-NI",
+ "es-PA",
+ "es-PE",
+ "es-PH",
+ "es-PR",
+ "es-PY",
+ "es-SV",
+ "es-US",
+ "es-UY",
+ "es-VE",
+ "et-EE",
+ "eu-ES",
+ "fa-AF",
+ "fa-IR",
+ "ff-CM",
+ "ff-GN",
+ "ff-MR",
+ "ff-SN",
+ "fi-FI",
+ "fo-FO",
+ "fr-BE",
+ "fr-BF",
+ "fr-BI",
+ "fr-BJ",
+ "fr-BL",
+ "fr-CA",
+ "fr-CD",
+ "fr-CF",
+ "fr-CG",
+ "fr-CH",
+ "fr-CI",
+ "fr-CM",
+ "fr-DJ",
+ "fr-DZ",
+ "fr-FR",
+ "fr-GA",
+ "fr-GF",
+ "fr-GN",
+ "fr-GP",
+ "fr-GQ",
+ "fr-HT",
+ "fr-KM",
+ "fr-LU",
+ "fr-MA",
+ "fr-MC",
+ "fr-MF",
+ "fr-MG",
+ "fr-ML",
+ "fr-MQ",
+ "fr-MR",
+ "fr-MU",
+ "fr-NC",
+ "fr-NE",
+ "fr-PF",
+ "fr-PM",
+ "fr-RE",
+ "fr-RW",
+ "fr-SC",
+ "fr-SN",
+ "fr-SY",
+ "fr-TD",
+ "fr-TG",
+ "fr-TN",
+ "fr-VU",
+ "fr-WF",
+ "fr-YT",
+ "fy-NL",
+ "ga-IE",
+ "gd-GB",
+ "gl-ES",
+ "gu-IN",
+ "gv-IM",
+ "ha-Latn",
+ "ha-Latn-GH",
+ "ha-Latn-NE",
+ "ha-Latn-NG",
+ "he-IL",
+ "hi-IN",
+ "hr-BA",
+ "hr-HR",
+ "hu-HU",
+ "hy-AM",
+ "id-ID",
+ "ig-NG",
+ "ii-CN",
+ "is-IS",
+ "it-CH",
+ "it-IT",
+ "it-SM",
+ "ja-JP",
+ "ka-GE",
+ "ki-KE",
+ "kk-Cyrl",
+ "kk-Cyrl-KZ",
+ "kl-GL",
+ "km-KH",
+ "kn-IN",
+ "ko-KP",
+ "ko-KR",
+ "ks-Arab",
+ "ks-Arab-IN",
+ "kw-GB",
+ "ky-Cyrl",
+ "ky-Cyrl-KG",
+ "lb-LU",
+ "lg-UG",
+ "ln-AO",
+ "ln-CD",
+ "ln-CF",
+ "ln-CG",
+ "lo-LA",
+ "lt-LT",
+ "lu-CD",
+ "lv-LV",
+ "mg-MG",
+ "mk-MK",
+ "ml-IN",
+ "mn-Cyrl",
+ "mn-Cyrl-MN",
+ "mr-IN",
+ "ms-Latn",
+ "ms-Latn-BN",
+ "ms-Latn-MY",
+ "ms-Latn-SG",
+ "mt-MT",
+ "my-MM",
+ "nb-NO",
+ "nb-SJ",
+ "nd-ZW",
+ "ne-IN",
+ "ne-NP",
+ "nl-AW",
+ "nl-BE",
+ "nl-BQ",
+ "nl-CW",
+ "nl-NL",
+ "nl-SR",
+ "nl-SX",
+ "nn-NO",
+ "om-ET",
+ "om-KE",
+ "or-IN",
+ "os-GE",
+ "os-RU",
+ "pa-Arab",
+ "pa-Arab-PK",
+ "pa-Guru",
+ "pa-Guru-IN",
+ "pl-PL",
+ "ps-AF",
+ "pt-AO",
+ "pt-BR",
+ "pt-CV",
+ "pt-GW",
+ "pt-MO",
+ "pt-MZ",
+ "pt-PT",
+ "pt-ST",
+ "pt-TL",
+ "qu-BO",
+ "qu-EC",
+ "qu-PE",
+ "rm-CH",
+ "rn-BI",
+ "ro-MD",
+ "ro-RO",
+ "ru-BY",
+ "ru-KG",
+ "ru-KZ",
+ "ru-MD",
+ "ru-RU",
+ "ru-UA",
+ "rw-RW",
+ "se-FI",
+ "se-NO",
+ "se-SE",
+ "sg-CF",
+ "si-LK",
+ "sk-SK",
+ "sl-SI",
+ "sn-ZW",
+ "so-DJ",
+ "so-ET",
+ "so-KE",
+ "so-SO",
+ "sq-AL",
+ "sq-MK",
+ "sq-XK",
+ "sr-Cyrl",
+ "sr-Cyrl-BA",
+ "sr-Cyrl-ME",
+ "sr-Cyrl-RS",
+ "sr-Cyrl-XK",
+ "sr-Latn",
+ "sr-Latn-BA",
+ "sr-Latn-ME",
+ "sr-Latn-RS",
+ "sr-Latn-XK",
+ "sv-AX",
+ "sv-FI",
+ "sv-SE",
+ "sw-CD",
+ "sw-KE",
+ "sw-TZ",
+ "sw-UG",
+ "ta-IN",
+ "ta-LK",
+ "ta-MY",
+ "ta-SG",
+ "te-IN",
+ "th-TH",
+ "ti-ER",
+ "ti-ET",
+ "to-TO",
+ "tr-CY",
+ "tr-TR",
+ "ug-Arab",
+ "ug-Arab-CN",
+ "uk-UA",
+ "ur-IN",
+ "ur-PK",
+ "uz-Arab",
+ "uz-Arab-AF",
+ "uz-Cyrl",
+ "uz-Cyrl-UZ",
+ "uz-Latn",
+ "uz-Latn-UZ",
+ "vi-VN",
+ "yi-001",
+ "yo-BJ",
+ "yo-NG",
+ "zh-Hans",
+ "zh-Hans-CN",
+ "zh-Hans-HK",
+ "zh-Hans-MO",
+ "zh-Hans-SG",
+ "zh-Hant",
+ "zh-Hant-HK",
+ "zh-Hant-MO",
+ "zh-Hant-TW",
+ "zu-ZA"
+ ],
+
+ us_states_and_dc: [
+ {name: 'Alabama', abbreviation: 'AL'},
+ {name: 'Alaska', abbreviation: 'AK'},
+ {name: 'Arizona', abbreviation: 'AZ'},
+ {name: 'Arkansas', abbreviation: 'AR'},
+ {name: 'California', abbreviation: 'CA'},
+ {name: 'Colorado', abbreviation: 'CO'},
+ {name: 'Connecticut', abbreviation: 'CT'},
+ {name: 'Delaware', abbreviation: 'DE'},
+ {name: 'District of Columbia', abbreviation: 'DC'},
+ {name: 'Florida', abbreviation: 'FL'},
+ {name: 'Georgia', abbreviation: 'GA'},
+ {name: 'Hawaii', abbreviation: 'HI'},
+ {name: 'Idaho', abbreviation: 'ID'},
+ {name: 'Illinois', abbreviation: 'IL'},
+ {name: 'Indiana', abbreviation: 'IN'},
+ {name: 'Iowa', abbreviation: 'IA'},
+ {name: 'Kansas', abbreviation: 'KS'},
+ {name: 'Kentucky', abbreviation: 'KY'},
+ {name: 'Louisiana', abbreviation: 'LA'},
+ {name: 'Maine', abbreviation: 'ME'},
+ {name: 'Maryland', abbreviation: 'MD'},
+ {name: 'Massachusetts', abbreviation: 'MA'},
+ {name: 'Michigan', abbreviation: 'MI'},
+ {name: 'Minnesota', abbreviation: 'MN'},
+ {name: 'Mississippi', abbreviation: 'MS'},
+ {name: 'Missouri', abbreviation: 'MO'},
+ {name: 'Montana', abbreviation: 'MT'},
+ {name: 'Nebraska', abbreviation: 'NE'},
+ {name: 'Nevada', abbreviation: 'NV'},
+ {name: 'New Hampshire', abbreviation: 'NH'},
+ {name: 'New Jersey', abbreviation: 'NJ'},
+ {name: 'New Mexico', abbreviation: 'NM'},
+ {name: 'New York', abbreviation: 'NY'},
+ {name: 'North Carolina', abbreviation: 'NC'},
+ {name: 'North Dakota', abbreviation: 'ND'},
+ {name: 'Ohio', abbreviation: 'OH'},
+ {name: 'Oklahoma', abbreviation: 'OK'},
+ {name: 'Oregon', abbreviation: 'OR'},
+ {name: 'Pennsylvania', abbreviation: 'PA'},
+ {name: 'Rhode Island', abbreviation: 'RI'},
+ {name: 'South Carolina', abbreviation: 'SC'},
+ {name: 'South Dakota', abbreviation: 'SD'},
+ {name: 'Tennessee', abbreviation: 'TN'},
+ {name: 'Texas', abbreviation: 'TX'},
+ {name: 'Utah', abbreviation: 'UT'},
+ {name: 'Vermont', abbreviation: 'VT'},
+ {name: 'Virginia', abbreviation: 'VA'},
+ {name: 'Washington', abbreviation: 'WA'},
+ {name: 'West Virginia', abbreviation: 'WV'},
+ {name: 'Wisconsin', abbreviation: 'WI'},
+ {name: 'Wyoming', abbreviation: 'WY'}
+ ],
+
+ territories: [
+ {name: 'American Samoa', abbreviation: 'AS'},
+ {name: 'Federated States of Micronesia', abbreviation: 'FM'},
+ {name: 'Guam', abbreviation: 'GU'},
+ {name: 'Marshall Islands', abbreviation: 'MH'},
+ {name: 'Northern Mariana Islands', abbreviation: 'MP'},
+ {name: 'Puerto Rico', abbreviation: 'PR'},
+ {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}
+ ],
+
+ armed_forces: [
+ {name: 'Armed Forces Europe', abbreviation: 'AE'},
+ {name: 'Armed Forces Pacific', abbreviation: 'AP'},
+ {name: 'Armed Forces the Americas', abbreviation: 'AA'}
+ ],
+
+ country_regions: {
+ it: [
+ { name: "Valle d'Aosta", abbreviation: "VDA" },
+ { name: "Piemonte", abbreviation: "PIE" },
+ { name: "Lombardia", abbreviation: "LOM" },
+ { name: "Veneto", abbreviation: "VEN" },
+ { name: "Trentino Alto Adige", abbreviation: "TAA" },
+ { name: "Friuli Venezia Giulia", abbreviation: "FVG" },
+ { name: "Liguria", abbreviation: "LIG" },
+ { name: "Emilia Romagna", abbreviation: "EMR" },
+ { name: "Toscana", abbreviation: "TOS" },
+ { name: "Umbria", abbreviation: "UMB" },
+ { name: "Marche", abbreviation: "MAR" },
+ { name: "Abruzzo", abbreviation: "ABR" },
+ { name: "Lazio", abbreviation: "LAZ" },
+ { name: "Campania", abbreviation: "CAM" },
+ { name: "Puglia", abbreviation: "PUG" },
+ { name: "Basilicata", abbreviation: "BAS" },
+ { name: "Molise", abbreviation: "MOL" },
+ { name: "Calabria", abbreviation: "CAL" },
+ { name: "Sicilia", abbreviation: "SIC" },
+ { name: "Sardegna", abbreviation: "SAR" }
+ ]
+ },
+
+ street_suffixes: {
+ 'us': [
+ {name: 'Avenue', abbreviation: 'Ave'},
+ {name: 'Boulevard', abbreviation: 'Blvd'},
+ {name: 'Center', abbreviation: 'Ctr'},
+ {name: 'Circle', abbreviation: 'Cir'},
+ {name: 'Court', abbreviation: 'Ct'},
+ {name: 'Drive', abbreviation: 'Dr'},
+ {name: 'Extension', abbreviation: 'Ext'},
+ {name: 'Glen', abbreviation: 'Gln'},
+ {name: 'Grove', abbreviation: 'Grv'},
+ {name: 'Heights', abbreviation: 'Hts'},
+ {name: 'Highway', abbreviation: 'Hwy'},
+ {name: 'Junction', abbreviation: 'Jct'},
+ {name: 'Key', abbreviation: 'Key'},
+ {name: 'Lane', abbreviation: 'Ln'},
+ {name: 'Loop', abbreviation: 'Loop'},
+ {name: 'Manor', abbreviation: 'Mnr'},
+ {name: 'Mill', abbreviation: 'Mill'},
+ {name: 'Park', abbreviation: 'Park'},
+ {name: 'Parkway', abbreviation: 'Pkwy'},
+ {name: 'Pass', abbreviation: 'Pass'},
+ {name: 'Path', abbreviation: 'Path'},
+ {name: 'Pike', abbreviation: 'Pike'},
+ {name: 'Place', abbreviation: 'Pl'},
+ {name: 'Plaza', abbreviation: 'Plz'},
+ {name: 'Point', abbreviation: 'Pt'},
+ {name: 'Ridge', abbreviation: 'Rdg'},
+ {name: 'River', abbreviation: 'Riv'},
+ {name: 'Road', abbreviation: 'Rd'},
+ {name: 'Square', abbreviation: 'Sq'},
+ {name: 'Street', abbreviation: 'St'},
+ {name: 'Terrace', abbreviation: 'Ter'},
+ {name: 'Trail', abbreviation: 'Trl'},
+ {name: 'Turnpike', abbreviation: 'Tpke'},
+ {name: 'View', abbreviation: 'Vw'},
+ {name: 'Way', abbreviation: 'Way'}
+ ],
+ 'it': [
+ { name: 'Accesso', abbreviation: 'Acc.' },
+ { name: 'Alzaia', abbreviation: 'Alz.' },
+ { name: 'Arco', abbreviation: 'Arco' },
+ { name: 'Archivolto', abbreviation: 'Acv.' },
+ { name: 'Arena', abbreviation: 'Arena' },
+ { name: 'Argine', abbreviation: 'Argine' },
+ { name: 'Bacino', abbreviation: 'Bacino' },
+ { name: 'Banchi', abbreviation: 'Banchi' },
+ { name: 'Banchina', abbreviation: 'Ban.' },
+ { name: 'Bastioni', abbreviation: 'Bas.' },
+ { name: 'Belvedere', abbreviation: 'Belv.' },
+ { name: 'Borgata', abbreviation: 'B.ta' },
+ { name: 'Borgo', abbreviation: 'B.go' },
+ { name: 'Calata', abbreviation: 'Cal.' },
+ { name: 'Calle', abbreviation: 'Calle' },
+ { name: 'Campiello', abbreviation: 'Cam.' },
+ { name: 'Campo', abbreviation: 'Cam.' },
+ { name: 'Canale', abbreviation: 'Can.' },
+ { name: 'Carraia', abbreviation: 'Carr.' },
+ { name: 'Cascina', abbreviation: 'Cascina' },
+ { name: 'Case sparse', abbreviation: 'c.s.' },
+ { name: 'Cavalcavia', abbreviation: 'Cv.' },
+ { name: 'Circonvallazione', abbreviation: 'Cv.' },
+ { name: 'Complanare', abbreviation: 'C.re' },
+ { name: 'Contrada', abbreviation: 'C.da' },
+ { name: 'Corso', abbreviation: 'C.so' },
+ { name: 'Corte', abbreviation: 'C.te' },
+ { name: 'Cortile', abbreviation: 'C.le' },
+ { name: 'Diramazione', abbreviation: 'Dir.' },
+ { name: 'Fondaco', abbreviation: 'F.co' },
+ { name: 'Fondamenta', abbreviation: 'F.ta' },
+ { name: 'Fondo', abbreviation: 'F.do' },
+ { name: 'Frazione', abbreviation: 'Fr.' },
+ { name: 'Isola', abbreviation: 'Is.' },
+ { name: 'Largo', abbreviation: 'L.go' },
+ { name: 'Litoranea', abbreviation: 'Lit.' },
+ { name: 'Lungolago', abbreviation: 'L.go lago' },
+ { name: 'Lungo Po', abbreviation: 'l.go Po' },
+ { name: 'Molo', abbreviation: 'Molo' },
+ { name: 'Mura', abbreviation: 'Mura' },
+ { name: 'Passaggio privato', abbreviation: 'pass. priv.' },
+ { name: 'Passeggiata', abbreviation: 'Pass.' },
+ { name: 'Piazza', abbreviation: 'P.zza' },
+ { name: 'Piazzale', abbreviation: 'P.le' },
+ { name: 'Ponte', abbreviation: 'P.te' },
+ { name: 'Portico', abbreviation: 'P.co' },
+ { name: 'Rampa', abbreviation: 'Rampa' },
+ { name: 'Regione', abbreviation: 'Reg.' },
+ { name: 'Rione', abbreviation: 'R.ne' },
+ { name: 'Rio', abbreviation: 'Rio' },
+ { name: 'Ripa', abbreviation: 'Ripa' },
+ { name: 'Riva', abbreviation: 'Riva' },
+ { name: 'Rondò', abbreviation: 'Rondò' },
+ { name: 'Rotonda', abbreviation: 'Rot.' },
+ { name: 'Sagrato', abbreviation: 'Sagr.' },
+ { name: 'Salita', abbreviation: 'Sal.' },
+ { name: 'Scalinata', abbreviation: 'Scal.' },
+ { name: 'Scalone', abbreviation: 'Scal.' },
+ { name: 'Slargo', abbreviation: 'Sl.' },
+ { name: 'Sottoportico', abbreviation: 'Sott.' },
+ { name: 'Strada', abbreviation: 'Str.' },
+ { name: 'Stradale', abbreviation: 'Str.le' },
+ { name: 'Strettoia', abbreviation: 'Strett.' },
+ { name: 'Traversa', abbreviation: 'Trav.' },
+ { name: 'Via', abbreviation: 'V.' },
+ { name: 'Viale', abbreviation: 'V.le' },
+ { name: 'Vicinale', abbreviation: 'Vic.le' },
+ { name: 'Vicolo', abbreviation: 'Vic.' }
+ ],
+ 'uk' : [
+ {name: 'Avenue', abbreviation: 'Ave'},
+ {name: 'Close', abbreviation: 'Cl'},
+ {name: 'Court', abbreviation: 'Ct'},
+ {name: 'Crescent', abbreviation: 'Cr'},
+ {name: 'Drive', abbreviation: 'Dr'},
+ {name: 'Garden', abbreviation: 'Gdn'},
+ {name: 'Gardens', abbreviation: 'Gdns'},
+ {name: 'Green', abbreviation: 'Gn'},
+ {name: 'Grove', abbreviation: 'Gr'},
+ {name: 'Lane', abbreviation: 'Ln'},
+ {name: 'Mount', abbreviation: 'Mt'},
+ {name: 'Place', abbreviation: 'Pl'},
+ {name: 'Park', abbreviation: 'Pk'},
+ {name: 'Ridge', abbreviation: 'Rdg'},
+ {name: 'Road', abbreviation: 'Rd'},
+ {name: 'Square', abbreviation: 'Sq'},
+ {name: 'Street', abbreviation: 'St'},
+ {name: 'Terrace', abbreviation: 'Ter'},
+ {name: 'Valley', abbreviation: 'Val'}
+ ]
+ },
+
+ months: [
+ {name: 'January', short_name: 'Jan', numeric: '01', days: 31},
+ // Not messing with leap years...
+ {name: 'February', short_name: 'Feb', numeric: '02', days: 28},
+ {name: 'March', short_name: 'Mar', numeric: '03', days: 31},
+ {name: 'April', short_name: 'Apr', numeric: '04', days: 30},
+ {name: 'May', short_name: 'May', numeric: '05', days: 31},
+ {name: 'June', short_name: 'Jun', numeric: '06', days: 30},
+ {name: 'July', short_name: 'Jul', numeric: '07', days: 31},
+ {name: 'August', short_name: 'Aug', numeric: '08', days: 31},
+ {name: 'September', short_name: 'Sep', numeric: '09', days: 30},
+ {name: 'October', short_name: 'Oct', numeric: '10', days: 31},
+ {name: 'November', short_name: 'Nov', numeric: '11', days: 30},
+ {name: 'December', short_name: 'Dec', numeric: '12', days: 31}
+ ],
+
+ // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
+ cc_types: [
+ {name: "American Express", short_name: 'amex', prefix: '34', length: 15},
+ {name: "Bankcard", short_name: 'bankcard', prefix: '5610', length: 16},
+ {name: "China UnionPay", short_name: 'chinaunion', prefix: '62', length: 16},
+ {name: "Diners Club Carte Blanche", short_name: 'dccarte', prefix: '300', length: 14},
+ {name: "Diners Club enRoute", short_name: 'dcenroute', prefix: '2014', length: 15},
+ {name: "Diners Club International", short_name: 'dcintl', prefix: '36', length: 14},
+ {name: "Diners Club United States & Canada", short_name: 'dcusc', prefix: '54', length: 16},
+ {name: "Discover Card", short_name: 'discover', prefix: '6011', length: 16},
+ {name: "InstaPayment", short_name: 'instapay', prefix: '637', length: 16},
+ {name: "JCB", short_name: 'jcb', prefix: '3528', length: 16},
+ {name: "Laser", short_name: 'laser', prefix: '6304', length: 16},
+ {name: "Maestro", short_name: 'maestro', prefix: '5018', length: 16},
+ {name: "Mastercard", short_name: 'mc', prefix: '51', length: 16},
+ {name: "Solo", short_name: 'solo', prefix: '6334', length: 16},
+ {name: "Switch", short_name: 'switch', prefix: '4903', length: 16},
+ {name: "Visa", short_name: 'visa', prefix: '4', length: 16},
+ {name: "Visa Electron", short_name: 'electron', prefix: '4026', length: 16}
+ ],
+
+ //return all world currency by ISO 4217
+ currency_types: [
+ {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},
+ {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},
+ {'code' : 'ALL', 'name' : 'Albania Lek'},
+ {'code' : 'AMD', 'name' : 'Armenia Dram'},
+ {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},
+ {'code' : 'AOA', 'name' : 'Angola Kwanza'},
+ {'code' : 'ARS', 'name' : 'Argentina Peso'},
+ {'code' : 'AUD', 'name' : 'Australia Dollar'},
+ {'code' : 'AWG', 'name' : 'Aruba Guilder'},
+ {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},
+ {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},
+ {'code' : 'BBD', 'name' : 'Barbados Dollar'},
+ {'code' : 'BDT', 'name' : 'Bangladesh Taka'},
+ {'code' : 'BGN', 'name' : 'Bulgaria Lev'},
+ {'code' : 'BHD', 'name' : 'Bahrain Dinar'},
+ {'code' : 'BIF', 'name' : 'Burundi Franc'},
+ {'code' : 'BMD', 'name' : 'Bermuda Dollar'},
+ {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},
+ {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},
+ {'code' : 'BRL', 'name' : 'Brazil Real'},
+ {'code' : 'BSD', 'name' : 'Bahamas Dollar'},
+ {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},
+ {'code' : 'BWP', 'name' : 'Botswana Pula'},
+ {'code' : 'BYR', 'name' : 'Belarus Ruble'},
+ {'code' : 'BZD', 'name' : 'Belize Dollar'},
+ {'code' : 'CAD', 'name' : 'Canada Dollar'},
+ {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},
+ {'code' : 'CHF', 'name' : 'Switzerland Franc'},
+ {'code' : 'CLP', 'name' : 'Chile Peso'},
+ {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},
+ {'code' : 'COP', 'name' : 'Colombia Peso'},
+ {'code' : 'CRC', 'name' : 'Costa Rica Colon'},
+ {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},
+ {'code' : 'CUP', 'name' : 'Cuba Peso'},
+ {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},
+ {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},
+ {'code' : 'DJF', 'name' : 'Djibouti Franc'},
+ {'code' : 'DKK', 'name' : 'Denmark Krone'},
+ {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},
+ {'code' : 'DZD', 'name' : 'Algeria Dinar'},
+ {'code' : 'EGP', 'name' : 'Egypt Pound'},
+ {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},
+ {'code' : 'ETB', 'name' : 'Ethiopia Birr'},
+ {'code' : 'EUR', 'name' : 'Euro Member Countries'},
+ {'code' : 'FJD', 'name' : 'Fiji Dollar'},
+ {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},
+ {'code' : 'GBP', 'name' : 'United Kingdom Pound'},
+ {'code' : 'GEL', 'name' : 'Georgia Lari'},
+ {'code' : 'GGP', 'name' : 'Guernsey Pound'},
+ {'code' : 'GHS', 'name' : 'Ghana Cedi'},
+ {'code' : 'GIP', 'name' : 'Gibraltar Pound'},
+ {'code' : 'GMD', 'name' : 'Gambia Dalasi'},
+ {'code' : 'GNF', 'name' : 'Guinea Franc'},
+ {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},
+ {'code' : 'GYD', 'name' : 'Guyana Dollar'},
+ {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},
+ {'code' : 'HNL', 'name' : 'Honduras Lempira'},
+ {'code' : 'HRK', 'name' : 'Croatia Kuna'},
+ {'code' : 'HTG', 'name' : 'Haiti Gourde'},
+ {'code' : 'HUF', 'name' : 'Hungary Forint'},
+ {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},
+ {'code' : 'ILS', 'name' : 'Israel Shekel'},
+ {'code' : 'IMP', 'name' : 'Isle of Man Pound'},
+ {'code' : 'INR', 'name' : 'India Rupee'},
+ {'code' : 'IQD', 'name' : 'Iraq Dinar'},
+ {'code' : 'IRR', 'name' : 'Iran Rial'},
+ {'code' : 'ISK', 'name' : 'Iceland Krona'},
+ {'code' : 'JEP', 'name' : 'Jersey Pound'},
+ {'code' : 'JMD', 'name' : 'Jamaica Dollar'},
+ {'code' : 'JOD', 'name' : 'Jordan Dinar'},
+ {'code' : 'JPY', 'name' : 'Japan Yen'},
+ {'code' : 'KES', 'name' : 'Kenya Shilling'},
+ {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},
+ {'code' : 'KHR', 'name' : 'Cambodia Riel'},
+ {'code' : 'KMF', 'name' : 'Comoros Franc'},
+ {'code' : 'KPW', 'name' : 'Korea (North) Won'},
+ {'code' : 'KRW', 'name' : 'Korea (South) Won'},
+ {'code' : 'KWD', 'name' : 'Kuwait Dinar'},
+ {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},
+ {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},
+ {'code' : 'LAK', 'name' : 'Laos Kip'},
+ {'code' : 'LBP', 'name' : 'Lebanon Pound'},
+ {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},
+ {'code' : 'LRD', 'name' : 'Liberia Dollar'},
+ {'code' : 'LSL', 'name' : 'Lesotho Loti'},
+ {'code' : 'LTL', 'name' : 'Lithuania Litas'},
+ {'code' : 'LYD', 'name' : 'Libya Dinar'},
+ {'code' : 'MAD', 'name' : 'Morocco Dirham'},
+ {'code' : 'MDL', 'name' : 'Moldova Leu'},
+ {'code' : 'MGA', 'name' : 'Madagascar Ariary'},
+ {'code' : 'MKD', 'name' : 'Macedonia Denar'},
+ {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},
+ {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},
+ {'code' : 'MOP', 'name' : 'Macau Pataca'},
+ {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},
+ {'code' : 'MUR', 'name' : 'Mauritius Rupee'},
+ {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},
+ {'code' : 'MWK', 'name' : 'Malawi Kwacha'},
+ {'code' : 'MXN', 'name' : 'Mexico Peso'},
+ {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},
+ {'code' : 'MZN', 'name' : 'Mozambique Metical'},
+ {'code' : 'NAD', 'name' : 'Namibia Dollar'},
+ {'code' : 'NGN', 'name' : 'Nigeria Naira'},
+ {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},
+ {'code' : 'NOK', 'name' : 'Norway Krone'},
+ {'code' : 'NPR', 'name' : 'Nepal Rupee'},
+ {'code' : 'NZD', 'name' : 'New Zealand Dollar'},
+ {'code' : 'OMR', 'name' : 'Oman Rial'},
+ {'code' : 'PAB', 'name' : 'Panama Balboa'},
+ {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},
+ {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},
+ {'code' : 'PHP', 'name' : 'Philippines Peso'},
+ {'code' : 'PKR', 'name' : 'Pakistan Rupee'},
+ {'code' : 'PLN', 'name' : 'Poland Zloty'},
+ {'code' : 'PYG', 'name' : 'Paraguay Guarani'},
+ {'code' : 'QAR', 'name' : 'Qatar Riyal'},
+ {'code' : 'RON', 'name' : 'Romania New Leu'},
+ {'code' : 'RSD', 'name' : 'Serbia Dinar'},
+ {'code' : 'RUB', 'name' : 'Russia Ruble'},
+ {'code' : 'RWF', 'name' : 'Rwanda Franc'},
+ {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},
+ {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},
+ {'code' : 'SCR', 'name' : 'Seychelles Rupee'},
+ {'code' : 'SDG', 'name' : 'Sudan Pound'},
+ {'code' : 'SEK', 'name' : 'Sweden Krona'},
+ {'code' : 'SGD', 'name' : 'Singapore Dollar'},
+ {'code' : 'SHP', 'name' : 'Saint Helena Pound'},
+ {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},
+ {'code' : 'SOS', 'name' : 'Somalia Shilling'},
+ {'code' : 'SPL', 'name' : 'Seborga Luigino'},
+ {'code' : 'SRD', 'name' : 'Suriname Dollar'},
+ {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},
+ {'code' : 'SVC', 'name' : 'El Salvador Colon'},
+ {'code' : 'SYP', 'name' : 'Syria Pound'},
+ {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},
+ {'code' : 'THB', 'name' : 'Thailand Baht'},
+ {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},
+ {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},
+ {'code' : 'TND', 'name' : 'Tunisia Dinar'},
+ {'code' : 'TOP', 'name' : 'Tonga Pa\'anga'},
+ {'code' : 'TRY', 'name' : 'Turkey Lira'},
+ {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},
+ {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},
+ {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},
+ {'code' : 'TZS', 'name' : 'Tanzania Shilling'},
+ {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},
+ {'code' : 'UGX', 'name' : 'Uganda Shilling'},
+ {'code' : 'USD', 'name' : 'United States Dollar'},
+ {'code' : 'UYU', 'name' : 'Uruguay Peso'},
+ {'code' : 'UZS', 'name' : 'Uzbekistan Som'},
+ {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},
+ {'code' : 'VND', 'name' : 'Viet Nam Dong'},
+ {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},
+ {'code' : 'WST', 'name' : 'Samoa Tala'},
+ {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},
+ {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},
+ {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},
+ {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},
+ {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},
+ {'code' : 'YER', 'name' : 'Yemen Rial'},
+ {'code' : 'ZAR', 'name' : 'South Africa Rand'},
+ {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},
+ {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}
+ ],
+
+ // return the names of all valide colors
+ colorNames : [ "AliceBlue", "Black", "Navy", "DarkBlue", "MediumBlue", "Blue", "DarkGreen", "Green", "Teal", "DarkCyan", "DeepSkyBlue", "DarkTurquoise", "MediumSpringGreen", "Lime", "SpringGreen",
+ "Aqua", "Cyan", "MidnightBlue", "DodgerBlue", "LightSeaGreen", "ForestGreen", "SeaGreen", "DarkSlateGray", "LimeGreen", "MediumSeaGreen", "Turquoise", "RoyalBlue", "SteelBlue", "DarkSlateBlue", "MediumTurquoise",
+ "Indigo", "DarkOliveGreen", "CadetBlue", "CornflowerBlue", "RebeccaPurple", "MediumAquaMarine", "DimGray", "SlateBlue", "OliveDrab", "SlateGray", "LightSlateGray", "MediumSlateBlue", "LawnGreen", "Chartreuse",
+ "Aquamarine", "Maroon", "Purple", "Olive", "Gray", "SkyBlue", "LightSkyBlue", "BlueViolet", "DarkRed", "DarkMagenta", "SaddleBrown", "Ivory", "White",
+ "DarkSeaGreen", "LightGreen", "MediumPurple", "DarkViolet", "PaleGreen", "DarkOrchid", "YellowGreen", "Sienna", "Brown", "DarkGray", "LightBlue", "GreenYellow", "PaleTurquoise", "LightSteelBlue", "PowderBlue",
+ "FireBrick", "DarkGoldenRod", "MediumOrchid", "RosyBrown", "DarkKhaki", "Silver", "MediumVioletRed", "IndianRed", "Peru", "Chocolate", "Tan", "LightGray", "Thistle", "Orchid", "GoldenRod", "PaleVioletRed",
+ "Crimson", "Gainsboro", "Plum", "BurlyWood", "LightCyan", "Lavender", "DarkSalmon", "Violet", "PaleGoldenRod", "LightCoral", "Khaki", "AliceBlue", "HoneyDew", "Azure", "SandyBrown", "Wheat", "Beige", "WhiteSmoke",
+ "MintCream", "GhostWhite", "Salmon", "AntiqueWhite", "Linen", "LightGoldenRodYellow", "OldLace", "Red", "Fuchsia", "Magenta", "DeepPink", "OrangeRed", "Tomato", "HotPink", "Coral", "DarkOrange", "LightSalmon", "Orange",
+ "LightPink", "Pink", "Gold", "PeachPuff", "NavajoWhite", "Moccasin", "Bisque", "MistyRose", "BlanchedAlmond", "PapayaWhip", "LavenderBlush", "SeaShell", "Cornsilk", "LemonChiffon", "FloralWhite", "Snow", "Yellow", "LightYellow"
+ ],
+
+ // Data taken from https://www.sec.gov/rules/other/4-460list.htm
+ company: [ "3Com Corp",
+ "3M Company",
+ "A.G. Edwards Inc.",
+ "Abbott Laboratories",
+ "Abercrombie & Fitch Co.",
+ "ABM Industries Incorporated",
+ "Ace Hardware Corporation",
+ "ACT Manufacturing Inc.",
+ "Acterna Corp.",
+ "Adams Resources & Energy, Inc.",
+ "ADC Telecommunications, Inc.",
+ "Adelphia Communications Corporation",
+ "Administaff, Inc.",
+ "Adobe Systems Incorporated",
+ "Adolph Coors Company",
+ "Advance Auto Parts, Inc.",
+ "Advanced Micro Devices, Inc.",
+ "AdvancePCS, Inc.",
+ "Advantica Restaurant Group, Inc.",
+ "The AES Corporation",
+ "Aetna Inc.",
+ "Affiliated Computer Services, Inc.",
+ "AFLAC Incorporated",
+ "AGCO Corporation",
+ "Agilent Technologies, Inc.",
+ "Agway Inc.",
+ "Apartment Investment and Management Company",
+ "Air Products and Chemicals, Inc.",
+ "Airborne, Inc.",
+ "Airgas, Inc.",
+ "AK Steel Holding Corporation",
+ "Alaska Air Group, Inc.",
+ "Alberto-Culver Company",
+ "Albertson's, Inc.",
+ "Alcoa Inc.",
+ "Alleghany Corporation",
+ "Allegheny Energy, Inc.",
+ "Allegheny Technologies Incorporated",
+ "Allergan, Inc.",
+ "ALLETE, Inc.",
+ "Alliant Energy Corporation",
+ "Allied Waste Industries, Inc.",
+ "Allmerica Financial Corporation",
+ "The Allstate Corporation",
+ "ALLTEL Corporation",
+ "The Alpine Group, Inc.",
+ "Amazon.com, Inc.",
+ "AMC Entertainment Inc.",
+ "American Power Conversion Corporation",
+ "Amerada Hess Corporation",
+ "AMERCO",
+ "Ameren Corporation",
+ "America West Holdings Corporation",
+ "American Axle & Manufacturing Holdings, Inc.",
+ "American Eagle Outfitters, Inc.",
+ "American Electric Power Company, Inc.",
+ "American Express Company",
+ "American Financial Group, Inc.",
+ "American Greetings Corporation",
+ "American International Group, Inc.",
+ "American Standard Companies Inc.",
+ "American Water Works Company, Inc.",
+ "AmerisourceBergen Corporation",
+ "Ames Department Stores, Inc.",
+ "Amgen Inc.",
+ "Amkor Technology, Inc.",
+ "AMR Corporation",
+ "AmSouth Bancorp.",
+ "Amtran, Inc.",
+ "Anadarko Petroleum Corporation",
+ "Analog Devices, Inc.",
+ "Anheuser-Busch Companies, Inc.",
+ "Anixter International Inc.",
+ "AnnTaylor Inc.",
+ "Anthem, Inc.",
+ "AOL Time Warner Inc.",
+ "Aon Corporation",
+ "Apache Corporation",
+ "Apple Computer, Inc.",
+ "Applera Corporation",
+ "Applied Industrial Technologies, Inc.",
+ "Applied Materials, Inc.",
+ "Aquila, Inc.",
+ "ARAMARK Corporation",
+ "Arch Coal, Inc.",
+ "Archer Daniels Midland Company",
+ "Arkansas Best Corporation",
+ "Armstrong Holdings, Inc.",
+ "Arrow Electronics, Inc.",
+ "ArvinMeritor, Inc.",
+ "Ashland Inc.",
+ "Astoria Financial Corporation",
+ "AT&T Corp.",
+ "Atmel Corporation",
+ "Atmos Energy Corporation",
+ "Audiovox Corporation",
+ "Autoliv, Inc.",
+ "Automatic Data Processing, Inc.",
+ "AutoNation, Inc.",
+ "AutoZone, Inc.",
+ "Avaya Inc.",
+ "Avery Dennison Corporation",
+ "Avista Corporation",
+ "Avnet, Inc.",
+ "Avon Products, Inc.",
+ "Baker Hughes Incorporated",
+ "Ball Corporation",
+ "Bank of America Corporation",
+ "The Bank of New York Company, Inc.",
+ "Bank One Corporation",
+ "Banknorth Group, Inc.",
+ "Banta Corporation",
+ "Barnes & Noble, Inc.",
+ "Bausch & Lomb Incorporated",
+ "Baxter International Inc.",
+ "BB&T Corporation",
+ "The Bear Stearns Companies Inc.",
+ "Beazer Homes USA, Inc.",
+ "Beckman Coulter, Inc.",
+ "Becton, Dickinson and Company",
+ "Bed Bath & Beyond Inc.",
+ "Belk, Inc.",
+ "Bell Microproducts Inc.",
+ "BellSouth Corporation",
+ "Belo Corp.",
+ "Bemis Company, Inc.",
+ "Benchmark Electronics, Inc.",
+ "Berkshire Hathaway Inc.",
+ "Best Buy Co., Inc.",
+ "Bethlehem Steel Corporation",
+ "Beverly Enterprises, Inc.",
+ "Big Lots, Inc.",
+ "BJ Services Company",
+ "BJ's Wholesale Club, Inc.",
+ "The Black & Decker Corporation",
+ "Black Hills Corporation",
+ "BMC Software, Inc.",
+ "The Boeing Company",
+ "Boise Cascade Corporation",
+ "Borders Group, Inc.",
+ "BorgWarner Inc.",
+ "Boston Scientific Corporation",
+ "Bowater Incorporated",
+ "Briggs & Stratton Corporation",
+ "Brightpoint, Inc.",
+ "Brinker International, Inc.",
+ "Bristol-Myers Squibb Company",
+ "Broadwing, Inc.",
+ "Brown Shoe Company, Inc.",
+ "Brown-Forman Corporation",
+ "Brunswick Corporation",
+ "Budget Group, Inc.",
+ "Burlington Coat Factory Warehouse Corporation",
+ "Burlington Industries, Inc.",
+ "Burlington Northern Santa Fe Corporation",
+ "Burlington Resources Inc.",
+ "C. H. Robinson Worldwide Inc.",
+ "Cablevision Systems Corp",
+ "Cabot Corp",
+ "Cadence Design Systems, Inc.",
+ "Calpine Corp.",
+ "Campbell Soup Co.",
+ "Capital One Financial Corp.",
+ "Cardinal Health Inc.",
+ "Caremark Rx Inc.",
+ "Carlisle Cos. Inc.",
+ "Carpenter Technology Corp.",
+ "Casey's General Stores Inc.",
+ "Caterpillar Inc.",
+ "CBRL Group Inc.",
+ "CDI Corp.",
+ "CDW Computer Centers Inc.",
+ "CellStar Corp.",
+ "Cendant Corp",
+ "Cenex Harvest States Cooperatives",
+ "Centex Corp.",
+ "CenturyTel Inc.",
+ "Ceridian Corp.",
+ "CH2M Hill Cos. Ltd.",
+ "Champion Enterprises Inc.",
+ "Charles Schwab Corp.",
+ "Charming Shoppes Inc.",
+ "Charter Communications Inc.",
+ "Charter One Financial Inc.",
+ "ChevronTexaco Corp.",
+ "Chiquita Brands International Inc.",
+ "Chubb Corp",
+ "Ciena Corp.",
+ "Cigna Corp",
+ "Cincinnati Financial Corp.",
+ "Cinergy Corp.",
+ "Cintas Corp.",
+ "Circuit City Stores Inc.",
+ "Cisco Systems Inc.",
+ "Citigroup, Inc",
+ "Citizens Communications Co.",
+ "CKE Restaurants Inc.",
+ "Clear Channel Communications Inc.",
+ "The Clorox Co.",
+ "CMGI Inc.",
+ "CMS Energy Corp.",
+ "CNF Inc.",
+ "Coca-Cola Co.",
+ "Coca-Cola Enterprises Inc.",
+ "Colgate-Palmolive Co.",
+ "Collins & Aikman Corp.",
+ "Comcast Corp.",
+ "Comdisco Inc.",
+ "Comerica Inc.",
+ "Comfort Systems USA Inc.",
+ "Commercial Metals Co.",
+ "Community Health Systems Inc.",
+ "Compass Bancshares Inc",
+ "Computer Associates International Inc.",
+ "Computer Sciences Corp.",
+ "Compuware Corp.",
+ "Comverse Technology Inc.",
+ "ConAgra Foods Inc.",
+ "Concord EFS Inc.",
+ "Conectiv, Inc",
+ "Conoco Inc",
+ "Conseco Inc.",
+ "Consolidated Freightways Corp.",
+ "Consolidated Edison Inc.",
+ "Constellation Brands Inc.",
+ "Constellation Emergy Group Inc.",
+ "Continental Airlines Inc.",
+ "Convergys Corp.",
+ "Cooper Cameron Corp.",
+ "Cooper Industries Ltd.",
+ "Cooper Tire & Rubber Co.",
+ "Corn Products International Inc.",
+ "Corning Inc.",
+ "Costco Wholesale Corp.",
+ "Countrywide Credit Industries Inc.",
+ "Coventry Health Care Inc.",
+ "Cox Communications Inc.",
+ "Crane Co.",
+ "Crompton Corp.",
+ "Crown Cork & Seal Co. Inc.",
+ "CSK Auto Corp.",
+ "CSX Corp.",
+ "Cummins Inc.",
+ "CVS Corp.",
+ "Cytec Industries Inc.",
+ "D&K Healthcare Resources, Inc.",
+ "D.R. Horton Inc.",
+ "Dana Corporation",
+ "Danaher Corporation",
+ "Darden Restaurants Inc.",
+ "DaVita Inc.",
+ "Dean Foods Company",
+ "Deere & Company",
+ "Del Monte Foods Co",
+ "Dell Computer Corporation",
+ "Delphi Corp.",
+ "Delta Air Lines Inc.",
+ "Deluxe Corporation",
+ "Devon Energy Corporation",
+ "Di Giorgio Corporation",
+ "Dial Corporation",
+ "Diebold Incorporated",
+ "Dillard's Inc.",
+ "DIMON Incorporated",
+ "Dole Food Company, Inc.",
+ "Dollar General Corporation",
+ "Dollar Tree Stores, Inc.",
+ "Dominion Resources, Inc.",
+ "Domino's Pizza LLC",
+ "Dover Corporation, Inc.",
+ "Dow Chemical Company",
+ "Dow Jones & Company, Inc.",
+ "DPL Inc.",
+ "DQE Inc.",
+ "Dreyer's Grand Ice Cream, Inc.",
+ "DST Systems, Inc.",
+ "DTE Energy Co.",
+ "E.I. Du Pont de Nemours and Company",
+ "Duke Energy Corp",
+ "Dun & Bradstreet Inc.",
+ "DURA Automotive Systems Inc.",
+ "DynCorp",
+ "Dynegy Inc.",
+ "E*Trade Group, Inc.",
+ "E.W. Scripps Company",
+ "Earthlink, Inc.",
+ "Eastman Chemical Company",
+ "Eastman Kodak Company",
+ "Eaton Corporation",
+ "Echostar Communications Corporation",
+ "Ecolab Inc.",
+ "Edison International",
+ "EGL Inc.",
+ "El Paso Corporation",
+ "Electronic Arts Inc.",
+ "Electronic Data Systems Corp.",
+ "Eli Lilly and Company",
+ "EMC Corporation",
+ "Emcor Group Inc.",
+ "Emerson Electric Co.",
+ "Encompass Services Corporation",
+ "Energizer Holdings Inc.",
+ "Energy East Corporation",
+ "Engelhard Corporation",
+ "Enron Corp.",
+ "Entergy Corporation",
+ "Enterprise Products Partners L.P.",
+ "EOG Resources, Inc.",
+ "Equifax Inc.",
+ "Equitable Resources Inc.",
+ "Equity Office Properties Trust",
+ "Equity Residential Properties Trust",
+ "Estee Lauder Companies Inc.",
+ "Exelon Corporation",
+ "Exide Technologies",
+ "Expeditors International of Washington Inc.",
+ "Express Scripts Inc.",
+ "ExxonMobil Corporation",
+ "Fairchild Semiconductor International Inc.",
+ "Family Dollar Stores Inc.",
+ "Farmland Industries Inc.",
+ "Federal Mogul Corp.",
+ "Federated Department Stores Inc.",
+ "Federal Express Corp.",
+ "Felcor Lodging Trust Inc.",
+ "Ferro Corp.",
+ "Fidelity National Financial Inc.",
+ "Fifth Third Bancorp",
+ "First American Financial Corp.",
+ "First Data Corp.",
+ "First National of Nebraska Inc.",
+ "First Tennessee National Corp.",
+ "FirstEnergy Corp.",
+ "Fiserv Inc.",
+ "Fisher Scientific International Inc.",
+ "FleetBoston Financial Co.",
+ "Fleetwood Enterprises Inc.",
+ "Fleming Companies Inc.",
+ "Flowers Foods Inc.",
+ "Flowserv Corp",
+ "Fluor Corp",
+ "FMC Corp",
+ "Foamex International Inc",
+ "Foot Locker Inc",
+ "Footstar Inc.",
+ "Ford Motor Co",
+ "Forest Laboratories Inc.",
+ "Fortune Brands Inc.",
+ "Foster Wheeler Ltd.",
+ "FPL Group Inc.",
+ "Franklin Resources Inc.",
+ "Freeport McMoran Copper & Gold Inc.",
+ "Frontier Oil Corp",
+ "Furniture Brands International Inc.",
+ "Gannett Co., Inc.",
+ "Gap Inc.",
+ "Gateway Inc.",
+ "GATX Corporation",
+ "Gemstar-TV Guide International Inc.",
+ "GenCorp Inc.",
+ "General Cable Corporation",
+ "General Dynamics Corporation",
+ "General Electric Company",
+ "General Mills Inc",
+ "General Motors Corporation",
+ "Genesis Health Ventures Inc.",
+ "Gentek Inc.",
+ "Gentiva Health Services Inc.",
+ "Genuine Parts Company",
+ "Genuity Inc.",
+ "Genzyme Corporation",
+ "Georgia Gulf Corporation",
+ "Georgia-Pacific Corporation",
+ "Gillette Company",
+ "Gold Kist Inc.",
+ "Golden State Bancorp Inc.",
+ "Golden West Financial Corporation",
+ "Goldman Sachs Group Inc.",
+ "Goodrich Corporation",
+ "The Goodyear Tire & Rubber Company",
+ "Granite Construction Incorporated",
+ "Graybar Electric Company Inc.",
+ "Great Lakes Chemical Corporation",
+ "Great Plains Energy Inc.",
+ "GreenPoint Financial Corp.",
+ "Greif Bros. Corporation",
+ "Grey Global Group Inc.",
+ "Group 1 Automotive Inc.",
+ "Guidant Corporation",
+ "H&R Block Inc.",
+ "H.B. Fuller Company",
+ "H.J. Heinz Company",
+ "Halliburton Co.",
+ "Harley-Davidson Inc.",
+ "Harman International Industries Inc.",
+ "Harrah's Entertainment Inc.",
+ "Harris Corp.",
+ "Harsco Corp.",
+ "Hartford Financial Services Group Inc.",
+ "Hasbro Inc.",
+ "Hawaiian Electric Industries Inc.",
+ "HCA Inc.",
+ "Health Management Associates Inc.",
+ "Health Net Inc.",
+ "Healthsouth Corp",
+ "Henry Schein Inc.",
+ "Hercules Inc.",
+ "Herman Miller Inc.",
+ "Hershey Foods Corp.",
+ "Hewlett-Packard Company",
+ "Hibernia Corp.",
+ "Hillenbrand Industries Inc.",
+ "Hilton Hotels Corp.",
+ "Hollywood Entertainment Corp.",
+ "Home Depot Inc.",
+ "Hon Industries Inc.",
+ "Honeywell International Inc.",
+ "Hormel Foods Corp.",
+ "Host Marriott Corp.",
+ "Household International Corp.",
+ "Hovnanian Enterprises Inc.",
+ "Hub Group Inc.",
+ "Hubbell Inc.",
+ "Hughes Supply Inc.",
+ "Humana Inc.",
+ "Huntington Bancshares Inc.",
+ "Idacorp Inc.",
+ "IDT Corporation",
+ "IKON Office Solutions Inc.",
+ "Illinois Tool Works Inc.",
+ "IMC Global Inc.",
+ "Imperial Sugar Company",
+ "IMS Health Inc.",
+ "Ingles Market Inc",
+ "Ingram Micro Inc.",
+ "Insight Enterprises Inc.",
+ "Integrated Electrical Services Inc.",
+ "Intel Corporation",
+ "International Paper Co.",
+ "Interpublic Group of Companies Inc.",
+ "Interstate Bakeries Corporation",
+ "International Business Machines Corp.",
+ "International Flavors & Fragrances Inc.",
+ "International Multifoods Corporation",
+ "Intuit Inc.",
+ "IT Group Inc.",
+ "ITT Industries Inc.",
+ "Ivax Corp.",
+ "J.B. Hunt Transport Services Inc.",
+ "J.C. Penny Co.",
+ "J.P. Morgan Chase & Co.",
+ "Jabil Circuit Inc.",
+ "Jack In The Box Inc.",
+ "Jacobs Engineering Group Inc.",
+ "JDS Uniphase Corp.",
+ "Jefferson-Pilot Co.",
+ "John Hancock Financial Services Inc.",
+ "Johnson & Johnson",
+ "Johnson Controls Inc.",
+ "Jones Apparel Group Inc.",
+ "KB Home",
+ "Kellogg Company",
+ "Kellwood Company",
+ "Kelly Services Inc.",
+ "Kemet Corp.",
+ "Kennametal Inc.",
+ "Kerr-McGee Corporation",
+ "KeyCorp",
+ "KeySpan Corp.",
+ "Kimball International Inc.",
+ "Kimberly-Clark Corporation",
+ "Kindred Healthcare Inc.",
+ "KLA-Tencor Corporation",
+ "K-Mart Corp.",
+ "Knight-Ridder Inc.",
+ "Kohl's Corp.",
+ "KPMG Consulting Inc.",
+ "Kroger Co.",
+ "L-3 Communications Holdings Inc.",
+ "Laboratory Corporation of America Holdings",
+ "Lam Research Corporation",
+ "LandAmerica Financial Group Inc.",
+ "Lands' End Inc.",
+ "Landstar System Inc.",
+ "La-Z-Boy Inc.",
+ "Lear Corporation",
+ "Legg Mason Inc.",
+ "Leggett & Platt Inc.",
+ "Lehman Brothers Holdings Inc.",
+ "Lennar Corporation",
+ "Lennox International Inc.",
+ "Level 3 Communications Inc.",
+ "Levi Strauss & Co.",
+ "Lexmark International Inc.",
+ "Limited Inc.",
+ "Lincoln National Corporation",
+ "Linens 'n Things Inc.",
+ "Lithia Motors Inc.",
+ "Liz Claiborne Inc.",
+ "Lockheed Martin Corporation",
+ "Loews Corporation",
+ "Longs Drug Stores Corporation",
+ "Louisiana-Pacific Corporation",
+ "Lowe's Companies Inc.",
+ "LSI Logic Corporation",
+ "The LTV Corporation",
+ "The Lubrizol Corporation",
+ "Lucent Technologies Inc.",
+ "Lyondell Chemical Company",
+ "M & T Bank Corporation",
+ "Magellan Health Services Inc.",
+ "Mail-Well Inc.",
+ "Mandalay Resort Group",
+ "Manor Care Inc.",
+ "Manpower Inc.",
+ "Marathon Oil Corporation",
+ "Mariner Health Care Inc.",
+ "Markel Corporation",
+ "Marriott International Inc.",
+ "Marsh & McLennan Companies Inc.",
+ "Marsh Supermarkets Inc.",
+ "Marshall & Ilsley Corporation",
+ "Martin Marietta Materials Inc.",
+ "Masco Corporation",
+ "Massey Energy Company",
+ "MasTec Inc.",
+ "Mattel Inc.",
+ "Maxim Integrated Products Inc.",
+ "Maxtor Corporation",
+ "Maxxam Inc.",
+ "The May Department Stores Company",
+ "Maytag Corporation",
+ "MBNA Corporation",
+ "McCormick & Company Incorporated",
+ "McDonald's Corporation",
+ "The McGraw-Hill Companies Inc.",
+ "McKesson Corporation",
+ "McLeodUSA Incorporated",
+ "M.D.C. Holdings Inc.",
+ "MDU Resources Group Inc.",
+ "MeadWestvaco Corporation",
+ "Medtronic Inc.",
+ "Mellon Financial Corporation",
+ "The Men's Wearhouse Inc.",
+ "Merck & Co., Inc.",
+ "Mercury General Corporation",
+ "Merrill Lynch & Co. Inc.",
+ "Metaldyne Corporation",
+ "Metals USA Inc.",
+ "MetLife Inc.",
+ "Metris Companies Inc",
+ "MGIC Investment Corporation",
+ "MGM Mirage",
+ "Michaels Stores Inc.",
+ "Micron Technology Inc.",
+ "Microsoft Corporation",
+ "Milacron Inc.",
+ "Millennium Chemicals Inc.",
+ "Mirant Corporation",
+ "Mohawk Industries Inc.",
+ "Molex Incorporated",
+ "The MONY Group Inc.",
+ "Morgan Stanley Dean Witter & Co.",
+ "Motorola Inc.",
+ "MPS Group Inc.",
+ "Murphy Oil Corporation",
+ "Nabors Industries Inc",
+ "Nacco Industries Inc",
+ "Nash Finch Company",
+ "National City Corp.",
+ "National Commerce Financial Corporation",
+ "National Fuel Gas Company",
+ "National Oilwell Inc",
+ "National Rural Utilities Cooperative Finance Corporation",
+ "National Semiconductor Corporation",
+ "National Service Industries Inc",
+ "Navistar International Corporation",
+ "NCR Corporation",
+ "The Neiman Marcus Group Inc.",
+ "New Jersey Resources Corporation",
+ "New York Times Company",
+ "Newell Rubbermaid Inc",
+ "Newmont Mining Corporation",
+ "Nextel Communications Inc",
+ "Nicor Inc",
+ "Nike Inc",
+ "NiSource Inc",
+ "Noble Energy Inc",
+ "Nordstrom Inc",
+ "Norfolk Southern Corporation",
+ "Nortek Inc",
+ "North Fork Bancorporation Inc",
+ "Northeast Utilities System",
+ "Northern Trust Corporation",
+ "Northrop Grumman Corporation",
+ "NorthWestern Corporation",
+ "Novellus Systems Inc",
+ "NSTAR",
+ "NTL Incorporated",
+ "Nucor Corp",
+ "Nvidia Corp",
+ "NVR Inc",
+ "Northwest Airlines Corp",
+ "Occidental Petroleum Corp",
+ "Ocean Energy Inc",
+ "Office Depot Inc.",
+ "OfficeMax Inc",
+ "OGE Energy Corp",
+ "Oglethorpe Power Corp.",
+ "Ohio Casualty Corp.",
+ "Old Republic International Corp.",
+ "Olin Corp.",
+ "OM Group Inc",
+ "Omnicare Inc",
+ "Omnicom Group",
+ "On Semiconductor Corp",
+ "ONEOK Inc",
+ "Oracle Corp",
+ "Oshkosh Truck Corp",
+ "Outback Steakhouse Inc.",
+ "Owens & Minor Inc.",
+ "Owens Corning",
+ "Owens-Illinois Inc",
+ "Oxford Health Plans Inc",
+ "Paccar Inc",
+ "PacifiCare Health Systems Inc",
+ "Packaging Corp. of America",
+ "Pactiv Corp",
+ "Pall Corp",
+ "Pantry Inc",
+ "Park Place Entertainment Corp",
+ "Parker Hannifin Corp.",
+ "Pathmark Stores Inc.",
+ "Paychex Inc",
+ "Payless Shoesource Inc",
+ "Penn Traffic Co.",
+ "Pennzoil-Quaker State Company",
+ "Pentair Inc",
+ "Peoples Energy Corp.",
+ "PeopleSoft Inc",
+ "Pep Boys Manny, Moe & Jack",
+ "Potomac Electric Power Co.",
+ "Pepsi Bottling Group Inc.",
+ "PepsiAmericas Inc.",
+ "PepsiCo Inc.",
+ "Performance Food Group Co.",
+ "Perini Corp",
+ "PerkinElmer Inc",
+ "Perot Systems Corp",
+ "Petco Animal Supplies Inc.",
+ "Peter Kiewit Sons', Inc.",
+ "PETsMART Inc",
+ "Pfizer Inc",
+ "Pacific Gas & Electric Corp.",
+ "Pharmacia Corp",
+ "Phar Mor Inc.",
+ "Phelps Dodge Corp.",
+ "Philip Morris Companies Inc.",
+ "Phillips Petroleum Co",
+ "Phillips Van Heusen Corp.",
+ "Phoenix Companies Inc",
+ "Pier 1 Imports Inc.",
+ "Pilgrim's Pride Corporation",
+ "Pinnacle West Capital Corp",
+ "Pioneer-Standard Electronics Inc.",
+ "Pitney Bowes Inc.",
+ "Pittston Brinks Group",
+ "Plains All American Pipeline LP",
+ "PNC Financial Services Group Inc.",
+ "PNM Resources Inc",
+ "Polaris Industries Inc.",
+ "Polo Ralph Lauren Corp",
+ "PolyOne Corp",
+ "Popular Inc",
+ "Potlatch Corp",
+ "PPG Industries Inc",
+ "PPL Corp",
+ "Praxair Inc",
+ "Precision Castparts Corp",
+ "Premcor Inc.",
+ "Pride International Inc",
+ "Primedia Inc",
+ "Principal Financial Group Inc.",
+ "Procter & Gamble Co.",
+ "Pro-Fac Cooperative Inc.",
+ "Progress Energy Inc",
+ "Progressive Corporation",
+ "Protective Life Corp",
+ "Provident Financial Group",
+ "Providian Financial Corp.",
+ "Prudential Financial Inc.",
+ "PSS World Medical Inc",
+ "Public Service Enterprise Group Inc.",
+ "Publix Super Markets Inc.",
+ "Puget Energy Inc.",
+ "Pulte Homes Inc",
+ "Qualcomm Inc",
+ "Quanta Services Inc.",
+ "Quantum Corp",
+ "Quest Diagnostics Inc.",
+ "Questar Corp",
+ "Quintiles Transnational",
+ "Qwest Communications Intl Inc",
+ "R.J. Reynolds Tobacco Company",
+ "R.R. Donnelley & Sons Company",
+ "Radio Shack Corporation",
+ "Raymond James Financial Inc.",
+ "Raytheon Company",
+ "Reader's Digest Association Inc.",
+ "Reebok International Ltd.",
+ "Regions Financial Corp.",
+ "Regis Corporation",
+ "Reliance Steel & Aluminum Co.",
+ "Reliant Energy Inc.",
+ "Rent A Center Inc",
+ "Republic Services Inc",
+ "Revlon Inc",
+ "RGS Energy Group Inc",
+ "Rite Aid Corp",
+ "Riverwood Holding Inc.",
+ "RoadwayCorp",
+ "Robert Half International Inc.",
+ "Rock-Tenn Co",
+ "Rockwell Automation Inc",
+ "Rockwell Collins Inc",
+ "Rohm & Haas Co.",
+ "Ross Stores Inc",
+ "RPM Inc.",
+ "Ruddick Corp",
+ "Ryder System Inc",
+ "Ryerson Tull Inc",
+ "Ryland Group Inc.",
+ "Sabre Holdings Corp",
+ "Safeco Corp",
+ "Safeguard Scientifics Inc.",
+ "Safeway Inc",
+ "Saks Inc",
+ "Sanmina-SCI Inc",
+ "Sara Lee Corp",
+ "SBC Communications Inc",
+ "Scana Corp.",
+ "Schering-Plough Corp",
+ "Scholastic Corp",
+ "SCI Systems Onc.",
+ "Science Applications Intl. Inc.",
+ "Scientific-Atlanta Inc",
+ "Scotts Company",
+ "Seaboard Corp",
+ "Sealed Air Corp",
+ "Sears Roebuck & Co",
+ "Sempra Energy",
+ "Sequa Corp",
+ "Service Corp. International",
+ "ServiceMaster Co",
+ "Shaw Group Inc",
+ "Sherwin-Williams Company",
+ "Shopko Stores Inc",
+ "Siebel Systems Inc",
+ "Sierra Health Services Inc",
+ "Sierra Pacific Resources",
+ "Silgan Holdings Inc.",
+ "Silicon Graphics Inc",
+ "Simon Property Group Inc",
+ "SLM Corporation",
+ "Smith International Inc",
+ "Smithfield Foods Inc",
+ "Smurfit-Stone Container Corp",
+ "Snap-On Inc",
+ "Solectron Corp",
+ "Solutia Inc",
+ "Sonic Automotive Inc.",
+ "Sonoco Products Co.",
+ "Southern Company",
+ "Southern Union Company",
+ "SouthTrust Corp.",
+ "Southwest Airlines Co",
+ "Southwest Gas Corp",
+ "Sovereign Bancorp Inc.",
+ "Spartan Stores Inc",
+ "Spherion Corp",
+ "Sports Authority Inc",
+ "Sprint Corp.",
+ "SPX Corp",
+ "St. Jude Medical Inc",
+ "St. Paul Cos.",
+ "Staff Leasing Inc.",
+ "StanCorp Financial Group Inc",
+ "Standard Pacific Corp.",
+ "Stanley Works",
+ "Staples Inc",
+ "Starbucks Corp",
+ "Starwood Hotels & Resorts Worldwide Inc",
+ "State Street Corp.",
+ "Stater Bros. Holdings Inc.",
+ "Steelcase Inc",
+ "Stein Mart Inc",
+ "Stewart & Stevenson Services Inc",
+ "Stewart Information Services Corp",
+ "Stilwell Financial Inc",
+ "Storage Technology Corporation",
+ "Stryker Corp",
+ "Sun Healthcare Group Inc.",
+ "Sun Microsystems Inc.",
+ "SunGard Data Systems Inc.",
+ "Sunoco Inc.",
+ "SunTrust Banks Inc",
+ "Supervalu Inc",
+ "Swift Transportation, Co., Inc",
+ "Symbol Technologies Inc",
+ "Synovus Financial Corp.",
+ "Sysco Corp",
+ "Systemax Inc.",
+ "Target Corp.",
+ "Tech Data Corporation",
+ "TECO Energy Inc",
+ "Tecumseh Products Company",
+ "Tektronix Inc",
+ "Teleflex Incorporated",
+ "Telephone & Data Systems Inc",
+ "Tellabs Inc.",
+ "Temple-Inland Inc",
+ "Tenet Healthcare Corporation",
+ "Tenneco Automotive Inc.",
+ "Teradyne Inc",
+ "Terex Corp",
+ "Tesoro Petroleum Corp.",
+ "Texas Industries Inc.",
+ "Texas Instruments Incorporated",
+ "Textron Inc",
+ "Thermo Electron Corporation",
+ "Thomas & Betts Corporation",
+ "Tiffany & Co",
+ "Timken Company",
+ "TJX Companies Inc",
+ "TMP Worldwide Inc",
+ "Toll Brothers Inc",
+ "Torchmark Corporation",
+ "Toro Company",
+ "Tower Automotive Inc.",
+ "Toys 'R' Us Inc",
+ "Trans World Entertainment Corp.",
+ "TransMontaigne Inc",
+ "Transocean Inc",
+ "TravelCenters of America Inc.",
+ "Triad Hospitals Inc",
+ "Tribune Company",
+ "Trigon Healthcare Inc.",
+ "Trinity Industries Inc",
+ "Trump Hotels & Casino Resorts Inc.",
+ "TruServ Corporation",
+ "TRW Inc",
+ "TXU Corp",
+ "Tyson Foods Inc",
+ "U.S. Bancorp",
+ "U.S. Industries Inc.",
+ "UAL Corporation",
+ "UGI Corporation",
+ "Unified Western Grocers Inc",
+ "Union Pacific Corporation",
+ "Union Planters Corp",
+ "Unisource Energy Corp",
+ "Unisys Corporation",
+ "United Auto Group Inc",
+ "United Defense Industries Inc.",
+ "United Parcel Service Inc",
+ "United Rentals Inc",
+ "United Stationers Inc",
+ "United Technologies Corporation",
+ "UnitedHealth Group Incorporated",
+ "Unitrin Inc",
+ "Universal Corporation",
+ "Universal Forest Products Inc",
+ "Universal Health Services Inc",
+ "Unocal Corporation",
+ "Unova Inc",
+ "UnumProvident Corporation",
+ "URS Corporation",
+ "US Airways Group Inc",
+ "US Oncology Inc",
+ "USA Interactive",
+ "USFreighways Corporation",
+ "USG Corporation",
+ "UST Inc",
+ "Valero Energy Corporation",
+ "Valspar Corporation",
+ "Value City Department Stores Inc",
+ "Varco International Inc",
+ "Vectren Corporation",
+ "Veritas Software Corporation",
+ "Verizon Communications Inc",
+ "VF Corporation",
+ "Viacom Inc",
+ "Viad Corp",
+ "Viasystems Group Inc",
+ "Vishay Intertechnology Inc",
+ "Visteon Corporation",
+ "Volt Information Sciences Inc",
+ "Vulcan Materials Company",
+ "W.R. Berkley Corporation",
+ "W.R. Grace & Co",
+ "W.W. Grainger Inc",
+ "Wachovia Corporation",
+ "Wakenhut Corporation",
+ "Walgreen Co",
+ "Wallace Computer Services Inc",
+ "Wal-Mart Stores Inc",
+ "Walt Disney Co",
+ "Walter Industries Inc",
+ "Washington Mutual Inc",
+ "Washington Post Co.",
+ "Waste Management Inc",
+ "Watsco Inc",
+ "Weatherford International Inc",
+ "Weis Markets Inc.",
+ "Wellpoint Health Networks Inc",
+ "Wells Fargo & Company",
+ "Wendy's International Inc",
+ "Werner Enterprises Inc",
+ "WESCO International Inc",
+ "Western Digital Inc",
+ "Western Gas Resources Inc",
+ "WestPoint Stevens Inc",
+ "Weyerhauser Company",
+ "WGL Holdings Inc",
+ "Whirlpool Corporation",
+ "Whole Foods Market Inc",
+ "Willamette Industries Inc.",
+ "Williams Companies Inc",
+ "Williams Sonoma Inc",
+ "Winn Dixie Stores Inc",
+ "Wisconsin Energy Corporation",
+ "Wm Wrigley Jr Company",
+ "World Fuel Services Corporation",
+ "WorldCom Inc",
+ "Worthington Industries Inc",
+ "WPS Resources Corporation",
+ "Wyeth",
+ "Wyndham International Inc",
+ "Xcel Energy Inc",
+ "Xerox Corp",
+ "Xilinx Inc",
+ "XO Communications Inc",
+ "Yellow Corporation",
+ "York International Corp",
+ "Yum Brands Inc.",
+ "Zale Corporation",
+ "Zions Bancorporation"
+ ],
+
+ fileExtension : {
+ "raster" : ["bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw", "tiff"],
+ "vector" : ["3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "odg", "svg", "xar"],
+ "3d" : ["3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob", "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d"],
+ "document" : ["doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv", "rtf", "tex", "xhtml", "xps"]
+ },
+
+ // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json
+ timezones: [
+ {
+ "name": "Dateline Standard Time",
+ "abbr": "DST",
+ "offset": -12,
+ "isdst": false,
+ "text": "(UTC-12:00) International Date Line West",
+ "utc": [
+ "Etc/GMT+12"
+ ]
+ },
+ {
+ "name": "UTC-11",
+ "abbr": "U",
+ "offset": -11,
+ "isdst": false,
+ "text": "(UTC-11:00) Coordinated Universal Time-11",
+ "utc": [
+ "Etc/GMT+11",
+ "Pacific/Midway",
+ "Pacific/Niue",
+ "Pacific/Pago_Pago"
+ ]
+ },
+ {
+ "name": "Hawaiian Standard Time",
+ "abbr": "HST",
+ "offset": -10,
+ "isdst": false,
+ "text": "(UTC-10:00) Hawaii",
+ "utc": [
+ "Etc/GMT+10",
+ "Pacific/Honolulu",
+ "Pacific/Johnston",
+ "Pacific/Rarotonga",
+ "Pacific/Tahiti"
+ ]
+ },
+ {
+ "name": "Alaskan Standard Time",
+ "abbr": "AKDT",
+ "offset": -8,
+ "isdst": true,
+ "text": "(UTC-09:00) Alaska",
+ "utc": [
+ "America/Anchorage",
+ "America/Juneau",
+ "America/Nome",
+ "America/Sitka",
+ "America/Yakutat"
+ ]
+ },
+ {
+ "name": "Pacific Standard Time (Mexico)",
+ "abbr": "PDT",
+ "offset": -7,
+ "isdst": true,
+ "text": "(UTC-08:00) Baja California",
+ "utc": [
+ "America/Santa_Isabel"
+ ]
+ },
+ {
+ "name": "Pacific Standard Time",
+ "abbr": "PDT",
+ "offset": -7,
+ "isdst": true,
+ "text": "(UTC-08:00) Pacific Time (US & Canada)",
+ "utc": [
+ "America/Dawson",
+ "America/Los_Angeles",
+ "America/Tijuana",
+ "America/Vancouver",
+ "America/Whitehorse",
+ "PST8PDT"
+ ]
+ },
+ {
+ "name": "US Mountain Standard Time",
+ "abbr": "UMST",
+ "offset": -7,
+ "isdst": false,
+ "text": "(UTC-07:00) Arizona",
+ "utc": [
+ "America/Creston",
+ "America/Dawson_Creek",
+ "America/Hermosillo",
+ "America/Phoenix",
+ "Etc/GMT+7"
+ ]
+ },
+ {
+ "name": "Mountain Standard Time (Mexico)",
+ "abbr": "MDT",
+ "offset": -6,
+ "isdst": true,
+ "text": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
+ "utc": [
+ "America/Chihuahua",
+ "America/Mazatlan"
+ ]
+ },
+ {
+ "name": "Mountain Standard Time",
+ "abbr": "MDT",
+ "offset": -6,
+ "isdst": true,
+ "text": "(UTC-07:00) Mountain Time (US & Canada)",
+ "utc": [
+ "America/Boise",
+ "America/Cambridge_Bay",
+ "America/Denver",
+ "America/Edmonton",
+ "America/Inuvik",
+ "America/Ojinaga",
+ "America/Yellowknife",
+ "MST7MDT"
+ ]
+ },
+ {
+ "name": "Central America Standard Time",
+ "abbr": "CAST",
+ "offset": -6,
+ "isdst": false,
+ "text": "(UTC-06:00) Central America",
+ "utc": [
+ "America/Belize",
+ "America/Costa_Rica",
+ "America/El_Salvador",
+ "America/Guatemala",
+ "America/Managua",
+ "America/Tegucigalpa",
+ "Etc/GMT+6",
+ "Pacific/Galapagos"
+ ]
+ },
+ {
+ "name": "Central Standard Time",
+ "abbr": "CDT",
+ "offset": -5,
+ "isdst": true,
+ "text": "(UTC-06:00) Central Time (US & Canada)",
+ "utc": [
+ "America/Chicago",
+ "America/Indiana/Knox",
+ "America/Indiana/Tell_City",
+ "America/Matamoros",
+ "America/Menominee",
+ "America/North_Dakota/Beulah",
+ "America/North_Dakota/Center",
+ "America/North_Dakota/New_Salem",
+ "America/Rainy_River",
+ "America/Rankin_Inlet",
+ "America/Resolute",
+ "America/Winnipeg",
+ "CST6CDT"
+ ]
+ },
+ {
+ "name": "Central Standard Time (Mexico)",
+ "abbr": "CDT",
+ "offset": -5,
+ "isdst": true,
+ "text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
+ "utc": [
+ "America/Bahia_Banderas",
+ "America/Cancun",
+ "America/Merida",
+ "America/Mexico_City",
+ "America/Monterrey"
+ ]
+ },
+ {
+ "name": "Canada Central Standard Time",
+ "abbr": "CCST",
+ "offset": -6,
+ "isdst": false,
+ "text": "(UTC-06:00) Saskatchewan",
+ "utc": [
+ "America/Regina",
+ "America/Swift_Current"
+ ]
+ },
+ {
+ "name": "SA Pacific Standard Time",
+ "abbr": "SPST",
+ "offset": -5,
+ "isdst": false,
+ "text": "(UTC-05:00) Bogota, Lima, Quito",
+ "utc": [
+ "America/Bogota",
+ "America/Cayman",
+ "America/Coral_Harbour",
+ "America/Eirunepe",
+ "America/Guayaquil",
+ "America/Jamaica",
+ "America/Lima",
+ "America/Panama",
+ "America/Rio_Branco",
+ "Etc/GMT+5"
+ ]
+ },
+ {
+ "name": "Eastern Standard Time",
+ "abbr": "EDT",
+ "offset": -4,
+ "isdst": true,
+ "text": "(UTC-05:00) Eastern Time (US & Canada)",
+ "utc": [
+ "America/Detroit",
+ "America/Havana",
+ "America/Indiana/Petersburg",
+ "America/Indiana/Vincennes",
+ "America/Indiana/Winamac",
+ "America/Iqaluit",
+ "America/Kentucky/Monticello",
+ "America/Louisville",
+ "America/Montreal",
+ "America/Nassau",
+ "America/New_York",
+ "America/Nipigon",
+ "America/Pangnirtung",
+ "America/Port-au-Prince",
+ "America/Thunder_Bay",
+ "America/Toronto",
+ "EST5EDT"
+ ]
+ },
+ {
+ "name": "US Eastern Standard Time",
+ "abbr": "UEDT",
+ "offset": -4,
+ "isdst": true,
+ "text": "(UTC-05:00) Indiana (East)",
+ "utc": [
+ "America/Indiana/Marengo",
+ "America/Indiana/Vevay",
+ "America/Indianapolis"
+ ]
+ },
+ {
+ "name": "Venezuela Standard Time",
+ "abbr": "VST",
+ "offset": -4.5,
+ "isdst": false,
+ "text": "(UTC-04:30) Caracas",
+ "utc": [
+ "America/Caracas"
+ ]
+ },
+ {
+ "name": "Paraguay Standard Time",
+ "abbr": "PST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Asuncion",
+ "utc": [
+ "America/Asuncion"
+ ]
+ },
+ {
+ "name": "Atlantic Standard Time",
+ "abbr": "ADT",
+ "offset": -3,
+ "isdst": true,
+ "text": "(UTC-04:00) Atlantic Time (Canada)",
+ "utc": [
+ "America/Glace_Bay",
+ "America/Goose_Bay",
+ "America/Halifax",
+ "America/Moncton",
+ "America/Thule",
+ "Atlantic/Bermuda"
+ ]
+ },
+ {
+ "name": "Central Brazilian Standard Time",
+ "abbr": "CBST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Cuiaba",
+ "utc": [
+ "America/Campo_Grande",
+ "America/Cuiaba"
+ ]
+ },
+ {
+ "name": "SA Western Standard Time",
+ "abbr": "SWST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
+ "utc": [
+ "America/Anguilla",
+ "America/Antigua",
+ "America/Aruba",
+ "America/Barbados",
+ "America/Blanc-Sablon",
+ "America/Boa_Vista",
+ "America/Curacao",
+ "America/Dominica",
+ "America/Grand_Turk",
+ "America/Grenada",
+ "America/Guadeloupe",
+ "America/Guyana",
+ "America/Kralendijk",
+ "America/La_Paz",
+ "America/Lower_Princes",
+ "America/Manaus",
+ "America/Marigot",
+ "America/Martinique",
+ "America/Montserrat",
+ "America/Port_of_Spain",
+ "America/Porto_Velho",
+ "America/Puerto_Rico",
+ "America/Santo_Domingo",
+ "America/St_Barthelemy",
+ "America/St_Kitts",
+ "America/St_Lucia",
+ "America/St_Thomas",
+ "America/St_Vincent",
+ "America/Tortola",
+ "Etc/GMT+4"
+ ]
+ },
+ {
+ "name": "Pacific SA Standard Time",
+ "abbr": "PSST",
+ "offset": -4,
+ "isdst": false,
+ "text": "(UTC-04:00) Santiago",
+ "utc": [
+ "America/Santiago",
+ "Antarctica/Palmer"
+ ]
+ },
+ {
+ "name": "Newfoundland Standard Time",
+ "abbr": "NDT",
+ "offset": -2.5,
+ "isdst": true,
+ "text": "(UTC-03:30) Newfoundland",
+ "utc": [
+ "America/St_Johns"
+ ]
+ },
+ {
+ "name": "E. South America Standard Time",
+ "abbr": "ESAST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Brasilia",
+ "utc": [
+ "America/Sao_Paulo"
+ ]
+ },
+ {
+ "name": "Argentina Standard Time",
+ "abbr": "AST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Buenos Aires",
+ "utc": [
+ "America/Argentina/La_Rioja",
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Salta",
+ "America/Argentina/San_Juan",
+ "America/Argentina/San_Luis",
+ "America/Argentina/Tucuman",
+ "America/Argentina/Ushuaia",
+ "America/Buenos_Aires",
+ "America/Catamarca",
+ "America/Cordoba",
+ "America/Jujuy",
+ "America/Mendoza"
+ ]
+ },
+ {
+ "name": "SA Eastern Standard Time",
+ "abbr": "SEST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Cayenne, Fortaleza",
+ "utc": [
+ "America/Araguaina",
+ "America/Belem",
+ "America/Cayenne",
+ "America/Fortaleza",
+ "America/Maceio",
+ "America/Paramaribo",
+ "America/Recife",
+ "America/Santarem",
+ "Antarctica/Rothera",
+ "Atlantic/Stanley",
+ "Etc/GMT+3"
+ ]
+ },
+ {
+ "name": "Greenland Standard Time",
+ "abbr": "GDT",
+ "offset": -2,
+ "isdst": true,
+ "text": "(UTC-03:00) Greenland",
+ "utc": [
+ "America/Godthab"
+ ]
+ },
+ {
+ "name": "Montevideo Standard Time",
+ "abbr": "MST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Montevideo",
+ "utc": [
+ "America/Montevideo"
+ ]
+ },
+ {
+ "name": "Bahia Standard Time",
+ "abbr": "BST",
+ "offset": -3,
+ "isdst": false,
+ "text": "(UTC-03:00) Salvador",
+ "utc": [
+ "America/Bahia"
+ ]
+ },
+ {
+ "name": "UTC-02",
+ "abbr": "U",
+ "offset": -2,
+ "isdst": false,
+ "text": "(UTC-02:00) Coordinated Universal Time-02",
+ "utc": [
+ "America/Noronha",
+ "Atlantic/South_Georgia",
+ "Etc/GMT+2"
+ ]
+ },
+ {
+ "name": "Mid-Atlantic Standard Time",
+ "abbr": "MDT",
+ "offset": -1,
+ "isdst": true,
+ "text": "(UTC-02:00) Mid-Atlantic - Old"
+ },
+ {
+ "name": "Azores Standard Time",
+ "abbr": "ADT",
+ "offset": 0,
+ "isdst": true,
+ "text": "(UTC-01:00) Azores",
+ "utc": [
+ "America/Scoresbysund",
+ "Atlantic/Azores"
+ ]
+ },
+ {
+ "name": "Cape Verde Standard Time",
+ "abbr": "CVST",
+ "offset": -1,
+ "isdst": false,
+ "text": "(UTC-01:00) Cape Verde Is.",
+ "utc": [
+ "Atlantic/Cape_Verde",
+ "Etc/GMT+1"
+ ]
+ },
+ {
+ "name": "Morocco Standard Time",
+ "abbr": "MDT",
+ "offset": 1,
+ "isdst": true,
+ "text": "(UTC) Casablanca",
+ "utc": [
+ "Africa/Casablanca",
+ "Africa/El_Aaiun"
+ ]
+ },
+ {
+ "name": "UTC",
+ "abbr": "CUT",
+ "offset": 0,
+ "isdst": false,
+ "text": "(UTC) Coordinated Universal Time",
+ "utc": [
+ "America/Danmarkshavn",
+ "Etc/GMT"
+ ]
+ },
+ {
+ "name": "GMT Standard Time",
+ "abbr": "GDT",
+ "offset": 1,
+ "isdst": true,
+ "text": "(UTC) Dublin, Edinburgh, Lisbon, London",
+ "utc": [
+ "Atlantic/Canary",
+ "Atlantic/Faeroe",
+ "Atlantic/Madeira",
+ "Europe/Dublin",
+ "Europe/Guernsey",
+ "Europe/Isle_of_Man",
+ "Europe/Jersey",
+ "Europe/Lisbon",
+ "Europe/London"
+ ]
+ },
+ {
+ "name": "Greenwich Standard Time",
+ "abbr": "GST",
+ "offset": 0,
+ "isdst": false,
+ "text": "(UTC) Monrovia, Reykjavik",
+ "utc": [
+ "Africa/Abidjan",
+ "Africa/Accra",
+ "Africa/Bamako",
+ "Africa/Banjul",
+ "Africa/Bissau",
+ "Africa/Conakry",
+ "Africa/Dakar",
+ "Africa/Freetown",
+ "Africa/Lome",
+ "Africa/Monrovia",
+ "Africa/Nouakchott",
+ "Africa/Ouagadougou",
+ "Africa/Sao_Tome",
+ "Atlantic/Reykjavik",
+ "Atlantic/St_Helena"
+ ]
+ },
+ {
+ "name": "W. Europe Standard Time",
+ "abbr": "WEDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
+ "utc": [
+ "Arctic/Longyearbyen",
+ "Europe/Amsterdam",
+ "Europe/Andorra",
+ "Europe/Berlin",
+ "Europe/Busingen",
+ "Europe/Gibraltar",
+ "Europe/Luxembourg",
+ "Europe/Malta",
+ "Europe/Monaco",
+ "Europe/Oslo",
+ "Europe/Rome",
+ "Europe/San_Marino",
+ "Europe/Stockholm",
+ "Europe/Vaduz",
+ "Europe/Vatican",
+ "Europe/Vienna",
+ "Europe/Zurich"
+ ]
+ },
+ {
+ "name": "Central Europe Standard Time",
+ "abbr": "CEDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
+ "utc": [
+ "Europe/Belgrade",
+ "Europe/Bratislava",
+ "Europe/Budapest",
+ "Europe/Ljubljana",
+ "Europe/Podgorica",
+ "Europe/Prague",
+ "Europe/Tirane"
+ ]
+ },
+ {
+ "name": "Romance Standard Time",
+ "abbr": "RDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
+ "utc": [
+ "Africa/Ceuta",
+ "Europe/Brussels",
+ "Europe/Copenhagen",
+ "Europe/Madrid",
+ "Europe/Paris"
+ ]
+ },
+ {
+ "name": "Central European Standard Time",
+ "abbr": "CEDT",
+ "offset": 2,
+ "isdst": true,
+ "text": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
+ "utc": [
+ "Europe/Sarajevo",
+ "Europe/Skopje",
+ "Europe/Warsaw",
+ "Europe/Zagreb"
+ ]
+ },
+ {
+ "name": "W. Central Africa Standard Time",
+ "abbr": "WCAST",
+ "offset": 1,
+ "isdst": false,
+ "text": "(UTC+01:00) West Central Africa",
+ "utc": [
+ "Africa/Algiers",
+ "Africa/Bangui",
+ "Africa/Brazzaville",
+ "Africa/Douala",
+ "Africa/Kinshasa",
+ "Africa/Lagos",
+ "Africa/Libreville",
+ "Africa/Luanda",
+ "Africa/Malabo",
+ "Africa/Ndjamena",
+ "Africa/Niamey",
+ "Africa/Porto-Novo",
+ "Africa/Tunis",
+ "Etc/GMT-1"
+ ]
+ },
+ {
+ "name": "Namibia Standard Time",
+ "abbr": "NST",
+ "offset": 1,
+ "isdst": false,
+ "text": "(UTC+01:00) Windhoek",
+ "utc": [
+ "Africa/Windhoek"
+ ]
+ },
+ {
+ "name": "GTB Standard Time",
+ "abbr": "GDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Athens, Bucharest",
+ "utc": [
+ "Asia/Nicosia",
+ "Europe/Athens",
+ "Europe/Bucharest",
+ "Europe/Chisinau"
+ ]
+ },
+ {
+ "name": "Middle East Standard Time",
+ "abbr": "MEDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Beirut",
+ "utc": [
+ "Asia/Beirut"
+ ]
+ },
+ {
+ "name": "Egypt Standard Time",
+ "abbr": "EST",
+ "offset": 2,
+ "isdst": false,
+ "text": "(UTC+02:00) Cairo",
+ "utc": [
+ "Africa/Cairo"
+ ]
+ },
+ {
+ "name": "Syria Standard Time",
+ "abbr": "SDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Damascus",
+ "utc": [
+ "Asia/Damascus"
+ ]
+ },
+ {
+ "name": "E. Europe Standard Time",
+ "abbr": "EEDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) E. Europe"
+ },
+ {
+ "name": "South Africa Standard Time",
+ "abbr": "SAST",
+ "offset": 2,
+ "isdst": false,
+ "text": "(UTC+02:00) Harare, Pretoria",
+ "utc": [
+ "Africa/Blantyre",
+ "Africa/Bujumbura",
+ "Africa/Gaborone",
+ "Africa/Harare",
+ "Africa/Johannesburg",
+ "Africa/Kigali",
+ "Africa/Lubumbashi",
+ "Africa/Lusaka",
+ "Africa/Maputo",
+ "Africa/Maseru",
+ "Africa/Mbabane",
+ "Etc/GMT-2"
+ ]
+ },
+ {
+ "name": "FLE Standard Time",
+ "abbr": "FDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
+ "utc": [
+ "Europe/Helsinki",
+ "Europe/Kiev",
+ "Europe/Mariehamn",
+ "Europe/Riga",
+ "Europe/Sofia",
+ "Europe/Tallinn",
+ "Europe/Uzhgorod",
+ "Europe/Vilnius",
+ "Europe/Zaporozhye"
+ ]
+ },
+ {
+ "name": "Turkey Standard Time",
+ "abbr": "TDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Istanbul",
+ "utc": [
+ "Europe/Istanbul"
+ ]
+ },
+ {
+ "name": "Israel Standard Time",
+ "abbr": "JDT",
+ "offset": 3,
+ "isdst": true,
+ "text": "(UTC+02:00) Jerusalem",
+ "utc": [
+ "Asia/Jerusalem"
+ ]
+ },
+ {
+ "name": "Libya Standard Time",
+ "abbr": "LST",
+ "offset": 2,
+ "isdst": false,
+ "text": "(UTC+02:00) Tripoli",
+ "utc": [
+ "Africa/Tripoli"
+ ]
+ },
+ {
+ "name": "Jordan Standard Time",
+ "abbr": "JST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Amman",
+ "utc": [
+ "Asia/Amman"
+ ]
+ },
+ {
+ "name": "Arabic Standard Time",
+ "abbr": "AST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Baghdad",
+ "utc": [
+ "Asia/Baghdad"
+ ]
+ },
+ {
+ "name": "Kaliningrad Standard Time",
+ "abbr": "KST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Kaliningrad, Minsk",
+ "utc": [
+ "Europe/Kaliningrad",
+ "Europe/Minsk"
+ ]
+ },
+ {
+ "name": "Arab Standard Time",
+ "abbr": "AST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Kuwait, Riyadh",
+ "utc": [
+ "Asia/Aden",
+ "Asia/Bahrain",
+ "Asia/Kuwait",
+ "Asia/Qatar",
+ "Asia/Riyadh"
+ ]
+ },
+ {
+ "name": "E. Africa Standard Time",
+ "abbr": "EAST",
+ "offset": 3,
+ "isdst": false,
+ "text": "(UTC+03:00) Nairobi",
+ "utc": [
+ "Africa/Addis_Ababa",
+ "Africa/Asmera",
+ "Africa/Dar_es_Salaam",
+ "Africa/Djibouti",
+ "Africa/Juba",
+ "Africa/Kampala",
+ "Africa/Khartoum",
+ "Africa/Mogadishu",
+ "Africa/Nairobi",
+ "Antarctica/Syowa",
+ "Etc/GMT-3",
+ "Indian/Antananarivo",
+ "Indian/Comoro",
+ "Indian/Mayotte"
+ ]
+ },
+ {
+ "name": "Iran Standard Time",
+ "abbr": "IDT",
+ "offset": 4.5,
+ "isdst": true,
+ "text": "(UTC+03:30) Tehran",
+ "utc": [
+ "Asia/Tehran"
+ ]
+ },
+ {
+ "name": "Arabian Standard Time",
+ "abbr": "AST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Abu Dhabi, Muscat",
+ "utc": [
+ "Asia/Dubai",
+ "Asia/Muscat",
+ "Etc/GMT-4"
+ ]
+ },
+ {
+ "name": "Azerbaijan Standard Time",
+ "abbr": "ADT",
+ "offset": 5,
+ "isdst": true,
+ "text": "(UTC+04:00) Baku",
+ "utc": [
+ "Asia/Baku"
+ ]
+ },
+ {
+ "name": "Russian Standard Time",
+ "abbr": "RST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Moscow, St. Petersburg, Volgograd",
+ "utc": [
+ "Europe/Moscow",
+ "Europe/Samara",
+ "Europe/Simferopol",
+ "Europe/Volgograd"
+ ]
+ },
+ {
+ "name": "Mauritius Standard Time",
+ "abbr": "MST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Port Louis",
+ "utc": [
+ "Indian/Mahe",
+ "Indian/Mauritius",
+ "Indian/Reunion"
+ ]
+ },
+ {
+ "name": "Georgian Standard Time",
+ "abbr": "GST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Tbilisi",
+ "utc": [
+ "Asia/Tbilisi"
+ ]
+ },
+ {
+ "name": "Caucasus Standard Time",
+ "abbr": "CST",
+ "offset": 4,
+ "isdst": false,
+ "text": "(UTC+04:00) Yerevan",
+ "utc": [
+ "Asia/Yerevan"
+ ]
+ },
+ {
+ "name": "Afghanistan Standard Time",
+ "abbr": "AST",
+ "offset": 4.5,
+ "isdst": false,
+ "text": "(UTC+04:30) Kabul",
+ "utc": [
+ "Asia/Kabul"
+ ]
+ },
+ {
+ "name": "West Asia Standard Time",
+ "abbr": "WAST",
+ "offset": 5,
+ "isdst": false,
+ "text": "(UTC+05:00) Ashgabat, Tashkent",
+ "utc": [
+ "Antarctica/Mawson",
+ "Asia/Aqtau",
+ "Asia/Aqtobe",
+ "Asia/Ashgabat",
+ "Asia/Dushanbe",
+ "Asia/Oral",
+ "Asia/Samarkand",
+ "Asia/Tashkent",
+ "Etc/GMT-5",
+ "Indian/Kerguelen",
+ "Indian/Maldives"
+ ]
+ },
+ {
+ "name": "Pakistan Standard Time",
+ "abbr": "PST",
+ "offset": 5,
+ "isdst": false,
+ "text": "(UTC+05:00) Islamabad, Karachi",
+ "utc": [
+ "Asia/Karachi"
+ ]
+ },
+ {
+ "name": "India Standard Time",
+ "abbr": "IST",
+ "offset": 5.5,
+ "isdst": false,
+ "text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
+ "utc": [
+ "Asia/Calcutta"
+ ]
+ },
+ {
+ "name": "Sri Lanka Standard Time",
+ "abbr": "SLST",
+ "offset": 5.5,
+ "isdst": false,
+ "text": "(UTC+05:30) Sri Jayawardenepura",
+ "utc": [
+ "Asia/Colombo"
+ ]
+ },
+ {
+ "name": "Nepal Standard Time",
+ "abbr": "NST",
+ "offset": 5.75,
+ "isdst": false,
+ "text": "(UTC+05:45) Kathmandu",
+ "utc": [
+ "Asia/Katmandu"
+ ]
+ },
+ {
+ "name": "Central Asia Standard Time",
+ "abbr": "CAST",
+ "offset": 6,
+ "isdst": false,
+ "text": "(UTC+06:00) Astana",
+ "utc": [
+ "Antarctica/Vostok",
+ "Asia/Almaty",
+ "Asia/Bishkek",
+ "Asia/Qyzylorda",
+ "Asia/Urumqi",
+ "Etc/GMT-6",
+ "Indian/Chagos"
+ ]
+ },
+ {
+ "name": "Bangladesh Standard Time",
+ "abbr": "BST",
+ "offset": 6,
+ "isdst": false,
+ "text": "(UTC+06:00) Dhaka",
+ "utc": [
+ "Asia/Dhaka",
+ "Asia/Thimphu"
+ ]
+ },
+ {
+ "name": "Ekaterinburg Standard Time",
+ "abbr": "EST",
+ "offset": 6,
+ "isdst": false,
+ "text": "(UTC+06:00) Ekaterinburg",
+ "utc": [
+ "Asia/Yekaterinburg"
+ ]
+ },
+ {
+ "name": "Myanmar Standard Time",
+ "abbr": "MST",
+ "offset": 6.5,
+ "isdst": false,
+ "text": "(UTC+06:30) Yangon (Rangoon)",
+ "utc": [
+ "Asia/Rangoon",
+ "Indian/Cocos"
+ ]
+ },
+ {
+ "name": "SE Asia Standard Time",
+ "abbr": "SAST",
+ "offset": 7,
+ "isdst": false,
+ "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
+ "utc": [
+ "Antarctica/Davis",
+ "Asia/Bangkok",
+ "Asia/Hovd",
+ "Asia/Jakarta",
+ "Asia/Phnom_Penh",
+ "Asia/Pontianak",
+ "Asia/Saigon",
+ "Asia/Vientiane",
+ "Etc/GMT-7",
+ "Indian/Christmas"
+ ]
+ },
+ {
+ "name": "N. Central Asia Standard Time",
+ "abbr": "NCAST",
+ "offset": 7,
+ "isdst": false,
+ "text": "(UTC+07:00) Novosibirsk",
+ "utc": [
+ "Asia/Novokuznetsk",
+ "Asia/Novosibirsk",
+ "Asia/Omsk"
+ ]
+ },
+ {
+ "name": "China Standard Time",
+ "abbr": "CST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
+ "utc": [
+ "Asia/Hong_Kong",
+ "Asia/Macau",
+ "Asia/Shanghai"
+ ]
+ },
+ {
+ "name": "North Asia Standard Time",
+ "abbr": "NAST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Krasnoyarsk",
+ "utc": [
+ "Asia/Krasnoyarsk"
+ ]
+ },
+ {
+ "name": "Singapore Standard Time",
+ "abbr": "MPST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Kuala Lumpur, Singapore",
+ "utc": [
+ "Asia/Brunei",
+ "Asia/Kuala_Lumpur",
+ "Asia/Kuching",
+ "Asia/Makassar",
+ "Asia/Manila",
+ "Asia/Singapore",
+ "Etc/GMT-8"
+ ]
+ },
+ {
+ "name": "W. Australia Standard Time",
+ "abbr": "WAST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Perth",
+ "utc": [
+ "Antarctica/Casey",
+ "Australia/Perth"
+ ]
+ },
+ {
+ "name": "Taipei Standard Time",
+ "abbr": "TST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Taipei",
+ "utc": [
+ "Asia/Taipei"
+ ]
+ },
+ {
+ "name": "Ulaanbaatar Standard Time",
+ "abbr": "UST",
+ "offset": 8,
+ "isdst": false,
+ "text": "(UTC+08:00) Ulaanbaatar",
+ "utc": [
+ "Asia/Choibalsan",
+ "Asia/Ulaanbaatar"
+ ]
+ },
+ {
+ "name": "North Asia East Standard Time",
+ "abbr": "NAEST",
+ "offset": 9,
+ "isdst": false,
+ "text": "(UTC+09:00) Irkutsk",
+ "utc": [
+ "Asia/Irkutsk"
+ ]
+ },
+ {
+ "name": "Tokyo Standard Time",
+ "abbr": "TST",
+ "offset": 9,
+ "isdst": false,
+ "text": "(UTC+09:00) Osaka, Sapporo, Tokyo",
+ "utc": [
+ "Asia/Dili",
+ "Asia/Jayapura",
+ "Asia/Tokyo",
+ "Etc/GMT-9",
+ "Pacific/Palau"
+ ]
+ },
+ {
+ "name": "Korea Standard Time",
+ "abbr": "KST",
+ "offset": 9,
+ "isdst": false,
+ "text": "(UTC+09:00) Seoul",
+ "utc": [
+ "Asia/Pyongyang",
+ "Asia/Seoul"
+ ]
+ },
+ {
+ "name": "Cen. Australia Standard Time",
+ "abbr": "CAST",
+ "offset": 9.5,
+ "isdst": false,
+ "text": "(UTC+09:30) Adelaide",
+ "utc": [
+ "Australia/Adelaide",
+ "Australia/Broken_Hill"
+ ]
+ },
+ {
+ "name": "AUS Central Standard Time",
+ "abbr": "ACST",
+ "offset": 9.5,
+ "isdst": false,
+ "text": "(UTC+09:30) Darwin",
+ "utc": [
+ "Australia/Darwin"
+ ]
+ },
+ {
+ "name": "E. Australia Standard Time",
+ "abbr": "EAST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Brisbane",
+ "utc": [
+ "Australia/Brisbane",
+ "Australia/Lindeman"
+ ]
+ },
+ {
+ "name": "AUS Eastern Standard Time",
+ "abbr": "AEST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
+ "utc": [
+ "Australia/Melbourne",
+ "Australia/Sydney"
+ ]
+ },
+ {
+ "name": "West Pacific Standard Time",
+ "abbr": "WPST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Guam, Port Moresby",
+ "utc": [
+ "Antarctica/DumontDUrville",
+ "Etc/GMT-10",
+ "Pacific/Guam",
+ "Pacific/Port_Moresby",
+ "Pacific/Saipan",
+ "Pacific/Truk"
+ ]
+ },
+ {
+ "name": "Tasmania Standard Time",
+ "abbr": "TST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Hobart",
+ "utc": [
+ "Australia/Currie",
+ "Australia/Hobart"
+ ]
+ },
+ {
+ "name": "Yakutsk Standard Time",
+ "abbr": "YST",
+ "offset": 10,
+ "isdst": false,
+ "text": "(UTC+10:00) Yakutsk",
+ "utc": [
+ "Asia/Chita",
+ "Asia/Khandyga",
+ "Asia/Yakutsk"
+ ]
+ },
+ {
+ "name": "Central Pacific Standard Time",
+ "abbr": "CPST",
+ "offset": 11,
+ "isdst": false,
+ "text": "(UTC+11:00) Solomon Is., New Caledonia",
+ "utc": [
+ "Antarctica/Macquarie",
+ "Etc/GMT-11",
+ "Pacific/Efate",
+ "Pacific/Guadalcanal",
+ "Pacific/Kosrae",
+ "Pacific/Noumea",
+ "Pacific/Ponape"
+ ]
+ },
+ {
+ "name": "Vladivostok Standard Time",
+ "abbr": "VST",
+ "offset": 11,
+ "isdst": false,
+ "text": "(UTC+11:00) Vladivostok",
+ "utc": [
+ "Asia/Sakhalin",
+ "Asia/Ust-Nera",
+ "Asia/Vladivostok"
+ ]
+ },
+ {
+ "name": "New Zealand Standard Time",
+ "abbr": "NZST",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Auckland, Wellington",
+ "utc": [
+ "Antarctica/McMurdo",
+ "Pacific/Auckland"
+ ]
+ },
+ {
+ "name": "UTC+12",
+ "abbr": "U",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Coordinated Universal Time+12",
+ "utc": [
+ "Etc/GMT-12",
+ "Pacific/Funafuti",
+ "Pacific/Kwajalein",
+ "Pacific/Majuro",
+ "Pacific/Nauru",
+ "Pacific/Tarawa",
+ "Pacific/Wake",
+ "Pacific/Wallis"
+ ]
+ },
+ {
+ "name": "Fiji Standard Time",
+ "abbr": "FST",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Fiji",
+ "utc": [
+ "Pacific/Fiji"
+ ]
+ },
+ {
+ "name": "Magadan Standard Time",
+ "abbr": "MST",
+ "offset": 12,
+ "isdst": false,
+ "text": "(UTC+12:00) Magadan",
+ "utc": [
+ "Asia/Anadyr",
+ "Asia/Kamchatka",
+ "Asia/Magadan",
+ "Asia/Srednekolymsk"
+ ]
+ },
+ {
+ "name": "Kamchatka Standard Time",
+ "abbr": "KDT",
+ "offset": 13,
+ "isdst": true,
+ "text": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
+ },
+ {
+ "name": "Tonga Standard Time",
+ "abbr": "TST",
+ "offset": 13,
+ "isdst": false,
+ "text": "(UTC+13:00) Nuku'alofa",
+ "utc": [
+ "Etc/GMT-13",
+ "Pacific/Enderbury",
+ "Pacific/Fakaofo",
+ "Pacific/Tongatapu"
+ ]
+ },
+ {
+ "name": "Samoa Standard Time",
+ "abbr": "SST",
+ "offset": 13,
+ "isdst": false,
+ "text": "(UTC+13:00) Samoa",
+ "utc": [
+ "Pacific/Apia"
+ ]
+ }
+ ],
+ //List source: http://answers.google.com/answers/threadview/id/589312.html
+ profession: [
+ "Airline Pilot",
+ "Academic Team",
+ "Accountant",
+ "Account Executive",
+ "Actor",
+ "Actuary",
+ "Acquisition Analyst",
+ "Administrative Asst.",
+ "Administrative Analyst",
+ "Administrator",
+ "Advertising Director",
+ "Aerospace Engineer",
+ "Agent",
+ "Agricultural Inspector",
+ "Agricultural Scientist",
+ "Air Traffic Controller",
+ "Animal Trainer",
+ "Anthropologist",
+ "Appraiser",
+ "Architect",
+ "Art Director",
+ "Artist",
+ "Astronomer",
+ "Athletic Coach",
+ "Auditor",
+ "Author",
+ "Baker",
+ "Banker",
+ "Bankruptcy Attorney",
+ "Benefits Manager",
+ "Biologist",
+ "Bio-feedback Specialist",
+ "Biomedical Engineer",
+ "Biotechnical Researcher",
+ "Broadcaster",
+ "Broker",
+ "Building Manager",
+ "Building Contractor",
+ "Building Inspector",
+ "Business Analyst",
+ "Business Planner",
+ "Business Manager",
+ "Buyer",
+ "Call Center Manager",
+ "Career Counselor",
+ "Cash Manager",
+ "Ceramic Engineer",
+ "Chief Executive Officer",
+ "Chief Operation Officer",
+ "Chef",
+ "Chemical Engineer",
+ "Chemist",
+ "Child Care Manager",
+ "Chief Medical Officer",
+ "Chiropractor",
+ "Cinematographer",
+ "City Housing Manager",
+ "City Manager",
+ "Civil Engineer",
+ "Claims Manager",
+ "Clinical Research Assistant",
+ "Collections Manager.",
+ "Compliance Manager",
+ "Comptroller",
+ "Computer Manager",
+ "Commercial Artist",
+ "Communications Affairs Director",
+ "Communications Director",
+ "Communications Engineer",
+ "Compensation Analyst",
+ "Computer Programmer",
+ "Computer Ops. Manager",
+ "Computer Engineer",
+ "Computer Operator",
+ "Computer Graphics Specialist",
+ "Construction Engineer",
+ "Construction Manager",
+ "Consultant",
+ "Consumer Relations Manager",
+ "Contract Administrator",
+ "Copyright Attorney",
+ "Copywriter",
+ "Corporate Planner",
+ "Corrections Officer",
+ "Cosmetologist",
+ "Credit Analyst",
+ "Cruise Director",
+ "Chief Information Officer",
+ "Chief Technology Officer",
+ "Customer Service Manager",
+ "Cryptologist",
+ "Dancer",
+ "Data Security Manager",
+ "Database Manager",
+ "Day Care Instructor",
+ "Dentist",
+ "Designer",
+ "Design Engineer",
+ "Desktop Publisher",
+ "Developer",
+ "Development Officer",
+ "Diamond Merchant",
+ "Dietitian",
+ "Direct Marketer",
+ "Director",
+ "Distribution Manager",
+ "Diversity Manager",
+ "Economist",
+ "EEO Compliance Manager",
+ "Editor",
+ "Education Adminator",
+ "Electrical Engineer",
+ "Electro Optical Engineer",
+ "Electronics Engineer",
+ "Embassy Management",
+ "Employment Agent",
+ "Engineer Technician",
+ "Entrepreneur",
+ "Environmental Analyst",
+ "Environmental Attorney",
+ "Environmental Engineer",
+ "Environmental Specialist",
+ "Escrow Officer",
+ "Estimator",
+ "Executive Assistant",
+ "Executive Director",
+ "Executive Recruiter",
+ "Facilities Manager",
+ "Family Counselor",
+ "Fashion Events Manager",
+ "Fashion Merchandiser",
+ "Fast Food Manager",
+ "Film Producer",
+ "Film Production Assistant",
+ "Financial Analyst",
+ "Financial Planner",
+ "Financier",
+ "Fine Artist",
+ "Wildlife Specialist",
+ "Fitness Consultant",
+ "Flight Attendant",
+ "Flight Engineer",
+ "Floral Designer",
+ "Food & Beverage Director",
+ "Food Service Manager",
+ "Forestry Technician",
+ "Franchise Management",
+ "Franchise Sales",
+ "Fraud Investigator",
+ "Freelance Writer",
+ "Fund Raiser",
+ "General Manager",
+ "Geologist",
+ "General Counsel",
+ "Geriatric Specialist",
+ "Gerontologist",
+ "Glamour Photographer",
+ "Golf Club Manager",
+ "Gourmet Chef",
+ "Graphic Designer",
+ "Grounds Keeper",
+ "Hazardous Waste Manager",
+ "Health Care Manager",
+ "Health Therapist",
+ "Health Service Administrator",
+ "Hearing Officer",
+ "Home Economist",
+ "Horticulturist",
+ "Hospital Administrator",
+ "Hotel Manager",
+ "Human Resources Manager",
+ "Importer",
+ "Industrial Designer",
+ "Industrial Engineer",
+ "Information Director",
+ "Inside Sales",
+ "Insurance Adjuster",
+ "Interior Decorator",
+ "Internal Controls Director",
+ "International Acct.",
+ "International Courier",
+ "International Lawyer",
+ "Interpreter",
+ "Investigator",
+ "Investment Banker",
+ "Investment Manager",
+ "IT Architect",
+ "IT Project Manager",
+ "IT Systems Analyst",
+ "Jeweler",
+ "Joint Venture Manager",
+ "Journalist",
+ "Labor Negotiator",
+ "Labor Organizer",
+ "Labor Relations Manager",
+ "Lab Services Director",
+ "Lab Technician",
+ "Land Developer",
+ "Landscape Architect",
+ "Law Enforcement Officer",
+ "Lawyer",
+ "Lead Software Engineer",
+ "Lead Software Test Engineer",
+ "Leasing Manager",
+ "Legal Secretary",
+ "Library Manager",
+ "Litigation Attorney",
+ "Loan Officer",
+ "Lobbyist",
+ "Logistics Manager",
+ "Maintenance Manager",
+ "Management Consultant",
+ "Managed Care Director",
+ "Managing Partner",
+ "Manufacturing Director",
+ "Manpower Planner",
+ "Marine Biologist",
+ "Market Res. Analyst",
+ "Marketing Director",
+ "Materials Manager",
+ "Mathematician",
+ "Membership Chairman",
+ "Mechanic",
+ "Mechanical Engineer",
+ "Media Buyer",
+ "Medical Investor",
+ "Medical Secretary",
+ "Medical Technician",
+ "Mental Health Counselor",
+ "Merchandiser",
+ "Metallurgical Engineering",
+ "Meteorologist",
+ "Microbiologist",
+ "MIS Manager",
+ "Motion Picture Director",
+ "Multimedia Director",
+ "Musician",
+ "Network Administrator",
+ "Network Specialist",
+ "Network Operator",
+ "New Product Manager",
+ "Novelist",
+ "Nuclear Engineer",
+ "Nuclear Specialist",
+ "Nutritionist",
+ "Nursing Administrator",
+ "Occupational Therapist",
+ "Oceanographer",
+ "Office Manager",
+ "Operations Manager",
+ "Operations Research Director",
+ "Optical Technician",
+ "Optometrist",
+ "Organizational Development Manager",
+ "Outplacement Specialist",
+ "Paralegal",
+ "Park Ranger",
+ "Patent Attorney",
+ "Payroll Specialist",
+ "Personnel Specialist",
+ "Petroleum Engineer",
+ "Pharmacist",
+ "Photographer",
+ "Physical Therapist",
+ "Physician",
+ "Physician Assistant",
+ "Physicist",
+ "Planning Director",
+ "Podiatrist",
+ "Political Analyst",
+ "Political Scientist",
+ "Politician",
+ "Portfolio Manager",
+ "Preschool Management",
+ "Preschool Teacher",
+ "Principal",
+ "Private Banker",
+ "Private Investigator",
+ "Probation Officer",
+ "Process Engineer",
+ "Producer",
+ "Product Manager",
+ "Product Engineer",
+ "Production Engineer",
+ "Production Planner",
+ "Professional Athlete",
+ "Professional Coach",
+ "Professor",
+ "Project Engineer",
+ "Project Manager",
+ "Program Manager",
+ "Property Manager",
+ "Public Administrator",
+ "Public Safety Director",
+ "PR Specialist",
+ "Publisher",
+ "Purchasing Agent",
+ "Publishing Director",
+ "Quality Assurance Specialist",
+ "Quality Control Engineer",
+ "Quality Control Inspector",
+ "Radiology Manager",
+ "Railroad Engineer",
+ "Real Estate Broker",
+ "Recreational Director",
+ "Recruiter",
+ "Redevelopment Specialist",
+ "Regulatory Affairs Manager",
+ "Registered Nurse",
+ "Rehabilitation Counselor",
+ "Relocation Manager",
+ "Reporter",
+ "Research Specialist",
+ "Restaurant Manager",
+ "Retail Store Manager",
+ "Risk Analyst",
+ "Safety Engineer",
+ "Sales Engineer",
+ "Sales Trainer",
+ "Sales Promotion Manager",
+ "Sales Representative",
+ "Sales Manager",
+ "Service Manager",
+ "Sanitation Engineer",
+ "Scientific Programmer",
+ "Scientific Writer",
+ "Securities Analyst",
+ "Security Consultant",
+ "Security Director",
+ "Seminar Presenter",
+ "Ship's Officer",
+ "Singer",
+ "Social Director",
+ "Social Program Planner",
+ "Social Research",
+ "Social Scientist",
+ "Social Worker",
+ "Sociologist",
+ "Software Developer",
+ "Software Engineer",
+ "Software Test Engineer",
+ "Soil Scientist",
+ "Special Events Manager",
+ "Special Education Teacher",
+ "Special Projects Director",
+ "Speech Pathologist",
+ "Speech Writer",
+ "Sports Event Manager",
+ "Statistician",
+ "Store Manager",
+ "Strategic Alliance Director",
+ "Strategic Planning Director",
+ "Stress Reduction Specialist",
+ "Stockbroker",
+ "Surveyor",
+ "Structural Engineer",
+ "Superintendent",
+ "Supply Chain Director",
+ "System Engineer",
+ "Systems Analyst",
+ "Systems Programmer",
+ "System Administrator",
+ "Tax Specialist",
+ "Teacher",
+ "Technical Support Specialist",
+ "Technical Illustrator",
+ "Technical Writer",
+ "Technology Director",
+ "Telecom Analyst",
+ "Telemarketer",
+ "Theatrical Director",
+ "Title Examiner",
+ "Tour Escort",
+ "Tour Guide Director",
+ "Traffic Manager",
+ "Trainer Translator",
+ "Transportation Manager",
+ "Travel Agent",
+ "Treasurer",
+ "TV Programmer",
+ "Underwriter",
+ "Union Representative",
+ "University Administrator",
+ "University Dean",
+ "Urban Planner",
+ "Veterinarian",
+ "Vendor Relations Director",
+ "Viticulturist",
+ "Warehouse Manager"
+ ],
+ animals : {
+ //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals
+ "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"],
+ //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/
+ "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"],
+ "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"],
+ "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"],
+ //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html
+ "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"],
+ //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm
+ "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"],
+ //list of zoo animals comes from https://bronxzoo.com/animals
+ "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"]
+ },
+ emotions: [
+ "love",
+ "Joy",
+ "Surprise",
+ "Anger",
+ "Sadness",
+ "Fear"
+ ],
+ };
+
+ var o_hasOwnProperty = Object.prototype.hasOwnProperty;
+ var o_keys = (Object.keys || function(obj) {
+ var result = [];
+ for (var key in obj) {
+ if (o_hasOwnProperty.call(obj, key)) {
+ result.push(key);
+ }
+ }
+
+ return result;
+ });
+
+
+ function _copyObject(source, target) {
+ var keys = o_keys(source);
+ var key;
+
+ for (var i = 0, l = keys.length; i < l; i++) {
+ key = keys[i];
+ target[key] = source[key] || target[key];
+ }
+ }
+
+ function _copyArray(source, target) {
+ for (var i = 0, l = source.length; i < l; i++) {
+ target[i] = source[i];
+ }
+ }
+
+ function copyObject(source, _target) {
+ var isArray = Array.isArray(source);
+ var target = _target || (isArray ? new Array(source.length) : {});
+
+ if (isArray) {
+ _copyArray(source, target);
+ } else {
+ _copyObject(source, target);
+ }
+
+ return target;
+ }
+
+ /** Get the data based on key**/
+ Chance.prototype.get = function (name) {
+ return copyObject(data[name]);
+ };
+
+ // Mac Address
+ Chance.prototype.mac_address = function(options){
+ // typically mac addresses are separated by ":"
+ // however they can also be separated by "-"
+ // the network variant uses a dot every fourth byte
+
+ options = initOptions(options);
+ if(!options.separator) {
+ options.separator = options.networkVersion ? "." : ":";
+ }
+
+ var mac_pool="ABCDEF1234567890",
+ mac = "";
+ if(!options.networkVersion) {
+ mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);
+ } else {
+ mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);
+ }
+
+ return mac;
+ };
+
+ Chance.prototype.normal = function (options) {
+ options = initOptions(options, {mean : 0, dev : 1, pool : []});
+
+ testRange(
+ options.pool.constructor !== Array,
+ "Chance: The pool option must be a valid array."
+ );
+ testRange(
+ typeof options.mean !== 'number',
+ "Chance: Mean (mean) must be a number"
+ );
+ testRange(
+ typeof options.dev !== 'number',
+ "Chance: Standard deviation (dev) must be a number"
+ );
+
+ // If a pool has been passed, then we are returning an item from that pool,
+ // using the normal distribution settings that were passed in
+ if (options.pool.length > 0) {
+ return this.normal_pool(options);
+ }
+
+ // The Marsaglia Polar method
+ var s, u, v, norm,
+ mean = options.mean,
+ dev = options.dev;
+
+ do {
+ // U and V are from the uniform distribution on (-1, 1)
+ u = this.random() * 2 - 1;
+ v = this.random() * 2 - 1;
+
+ s = u * u + v * v;
+ } while (s >= 1);
+
+ // Compute the standard normal variate
+ norm = u * Math.sqrt(-2 * Math.log(s) / s);
+
+ // Shape and scale
+ return dev * norm + mean;
+ };
+
+ Chance.prototype.normal_pool = function(options) {
+ var performanceCounter = 0;
+ do {
+ var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));
+ if (idx < options.pool.length && idx >= 0) {
+ return options.pool[idx];
+ } else {
+ performanceCounter++;
+ }
+ } while(performanceCounter < 100);
+
+ throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.");
+ };
+
+ Chance.prototype.radio = function (options) {
+ // Initial Letter (Typically Designated by Side of Mississippi River)
+ options = initOptions(options, {side : "?"});
+ var fl = "";
+ switch (options.side.toLowerCase()) {
+ case "east":
+ case "e":
+ fl = "W";
+ break;
+ case "west":
+ case "w":
+ fl = "K";
+ break;
+ default:
+ fl = this.character({pool: "KW"});
+ break;
+ }
+
+ return fl + this.character({alpha: true, casing: "upper"}) +
+ this.character({alpha: true, casing: "upper"}) +
+ this.character({alpha: true, casing: "upper"});
+ };
+
+ // Set the data as key and data or the data map
+ Chance.prototype.set = function (name, values) {
+ if (typeof name === "string") {
+ data[name] = values;
+ } else {
+ data = copyObject(name, data);
+ }
+ };
+
+ Chance.prototype.tv = function (options) {
+ return this.radio(options);
+ };
+
+ // ID number for Brazil companies
+ Chance.prototype.cnpj = function () {
+ var n = this.n(this.natural, 8, { max: 9 });
+ 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;
+ d1 = 11 - (d1 % 11);
+ if (d1>=10){
+ d1 = 0;
+ }
+ 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;
+ d2 = 11 - (d2 % 11);
+ if (d2>=10){
+ d2 = 0;
+ }
+ return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;
+ };
+
+ Chance.prototype.emotion = function () {
+ return this.pick(this.get("emotions"));
+ };
+
+ // -- End Miscellaneous --
+
+ Chance.prototype.mersenne_twister = function (seed) {
+ return new MersenneTwister(seed);
+ };
+
+ Chance.prototype.blueimp_md5 = function () {
+ return new BlueImpMD5();
+ };
+
+ // Mersenne Twister from https://gist.github.com/banksean/300494
+ /*
+ A C-program for MT19937, with initialization improved 2002/1/26.
+ Coded by Takuji Nishimura and Makoto Matsumoto.
+
+ Before using, initialize the state by using init_genrand(seed)
+ or init_by_array(init_key, key_length).
+
+ Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. The names of its contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ Any feedback is very welcome.
+ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+ email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
+ */
+ var MersenneTwister = function (seed) {
+ if (seed === undefined) {
+ // kept random number same size as time used previously to ensure no unexpected results downstream
+ seed = Math.floor(Math.random()*Math.pow(10,13));
+ }
+ /* Period parameters */
+ this.N = 624;
+ this.M = 397;
+ this.MATRIX_A = 0x9908b0df; /* constant vector a */
+ this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
+ this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
+
+ this.mt = new Array(this.N); /* the array for the state vector */
+ this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */
+
+ this.init_genrand(seed);
+ };
+
+ /* initializes mt[N] with a seed */
+ MersenneTwister.prototype.init_genrand = function (s) {
+ this.mt[0] = s >>> 0;
+ for (this.mti = 1; this.mti < this.N; this.mti++) {
+ s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);
+ this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;
+ /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
+ /* In the previous versions, MSBs of the seed affect */
+ /* only MSBs of the array mt[]. */
+ /* 2002/01/09 modified by Makoto Matsumoto */
+ this.mt[this.mti] >>>= 0;
+ /* for >32 bit machines */
+ }
+ };
+
+ /* initialize by an array with array-length */
+ /* init_key is the array for initializing keys */
+ /* key_length is its length */
+ /* slight change for C++, 2004/2/26 */
+ MersenneTwister.prototype.init_by_array = function (init_key, key_length) {
+ var i = 1, j = 0, k, s;
+ this.init_genrand(19650218);
+ k = (this.N > key_length ? this.N : key_length);
+ for (; k; k--) {
+ s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
+ this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */
+ this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
+ i++;
+ j++;
+ if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
+ if (j >= key_length) { j = 0; }
+ }
+ for (k = this.N - 1; k; k--) {
+ s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
+ this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */
+ this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
+ i++;
+ if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
+ }
+
+ this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
+ };
+
+ /* generates a random number on [0,0xffffffff]-interval */
+ MersenneTwister.prototype.genrand_int32 = function () {
+ var y;
+ var mag01 = new Array(0x0, this.MATRIX_A);
+ /* mag01[x] = x * MATRIX_A for x=0,1 */
+
+ if (this.mti >= this.N) { /* generate N words at one time */
+ var kk;
+
+ if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */
+ this.init_genrand(5489); /* a default initial seed is used */
+ }
+ for (kk = 0; kk < this.N - this.M; kk++) {
+ y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
+ this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
+ }
+ for (;kk < this.N - 1; kk++) {
+ y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
+ this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
+ }
+ y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
+ this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
+
+ this.mti = 0;
+ }
+
+ y = this.mt[this.mti++];
+
+ /* Tempering */
+ y ^= (y >>> 11);
+ y ^= (y << 7) & 0x9d2c5680;
+ y ^= (y << 15) & 0xefc60000;
+ y ^= (y >>> 18);
+
+ return y >>> 0;
+ };
+
+ /* generates a random number on [0,0x7fffffff]-interval */
+ MersenneTwister.prototype.genrand_int31 = function () {
+ return (this.genrand_int32() >>> 1);
+ };
+
+ /* generates a random number on [0,1]-real-interval */
+ MersenneTwister.prototype.genrand_real1 = function () {
+ return this.genrand_int32() * (1.0 / 4294967295.0);
+ /* divided by 2^32-1 */
+ };
+
+ /* generates a random number on [0,1)-real-interval */
+ MersenneTwister.prototype.random = function () {
+ return this.genrand_int32() * (1.0 / 4294967296.0);
+ /* divided by 2^32 */
+ };
+
+ /* generates a random number on (0,1)-real-interval */
+ MersenneTwister.prototype.genrand_real3 = function () {
+ return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
+ /* divided by 2^32 */
+ };
+
+ /* generates a random number on [0,1) with 53-bit resolution*/
+ MersenneTwister.prototype.genrand_res53 = function () {
+ var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;
+ return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
+ };
+
+ // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5
+ var BlueImpMD5 = function () {};
+
+ BlueImpMD5.prototype.VERSION = '1.0.1';
+
+ /*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+ BlueImpMD5.prototype.safe_add = function safe_add(x, y) {
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF),
+ msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+ };
+
+ /*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+ BlueImpMD5.prototype.bit_roll = function (num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+ };
+
+ /*
+ * These functions implement the five basic operations the algorithm uses.
+ */
+ BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {
+ return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);
+ };
+ BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+ };
+ BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+ };
+ BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);
+ };
+ BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {
+ return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+ };
+
+ /*
+ * Calculate the MD5 of an array of little-endian words, and a bit length.
+ */
+ BlueImpMD5.prototype.binl_md5 = function (x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var i, olda, oldb, oldc, oldd,
+ a = 1732584193,
+ b = -271733879,
+ c = -1732584194,
+ d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);
+ d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);
+ a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);
+ c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);
+ d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = this.safe_add(a, olda);
+ b = this.safe_add(b, oldb);
+ c = this.safe_add(c, oldc);
+ d = this.safe_add(d, oldd);
+ }
+ return [a, b, c, d];
+ };
+
+ /*
+ * Convert an array of little-endian words to a string
+ */
+ BlueImpMD5.prototype.binl2rstr = function (input) {
+ var i,
+ output = '';
+ for (i = 0; i < input.length * 32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
+ }
+ return output;
+ };
+
+ /*
+ * Convert a raw string to an array of little-endian words
+ * Characters >255 have their high-byte silently ignored.
+ */
+ BlueImpMD5.prototype.rstr2binl = function (input) {
+ var i,
+ output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ for (i = 0; i < input.length * 8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
+ }
+ return output;
+ };
+
+ /*
+ * Calculate the MD5 of a raw string
+ */
+ BlueImpMD5.prototype.rstr_md5 = function (s) {
+ return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));
+ };
+
+ /*
+ * Calculate the HMAC-MD5, of a key and some data (raw strings)
+ */
+ BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {
+ var i,
+ bkey = this.rstr2binl(key),
+ ipad = [],
+ opad = [],
+ hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = this.binl_md5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+ hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
+ return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));
+ };
+
+ /*
+ * Convert a raw string to a hex string
+ */
+ BlueImpMD5.prototype.rstr2hex = function (input) {
+ var hex_tab = '0123456789abcdef',
+ output = '',
+ x,
+ i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hex_tab.charAt((x >>> 4) & 0x0F) +
+ hex_tab.charAt(x & 0x0F);
+ }
+ return output;
+ };
+
+ /*
+ * Encode a string as utf-8
+ */
+ BlueImpMD5.prototype.str2rstr_utf8 = function (input) {
+ return unescape(encodeURIComponent(input));
+ };
+
+ /*
+ * Take string arguments and return either raw or hex encoded strings
+ */
+ BlueImpMD5.prototype.raw_md5 = function (s) {
+ return this.rstr_md5(this.str2rstr_utf8(s));
+ };
+ BlueImpMD5.prototype.hex_md5 = function (s) {
+ return this.rstr2hex(this.raw_md5(s));
+ };
+ BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {
+ return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));
+ };
+ BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {
+ return this.rstr2hex(this.raw_hmac_md5(k, d));
+ };
+
+ BlueImpMD5.prototype.md5 = function (string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return this.hex_md5(string);
+ }
+
+ return this.raw_md5(string);
+ }
+
+ if (!raw) {
+ return this.hex_hmac_md5(key, string);
+ }
+
+ return this.raw_hmac_md5(key, string);
+ };
+
+ // CommonJS module
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = Chance;
+ }
+ exports.Chance = Chance;
+ }
+
+ // Register as an anonymous AMD module
+ if (typeof define === 'function' && define.amd) {
+ define([], function () {
+ return Chance;
+ });
+ }
+
+ // if there is a importsScrips object define chance for worker
+ // allows worker to use full Chance functionality with seed
+ if (typeof importScripts !== 'undefined') {
+ chance = new Chance();
+ self.Chance = Chance;
+ }
+
+ // If there is a window object, that at least has a document property,
+ // instantiate and define chance on the window
+ if (typeof window === "object" && typeof window.document === "object") {
+ window.Chance = Chance;
+ window.chance = new Chance();
+ }
+})();
diff --git a/src/node_modules/chance/docs/chance.min.js b/src/node_modules/chance/docs/chance.min.js
new file mode 100644
index 0000000..72aa5f8
--- /dev/null
+++ b/src/node_modules/chance/docs/chance.min.js
@@ -0,0 +1,5 @@
+!function(){function a(b){if(!(this instanceof a))return null==b?new a:new a(b);if("function"==typeof b)return this.random=b,this;arguments.length&&(this.seed=0);for(var c=0;c<arguments.length;c++){var d=0;if("[object String]"===Object.prototype.toString.call(arguments[c]))for(var e=0;e<arguments[c].length;e++){for(var f=0,g=0;g<arguments[c].length;g++)f=arguments[c].charCodeAt(g)+(f<<6)+(f<<16)-f;d+=f}else d=arguments[c];this.seed+=(arguments.length-c)*d}return this.mt=this.mersenne_twister(this.seed),this.bimd5=this.blueimp_md5(),this.random=function(){return this.mt.random(this.seed)},this}function b(a,b){if(a||(a={}),b)for(var c in b)"undefined"==typeof a[c]&&(a[c]=b[c]);return a}function c(a,b){if(a)throw new RangeError(b)}function d(a){return function(){return this.natural(a)}}function e(a,b){for(var c,d=r(a),e=0,f=d.length;f>e;e++)c=d[e],b[c]=a[c]||b[c]}function f(a,b){for(var c=0,d=a.length;d>c;c++)b[c]=a[c]}function g(a,b){var c=Array.isArray(a),d=b||(c?new Array(a.length):{});return c?f(a,d):e(a,d),d}var h=9007199254740992,i=-h,j="0123456789",k="abcdefghijklmnopqrstuvwxyz",l=k.toUpperCase(),m=j+"abcdef",n=Array.prototype.slice;a.prototype.VERSION="1.0.4";var o=function(){throw new Error("No Base64 encoder available.")};!function(){"function"==typeof btoa?o=btoa:"function"==typeof Buffer&&(o=function(a){return new Buffer(a).toString("base64")})}(),a.prototype.bool=function(a){return a=b(a,{likelihood:50}),c(a.likelihood<0||a.likelihood>100,"Chance: Likelihood accepts values from 0 to 100."),100*this.random()<a.likelihood},a.prototype.character=function(a){a=b(a),c(a.alpha&&a.symbols,"Chance: Cannot specify both alpha and symbols.");var d,e,f="!@#$%^&*()[]";return d="lower"===a.casing?k:"upper"===a.casing?l:k+l,e=a.pool?a.pool:a.alpha?d:a.symbols?f:d+j+f,e.charAt(this.natural({max:e.length-1}))},a.prototype.floating=function(a){a=b(a,{fixed:4}),c(a.fixed&&a.precision,"Chance: Cannot specify both fixed and precision.");var d,e=Math.pow(10,a.fixed),f=h/e,g=-f;c(a.min&&a.fixed&&a.min<g,"Chance: Min specified is out of range with fixed. Min should be, at least, "+g),c(a.max&&a.fixed&&a.max>f,"Chance: Max specified is out of range with fixed. Max should be, at most, "+f),a=b(a,{min:g,max:f}),d=this.integer({min:a.min*e,max:a.max*e});var i=(d/e).toFixed(a.fixed);return parseFloat(i)},a.prototype.integer=function(a){return a=b(a,{min:i,max:h}),c(a.min>a.max,"Chance: Min cannot be greater than Max."),Math.floor(this.random()*(a.max-a.min+1)+a.min)},a.prototype.natural=function(a){return a=b(a,{min:0,max:h}),c(a.min<0,"Chance: Min cannot be less than zero."),this.integer(a)},a.prototype.string=function(a){a=b(a,{length:this.natural({min:5,max:20})}),c(a.length<0,"Chance: Length cannot be less than zero.");var d=a.length,e=this.n(this.character,d,a);return e.join("")},a.prototype.capitalize=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},a.prototype.mixin=function(b){for(var c in b)a.prototype[c]=b[c];return this},a.prototype.unique=function(a,b,d){c("function"!=typeof a,"Chance: The first argument must be a function.");var e=function(a,b){return-1!==a.indexOf(b)};d&&(e=d.comparator||e);for(var f,g=[],h=0,i=50*b,j=n.call(arguments,2);g.length<b;){var k=JSON.parse(JSON.stringify(j));if(f=a.apply(this,k),e(g,f)||(g.push(f),h=0),++h>i)throw new RangeError("Chance: num is likely too large for sample set")}return g},a.prototype.n=function(a,b){c("function"!=typeof a,"Chance: The first argument must be a function."),"undefined"==typeof b&&(b=1);var d=b,e=[],f=n.call(arguments,2);for(d=Math.max(0,d),null;d--;null)e.push(a.apply(this,f));return e},a.prototype.pad=function(a,b,c){return c=c||"0",a+="",a.length>=b?a:new Array(b-a.length+1).join(c)+a},a.prototype.pick=function(a,b){if(0===a.length)throw new RangeError("Chance: Cannot pick() from an empty array");return b&&1!==b?this.shuffle(a).slice(0,b):a[this.natural({max:a.length-1})]},a.prototype.pickone=function(a){if(0===a.length)throw new RangeError("Chance: Cannot pickone() from an empty array");return a[this.natural({max:a.length-1})]},a.prototype.pickset=function(a,b){if(0===b)return[];if(0===a.length)throw new RangeError("Chance: Cannot pickset() from an empty array");if(0>b)throw new RangeError("Chance: count must be positive number");return b&&1!==b?this.shuffle(a).slice(0,b):[this.pickone(a)]},a.prototype.shuffle=function(a){for(var b=a.slice(0),c=[],d=0,e=Number(b.length),f=0;e>f;f++)d=this.natural({max:b.length-1}),c[f]=b[d],b.splice(d,1);return c},a.prototype.weighted=function(a,b,c){if(a.length!==b.length)throw new RangeError("Chance: length of array and weights must match");for(var d,e=0,f=0;f<b.length;++f)d=b[f],d>0&&(e+=d);if(0===e)throw new RangeError("Chance: no valid entries in array weights");var g,h=this.random()*e,i=0,j=-1;for(f=0;f<b.length;++f){if(d=b[f],i+=d,d>0){if(i>=h){g=f;break}j=f}f===b.length-1&&(g=j)}var k=a[g];return c="undefined"==typeof c?!1:c,c&&(a.splice(g,1),b.splice(g,1)),k},a.prototype.paragraph=function(a){a=b(a);var c=a.sentences||this.natural({min:3,max:7}),d=this.n(this.sentence,c);return d.join(" ")},a.prototype.sentence=function(a){a=b(a);var c,d=a.words||this.natural({min:12,max:18}),e=a.punctuation,f=this.n(this.word,d);return c=f.join(" "),c=this.capitalize(c),e===!1||/^[\.\?;!:]$/.test(e)||(e="."),e&&(c+=e),c},a.prototype.syllable=function(a){a=b(a);for(var c,d=a.length||this.natural({min:2,max:3}),e="bcdfghjklmnprstvwz",f="aeiou",g=e+f,h="",i=0;d>i;i++)c=0===i?this.character({pool:g}):-1===e.indexOf(c)?this.character({pool:e}):this.character({pool:f}),h+=c;return a.capitalize&&(h=this.capitalize(h)),h},a.prototype.word=function(a){a=b(a),c(a.syllables&&a.length,"Chance: Cannot specify both syllables AND length.");var d=a.syllables||this.natural({min:1,max:3}),e="";if(a.length){do e+=this.syllable();while(e.length<a.length);e=e.substring(0,a.length)}else for(var f=0;d>f;f++)e+=this.syllable();return a.capitalize&&(e=this.capitalize(e)),e},a.prototype.age=function(a){a=b(a);var c;switch(a.type){case"child":c={min:0,max:12};break;case"teen":c={min:13,max:19};break;case"adult":c={min:18,max:65};break;case"senior":c={min:65,max:100};break;case"all":c={min:0,max:100};break;default:c={min:18,max:65}}return this.natural(c)},a.prototype.birthday=function(a){var c=this.age(a),d=(new Date).getFullYear();if(a&&a.type){var e=new Date,f=new Date;e.setFullYear(d-c-1),f.setFullYear(d-c),a=b(a,{min:e,max:f})}else a=b(a,{year:d-c});return this.date(a)},a.prototype.cpf=function(a){a=b(a,{formatted:!0});var c=this.n(this.natural,9,{max:9}),d=2*c[8]+3*c[7]+4*c[6]+5*c[5]+6*c[4]+7*c[3]+8*c[2]+9*c[1]+10*c[0];d=11-d%11,d>=10&&(d=0);var e=2*d+3*c[8]+4*c[7]+5*c[6]+6*c[5]+7*c[4]+8*c[3]+9*c[2]+10*c[1]+11*c[0];e=11-e%11,e>=10&&(e=0);var f=""+c[0]+c[1]+c[2]+"."+c[3]+c[4]+c[5]+"."+c[6]+c[7]+c[8]+"-"+d+e;return a.formatted?f:f.replace(/\D/g,"")},a.prototype.cnpj=function(a){a=b(a,{formatted:!0});var c=this.n(this.natural,12,{max:12}),d=2*c[11]+3*c[10]+4*c[9]+5*c[8]+6*c[7]+7*c[6]+8*c[5]+9*c[4]+2*c[3]+3*c[2]+4*c[1]+5*c[0];d=11-d%11,2>d&&(d=0);var e=2*d+3*c[11]+4*c[10]+5*c[9]+6*c[8]+7*c[7]+8*c[6]+9*c[5]+2*c[4]+3*c[3]+4*c[2]+5*c[1]+6*c[0];e=11-e%11,2>e&&(e=0);var f=""+c[0]+c[1]+"."+c[2]+c[3]+c[4]+"."+c[5]+c[6]+c[7]+"/"+c[8]+c[9]+c[10]+c[11]+"-"+d+e;return a.formatted?f:f.replace(/\D/g,"")},a.prototype.first=function(a){return a=b(a,{gender:this.gender(),nationality:"en"}),this.pick(this.get("firstNames")[a.gender.toLowerCase()][a.nationality.toLowerCase()])},a.prototype.gender=function(a){return a=b(a,{extraGenders:[]}),this.pick(["Male","Female"].concat(a.extraGenders))},a.prototype.last=function(a){return a=b(a,{nationality:"en"}),this.pick(this.get("lastNames")[a.nationality.toLowerCase()])},a.prototype.israelId=function(){for(var a=this.string({pool:"0123456789",length:8}),b=0,c=0;c<a.length;c++){var d=a[c]*(c/2===parseInt(c/2)?1:2);d=this.pad(d,2).toString(),d=parseInt(d[0])+parseInt(d[1]),b+=d}return a+=(10-parseInt(b.toString().slice(-1))).toString().slice(-1)},a.prototype.mrz=function(a){var c=function(a){var b="<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(""),c=[7,3,1],d=0;return"string"!=typeof a&&(a=a.toString()),a.split("").forEach(function(a,e){var f=b.indexOf(a);a=-1!==f?0===f?0:f+9:parseInt(a,10),a*=c[e%c.length],d+=a}),d%10},d=function(a){var b=function(a){return new Array(a+1).join("<")},d=["P<",a.issuer,a.last.toUpperCase(),"<<",a.first.toUpperCase(),b(39-(a.last.length+a.first.length+2)),a.passportNumber,c(a.passportNumber),a.nationality,a.dob,c(a.dob),a.gender,a.expiry,c(a.expiry),b(14),c(b(14))].join("");return d+c(d.substr(44,10)+d.substr(57,7)+d.substr(65,7))},e=this;return a=b(a,{first:this.first(),last:this.last(),passportNumber:this.integer({min:1e8,max:999999999}),dob:function(){var a=e.birthday({type:"adult"});return[a.getFullYear().toString().substr(2),e.pad(a.getMonth()+1,2),e.pad(a.getDate(),2)].join("")}(),expiry:function(){var a=new Date;return[(a.getFullYear()+5).toString().substr(2),e.pad(a.getMonth()+1,2),e.pad(a.getDate(),2)].join("")}(),gender:"Female"===this.gender()?"F":"M",issuer:"GBR",nationality:"GBR"}),d(a)},a.prototype.name=function(a){a=b(a);var c,d=this.first(a),e=this.last(a);return c=a.middle?d+" "+this.first(a)+" "+e:a.middle_initial?d+" "+this.character({alpha:!0,casing:"upper"})+". "+e:d+" "+e,a.prefix&&(c=this.prefix(a)+" "+c),a.suffix&&(c=c+" "+this.suffix(a)),c},a.prototype.name_prefixes=function(a){a=a||"all",a=a.toLowerCase();var b=[{name:"Doctor",abbreviation:"Dr."}];return("male"===a||"all"===a)&&b.push({name:"Mister",abbreviation:"Mr."}),("female"===a||"all"===a)&&(b.push({name:"Miss",abbreviation:"Miss"}),b.push({name:"Misses",abbreviation:"Mrs."})),b},a.prototype.prefix=function(a){return this.name_prefix(a)},a.prototype.name_prefix=function(a){return a=b(a,{gender:"all"}),a.full?this.pick(this.name_prefixes(a.gender)).name:this.pick(this.name_prefixes(a.gender)).abbreviation},a.prototype.HIDN=function(){var a="0123456789",b="ABCDEFGHIJKLMNOPQRSTUVWXYXZ",c="";return c+=this.string({pool:a,length:6}),c+=this.string({pool:b,length:2})},a.prototype.ssn=function(a){a=b(a,{ssnFour:!1,dashes:!0});var c,d="1234567890",e=a.dashes?"-":"";return c=a.ssnFour?this.string({pool:d,length:4}):this.string({pool:d,length:3})+e+this.string({pool:d,length:2})+e+this.string({pool:d,length:4})},a.prototype.name_suffixes=function(){var a=[{name:"Doctor of Osteopathic Medicine",abbreviation:"D.O."},{name:"Doctor of Philosophy",abbreviation:"Ph.D."},{name:"Esquire",abbreviation:"Esq."},{name:"Junior",abbreviation:"Jr."},{name:"Juris Doctor",abbreviation:"J.D."},{name:"Master of Arts",abbreviation:"M.A."},{name:"Master of Business Administration",abbreviation:"M.B.A."},{name:"Master of Science",abbreviation:"M.S."},{name:"Medical Doctor",abbreviation:"M.D."},{name:"Senior",abbreviation:"Sr."},{name:"The Third",abbreviation:"III"},{name:"The Fourth",abbreviation:"IV"},{name:"Bachelor of Engineering",abbreviation:"B.E"},{name:"Bachelor of Technology",abbreviation:"B.TECH"}];return a},a.prototype.suffix=function(a){return this.name_suffix(a)},a.prototype.name_suffix=function(a){return a=b(a),a.full?this.pick(this.name_suffixes()).name:this.pick(this.name_suffixes()).abbreviation},a.prototype.nationalities=function(){return this.get("nationalities")},a.prototype.nationality=function(){var a=this.pick(this.nationalities());return a.name},a.prototype.android_id=function(){return"APA91"+this.string({pool:"0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_",length:178})},a.prototype.apple_token=function(){return this.string({pool:"abcdef1234567890",length:64})},a.prototype.wp8_anid2=function(){return o(this.hash({length:32}))},a.prototype.wp7_anid=function(){return"A="+this.guid().replace(/-/g,"").toUpperCase()+"&E="+this.hash({length:3})+"&W="+this.integer({min:0,max:9})},a.prototype.bb_pin=function(){return this.hash({length:8})},a.prototype.avatar=function(a){var c=null,d="//www.gravatar.com/avatar/",e={http:"http",https:"https"},f={bmp:"bmp",gif:"gif",jpg:"jpg",png:"png"},g={404:"404",mm:"mm",identicon:"identicon",monsterid:"monsterid",wavatar:"wavatar",retro:"retro",blank:"blank"},h={g:"g",pg:"pg",r:"r",x:"x"},i={protocol:null,email:null,fileExtension:null,size:null,fallback:null,rating:null};if(a)if("string"==typeof a)i.email=a,a={};else{if("object"!=typeof a)return null;if("Array"===a.constructor)return null}else i.email=this.email(),a={};return i=b(a,i),i.email||(i.email=this.email()),i.protocol=e[i.protocol]?i.protocol+":":"",i.size=parseInt(i.size,0)?i.size:"",i.rating=h[i.rating]?i.rating:"",i.fallback=g[i.fallback]?i.fallback:"",i.fileExtension=f[i.fileExtension]?i.fileExtension:"",c=i.protocol+d+this.bimd5.md5(i.email)+(i.fileExtension?"."+i.fileExtension:"")+(i.size||i.rating||i.fallback?"?":"")+(i.size?"&s="+i.size.toString():"")+(i.rating?"&r="+i.rating:"")+(i.fallback?"&d="+i.fallback:"")},a.prototype.color=function(a){function c(a,b){return[a,a,a].join(b||"")}function d(a){var b=a?"rgba":"rgb",d=a?","+this.floating({min:0,max:1}):"",e=g?c(this.natural({max:255}),","):this.natural({max:255})+","+this.natural({max:255})+","+this.natural({max:255});return b+"("+e+d+")"}function e(a,b,d){var e=d?"#":"",f=g?c(this.hash({length:a})):this.hash({length:b});return e+f}a=b(a,{format:this.pick(["hex","shorthex","rgb","rgba","0x","name"]),grayscale:!1,casing:"lower"});var f,g=a.grayscale;if("hex"===a.format)f=e.call(this,2,6,!0);else if("shorthex"===a.format)f=e.call(this,1,3,!0);else if("rgb"===a.format)f=d.call(this,!1);else if("rgba"===a.format)f=d.call(this,!0);else{if("0x"!==a.format){if("name"===a.format)return this.pick(this.get("colorNames"));throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".')}f="0x"+e.call(this,2,6)}return"upper"===a.casing&&(f=f.toUpperCase()),f},a.prototype.domain=function(a){return a=b(a),this.word()+"."+(a.tld||this.tld())},a.prototype.email=function(a){return a=b(a),this.word({length:a.length})+"@"+(a.domain||this.domain())},a.prototype.fbid=function(){return parseInt("10000"+this.natural({max:1e11}),10)},a.prototype.google_analytics=function(){var a=this.pad(this.natural({max:999999}),6),b=this.pad(this.natural({max:99}),2);return"UA-"+a+"-"+b},a.prototype.hashtag=function(){return"#"+this.word()},a.prototype.ip=function(){return this.natural({min:1,max:254})+"."+this.natural({max:255})+"."+this.natural({max:255})+"."+this.natural({min:1,max:254})},a.prototype.ipv6=function(){var a=this.n(this.hash,8,{length:4});return a.join(":")},a.prototype.klout=function(){return this.natural({min:1,max:99})},a.prototype.semver=function(a){a=b(a,{include_prerelease:!0});var c=this.pickone(["^","~","<",">","<=",">=","="]);a.range&&(c=a.range);var d="";return a.include_prerelease&&(d=this.weighted(["","-dev","-beta","-alpha"],[50,10,5,1])),c+this.rpg("3d10").join(".")+d},a.prototype.tlds=function(){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"]},a.prototype.tld=function(){return this.pick(this.tlds())},a.prototype.twitter=function(){return"@"+this.word()},a.prototype.url=function(a){a=b(a,{protocol:"http",domain:this.domain(a),domain_prefix:"",path:this.word(),extensions:[]});var c=a.extensions.length>0?"."+this.pick(a.extensions):"",d=a.domain_prefix?a.domain_prefix+"."+a.domain:a.domain;return a.protocol+"://"+d+"/"+a.path+c},a.prototype.port=function(){return this.integer({min:0,max:65535})},a.prototype.address=function(a){return a=b(a),this.natural({min:5,max:2e3})+" "+this.street(a)},a.prototype.altitude=function(a){return a=b(a,{fixed:5,min:0,max:8848}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.areacode=function(a){a=b(a,{parens:!0});var c=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:8}).toString()+this.natural({min:0,max:9}).toString();return a.parens?"("+c+")":c},a.prototype.city=function(){return this.capitalize(this.word({syllables:3}))},a.prototype.coordinates=function(a){return this.latitude(a)+", "+this.longitude(a)},a.prototype.countries=function(){return this.get("countries")},a.prototype.country=function(a){a=b(a);var c=this.pick(this.countries());return a.full?c.name:c.abbreviation},a.prototype.depth=function(a){return a=b(a,{fixed:5,min:-10994,max:0}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.geohash=function(a){return a=b(a,{length:7}),this.string({length:a.length,pool:"0123456789bcdefghjkmnpqrstuvwxyz"})},a.prototype.geojson=function(a){return this.latitude(a)+", "+this.longitude(a)+", "+this.altitude(a)},a.prototype.latitude=function(a){return a=b(a,{fixed:5,min:-90,max:90}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.longitude=function(a){return a=b(a,{fixed:5,min:-180,max:180}),this.floating({min:a.min,max:a.max,fixed:a.fixed})},a.prototype.phone=function(a){var c,d=this,e=function(a){var b=[];return a.sections.forEach(function(a){b.push(d.string({pool:"0123456789",length:a}))}),a.area+b.join(" ")};a=b(a,{formatted:!0,country:"us",mobile:!1}),a.formatted||(a.parens=!1);var f;switch(a.country){case"fr":a.mobile?(c=this.pick(["06","07"])+d.string({pool:"0123456789",length:8}),f=a.formatted?c.match(/../g).join(" "):c):(c=this.pick(["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"])+d.string({pool:"0123456789",length:6}),"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"])+d.string({pool:"0123456789",length:6}),"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"])+d.string({pool:"0123456789",length:6}),"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"])+d.string({pool:"0123456789",length:6}),"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"])+d.string({pool:"0123456789",length:6}),"09"+d.string({pool:"0123456789",length:8})]),f=a.formatted?c.match(/../g).join(" "):c);break;case"uk":a.mobile?(c=this.pick([{area:"07"+this.pick(["4","5","7","8","9"]),sections:[2,6]},{area:"07624 ",sections:[6]}]),f=a.formatted?e(c):e(c).replace(" ","")):(c=this.pick([{area:"01"+this.character({pool:"234569"})+"1 ",sections:[3,4]},{area:"020 "+this.character({pool:"378"}),sections:[3,4]},{area:"023 "+this.character({pool:"89"}),sections:[3,4]},{area:"024 7",sections:[3,4]},{area:"028 "+this.pick(["25","28","37","71","82","90","92","95"]),sections:[2,4]},{area:"012"+this.pick(["04","08","54","76","97","98"])+" ",sections:[6]},{area:"013"+this.pick(["63","64","84","86"])+" ",sections:[6]},{area:"014"+this.pick(["04","20","60","61","80","88"])+" ",sections:[6]},{area:"015"+this.pick(["24","27","62","66"])+" ",sections:[6]},{area:"016"+this.pick(["06","29","35","47","59","95"])+" ",sections:[6]},{area:"017"+this.pick(["26","44","50","68"])+" ",sections:[6]},{area:"018"+this.pick(["27","37","84","97"])+" ",sections:[6]},{area:"019"+this.pick(["00","05","35","46","49","63","95"])+" ",sections:[6]}]),f=a.formatted?e(c):e(c).replace(" ","","g"));break;case"us":var g=this.areacode(a).toString(),h=this.natural({min:2,max:9}).toString()+this.natural({min:0,max:9}).toString()+this.natural({min:0,max:9}).toString(),i=this.natural({min:1e3,max:9999}).toString();f=a.formatted?g+" "+h+"-"+i:g+h+i}return f},a.prototype.postal=function(){var a=this.character({pool:"XVTSRPNKLMHJGECBA"}),b=a+this.natural({max:9})+this.character({alpha:!0,casing:"upper"}),c=this.natural({max:9})+this.character({alpha:!0,casing:"upper"})+this.natural({max:9});return b+" "+c},a.prototype.counties=function(a){return a=b(a,{country:"uk"}),this.get("counties")[a.country.toLowerCase()]},a.prototype.county=function(a){return this.pick(this.counties(a)).name},a.prototype.provinces=function(a){return a=b(a,{country:"ca"}),this.get("provinces")[a.country.toLowerCase()]},a.prototype.province=function(a){return a&&a.full?this.pick(this.provinces(a)).name:this.pick(this.provinces(a)).abbreviation},a.prototype.state=function(a){return a&&a.full?this.pick(this.states(a)).name:this.pick(this.states(a)).abbreviation},a.prototype.states=function(a){a=b(a,{country:"us",us_states_and_dc:!0});var c;switch(a.country.toLowerCase()){case"us":var d=this.get("us_states_and_dc"),e=this.get("territories"),f=this.get("armed_forces");c=[],a.us_states_and_dc&&(c=c.concat(d)),a.territories&&(c=c.concat(e)),a.armed_forces&&(c=c.concat(f));break;case"it":c=this.get("country_regions")[a.country.toLowerCase()];break;case"uk":c=this.get("counties")[a.country.toLowerCase()]}return c},a.prototype.street=function(a){a=b(a,{country:"us",syllables:2});var c;switch(a.country.toLowerCase()){case"us":c=this.word({syllables:a.syllables}),c=this.capitalize(c),c+=" ",c+=a.short_suffix?this.street_suffix(a).abbreviation:this.street_suffix(a).name;break;case"it":c=this.word({syllables:a.syllables}),c=this.capitalize(c),c=(a.short_suffix?this.street_suffix(a).abbreviation:this.street_suffix(a).name)+" "+c}return c},a.prototype.street_suffix=function(a){return a=b(a,{country:"us"}),this.pick(this.street_suffixes(a))},a.prototype.street_suffixes=function(a){return a=b(a,{country:"us"}),this.get("street_suffixes")[a.country.toLowerCase()]},a.prototype.zip=function(a){var b=this.n(this.natural,5,{max:9});return a&&a.plusfour===!0&&(b.push("-"),b=b.concat(this.n(this.natural,4,{max:9}))),b.join("")},a.prototype.ampm=function(){return this.bool()?"am":"pm"},a.prototype.date=function(a){var c,d;if(a&&(a.min||a.max)){a=b(a,{american:!0,string:!1});var e="undefined"!=typeof a.min?a.min.getTime():1,f="undefined"!=typeof a.max?a.max.getTime():864e13;d=new Date(this.integer({min:e,max:f}))}else{var g=this.month({raw:!0}),h=g.days;a&&a.month&&(h=this.get("months")[(a.month%12+12)%12].days),a=b(a,{year:parseInt(this.year(),10),month:g.numeric-1,day:this.natural({min:1,max:h}),hour:this.hour({twentyfour:!0}),minute:this.minute(),second:this.second(),millisecond:this.millisecond(),american:!0,string:!1}),d=new Date(a.year,a.month,a.day,a.hour,a.minute,a.second,a.millisecond)}return c=a.american?d.getMonth()+1+"/"+d.getDate()+"/"+d.getFullYear():d.getDate()+"/"+(d.getMonth()+1)+"/"+d.getFullYear(),a.string?c:d},a.prototype.hammertime=function(a){return this.date(a).getTime()},a.prototype.hour=function(a){return a=b(a,{min:a&&a.twentyfour?0:1,max:a&&a.twentyfour?23:12}),c(a.min<0,"Chance: Min cannot be less than 0."),c(a.twentyfour&&a.max>23,"Chance: Max cannot be greater than 23 for twentyfour option."),c(!a.twentyfour&&a.max>12,"Chance: Max cannot be greater than 12."),c(a.min>a.max,"Chance: Min cannot be greater than Max."),this.natural({min:a.min,max:a.max})},a.prototype.millisecond=function(){return this.natural({max:999})},a.prototype.minute=a.prototype.second=function(a){return a=b(a,{min:0,max:59}),c(a.min<0,"Chance: Min cannot be less than 0."),c(a.max>59,"Chance: Max cannot be greater than 59."),c(a.min>a.max,"Chance: Min cannot be greater than Max."),this.natural({min:a.min,max:a.max})},a.prototype.month=function(a){a=b(a,{min:1,max:12}),c(a.min<1,"Chance: Min cannot be less than 1."),c(a.max>12,"Chance: Max cannot be greater than 12."),c(a.min>a.max,"Chance: Min cannot be greater than Max.");var d=this.pick(this.months().slice(a.min-1,a.max));return a.raw?d:d.name},a.prototype.months=function(){return this.get("months")},a.prototype.second=function(){return this.natural({max:59})},a.prototype.timestamp=function(){return this.natural({min:1,max:parseInt((new Date).getTime()/1e3,10)})},a.prototype.weekday=function(a){a=b(a,{weekday_only:!1});var c=["Monday","Tuesday","Wednesday","Thursday","Friday"];return a.weekday_only||(c.push("Saturday"),c.push("Sunday")),this.pickone(c)},a.prototype.year=function(a){return a=b(a,{min:(new Date).getFullYear()}),a.max="undefined"!=typeof a.max?a.max:a.min+100,this.natural(a).toString()},a.prototype.cc=function(a){a=b(a);var c,d,e;return c=a.type?this.cc_type({name:a.type,raw:!0}):this.cc_type({raw:!0}),d=c.prefix.split(""),e=c.length-c.prefix.length-1,d=d.concat(this.n(this.integer,e,{min:0,max:9})),d.push(this.luhn_calculate(d.join(""))),d.join("")},a.prototype.cc_types=function(){return this.get("cc_types")},a.prototype.cc_type=function(a){a=b(a);var c=this.cc_types(),d=null;if(a.name){for(var e=0;e<c.length;e++)if(c[e].name===a.name||c[e].short_name===a.name){d=c[e];break}if(null===d)throw new RangeError("Credit card type '"+a.name+"'' is not supported")}else d=this.pick(c);return a.raw?d:d.name},a.prototype.currency_types=function(){return this.get("currency_types")},a.prototype.currency=function(){return this.pick(this.currency_types())},a.prototype.timezones=function(){return this.get("timezones")},a.prototype.timezone=function(){return this.pick(this.timezones())},a.prototype.currency_pair=function(a){var b=this.unique(this.currency,2,{comparator:function(a,b){return a.reduce(function(a,c){return a||c.code===b.code},!1)}});return a?b[0].code+"/"+b[1].code:b},a.prototype.dollar=function(a){a=b(a,{max:1e4,min:0});var c=this.floating({min:a.min,max:a.max,fixed:2}).toString(),d=c.split(".")[1];return void 0===d?c+=".00":d.length<2&&(c+="0"),0>c?"-$"+c.replace("-",""):"$"+c},a.prototype.euro=function(a){return Number(this.dollar(a).replace("$","")).toLocaleString()+"€"},a.prototype.exp=function(a){a=b(a);var c={};return c.year=this.exp_year(),c.year===(new Date).getFullYear().toString()?c.month=this.exp_month({future:!0}):c.month=this.exp_month(),a.raw?c:c.month+"/"+c.year},a.prototype.exp_month=function(a){a=b(a);var c,d,e=(new Date).getMonth()+1;if(a.future&&12!==e){do c=this.month({raw:!0}).numeric,d=parseInt(c,10);while(e>=d)}else c=this.month({raw:!0}).numeric;return c},a.prototype.exp_year=function(){var a=(new Date).getMonth()+1,b=(new Date).getFullYear();return this.year({min:12===a?b+1:b,max:b+10})},a.prototype.vat=function(a){switch(a=b(a,{country:"it"}),a.country.toLowerCase()){case"it":return this.it_vat()}},a.prototype.it_vat=function(){var a=this.natural({min:1,max:18e5});return a=this.pad(a,7)+this.pad(this.pick(this.provinces({country:"it"})).code,3),a+this.luhn_calculate(a)},a.prototype.cf=function(a){a=a||{};var b=a.gender?a.gender:this.gender(),c=a.first?a.first:this.first({gender:b,nationality:"it"}),d=a.last?a.last:this.last({nationality:"it"}),e=a.birthday?a.birthday:this.birthday(),f=a.city?a.city:this.pickone(["A","B","C","D","E","F","G","H","I","L","M","Z"])+this.pad(this.natural({max:999}),3),g=[],h=function(a,b){var c,d=[];return a.length<3?d=a.split("").concat("XXX".split("")).splice(0,3):(c=a.toUpperCase().split("").map(function(a){return-1!=="BCDFGHJKLMNPRSTVWZ".indexOf(a)?a:void 0}).join(""),c.length>3&&(c=b?c.substr(0,3):c[0]+c.substr(2,2)),c.length<3&&(d=c,c=a.toUpperCase().split("").map(function(a){return-1!=="AEIOU".indexOf(a)?a:void 0}).join("").substr(0,3-d.length)),d+=c),d},i=function(a,b,c){var d=["A","B","C","D","E","H","L","M","P","R","S","T"];return a.getFullYear().toString().substr(2)+d[a.getMonth()]+c.pad(a.getDate()+("female"===b.toLowerCase()?40:0),2)},j=function(a){for(var b="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",c="ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",d="ABCDEFGHIJKLMNOPQRSTUVWXYZ",e="BAKPLCQDREVOSFTGUHMINJWZYX",f=0,g=0;15>g;g++)f+=g%2!==0?d.indexOf(c[b.indexOf(a[g])]):e.indexOf(c[b.indexOf(a[g])]);return d[f%26]};return g=g.concat(h(d,!0),h(c),i(e,b,this),f.toUpperCase().split("")).join(""),g+=j(g.toUpperCase(),this),g.toUpperCase()},a.prototype.pl_pesel=function(){for(var a=this.natural({min:1,max:9999999999}),b=this.pad(a,10).split(""),c=0;c<b.length;c++)b[c]=parseInt(b[c]);var d=(1*b[0]+3*b[1]+7*b[2]+9*b[3]+1*b[4]+3*b[5]+7*b[6]+9*b[7]+1*b[8]+3*b[9])%10;return 0!==d&&(d=10-d),b.join("")+d},a.prototype.pl_nip=function(){for(var a=this.natural({min:1,max:999999999}),b=this.pad(a,9).split(""),c=0;c<b.length;c++)b[c]=parseInt(b[c]);var d=(6*b[0]+5*b[1]+7*b[2]+2*b[3]+3*b[4]+4*b[5]+5*b[6]+6*b[7]+7*b[8])%11;return 10===d?this.pl_nip():b.join("")+d},a.prototype.pl_regon=function(){for(var a=this.natural({min:1,max:99999999}),b=this.pad(a,8).split(""),c=0;c<b.length;c++)b[c]=parseInt(b[c]);var d=(8*b[0]+9*b[1]+2*b[2]+3*b[3]+4*b[4]+5*b[5]+6*b[6]+7*b[7])%11;return 10===d&&(d=0),b.join("")+d},a.prototype.d4=d({min:1,max:4}),a.prototype.d6=d({min:1,max:6}),a.prototype.d8=d({min:1,max:8}),a.prototype.d10=d({min:1,max:10}),a.prototype.d12=d({min:1,max:12}),a.prototype.d20=d({min:1,max:20}),a.prototype.d30=d({min:1,max:30}),a.prototype.d100=d({min:1,max:100}),a.prototype.rpg=function(a,c){if(c=b(c),a){var d=a.toLowerCase().split("d"),e=[];if(2!==d.length||!parseInt(d[0],10)||!parseInt(d[1],10))throw new Error("Invalid format provided. Please provide #d# where the first # is the number of dice to roll, the second # is the max of each die");for(var f=d[0];f>0;f--)e[f-1]=this.natural({min:1,max:d[1]});return"undefined"!=typeof c.sum&&c.sum?e.reduce(function(a,b){return a+b}):e}throw new RangeError("A type of die roll must be included")},a.prototype.guid=function(a){a=b(a,{version:5});var c="abcdef1234567890",d="ab89",e=this.string({pool:c,length:8})+"-"+this.string({pool:c,length:4})+"-"+a.version+this.string({pool:c,length:3})+"-"+this.string({pool:d,length:1})+this.string({pool:c,length:3})+"-"+this.string({pool:c,length:12});return e},a.prototype.hash=function(a){a=b(a,{length:40,casing:"lower"});var c="upper"===a.casing?m.toUpperCase():m;return this.string({pool:c,length:a.length})},a.prototype.luhn_check=function(a){var b=a.toString(),c=+b.substring(b.length-1);return c===this.luhn_calculate(+b.substring(0,b.length-1))},a.prototype.luhn_calculate=function(a){for(var b,c=a.toString().split("").reverse(),d=0,e=0,f=c.length;f>e;++e)b=+c[e],e%2===0&&(b*=2,b>9&&(b-=9)),d+=b;return 9*d%10},a.prototype.md5=function(a){var c={str:"",key:null,raw:!1};if(a)if("string"==typeof a)c.str=a,a={};else{if("object"!=typeof a)return null;if("Array"===a.constructor)return null}else c.str=this.string(),a={};if(c=b(a,c),!c.str)throw new Error("A parameter is required to return an md5 hash.");return this.bimd5.md5(c.str,c.key,c.raw)},a.prototype.file=function(a){var b,c,d=a||{},e="fileExtension",f=Object.keys(this.get("fileExtension"));if(b=this.word({length:d.length}),d.extention)return c=d.extention,
+b+"."+c;if(d.extentions){if(Array.isArray(d.extentions))return c=this.pickone(d.extentions),b+"."+c;if(d.extentions.constructor===Object){var g=d.extentions,h=Object.keys(g);return c=this.pickone(g[this.pickone(h)]),b+"."+c}throw new Error("Expect collection of type Array or Object to be passed as an argument ")}if(d.fileType){var i=d.fileType;if(-1!==f.indexOf(i))return c=this.pickone(this.get(e)[i]),b+"."+c;throw new Error("Expect file type value to be 'raster', 'vector', '3d' or 'document' ")}return c=this.pickone(this.get(e)[this.pickone(f)]),b+"."+c};var p={firstNames:{male:{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"],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"]},female:{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","John","Rosetta","Verna","Myrtie","Cecilia","Elva","Olivia","Ophelia","Georgie","Elnora","Violet","Adele","Lily","Linnie","Loretta","Madge","Polly","Virgie","Eugenia","Lucile","Lucille","Mabelle","Rosalie"],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","Leda","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"]}},lastNames:{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"],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"]},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"}],counties:{uk:[{name:"Bath and North East Somerset"},{name:"Bedford"},{name:"Blackburn with Darwen"},{name:"Blackpool"},{name:"Bournemouth"},{name:"Bracknell Forest"},{name:"Brighton & Hove"},{name:"Bristol"},{name:"Buckinghamshire"},{name:"Cambridgeshire"},{name:"Central Bedfordshire"},{
+name:"Cheshire East"},{name:"Cheshire West and Chester"},{name:"Cornwall"},{name:"County Durham"},{name:"Cumbria"},{name:"Darlington"},{name:"Derby"},{name:"Derbyshire"},{name:"Devon"},{name:"Dorset"},{name:"East Riding of Yorkshire"},{name:"East Sussex"},{name:"Essex"},{name:"Gloucestershire"},{name:"Greater London"},{name:"Greater Manchester"},{name:"Halton"},{name:"Hampshire"},{name:"Hartlepool"},{name:"Herefordshire"},{name:"Hertfordshire"},{name:"Hull"},{name:"Isle of Wight"},{name:"Isles of Scilly"},{name:"Kent"},{name:"Lancashire"},{name:"Leicester"},{name:"Leicestershire"},{name:"Lincolnshire"},{name:"Luton"},{name:"Medway"},{name:"Merseyside"},{name:"Middlesbrough"},{name:"Milton Keynes"},{name:"Norfolk"},{name:"North East Lincolnshire"},{name:"North Lincolnshire"},{name:"North Somerset"},{name:"North Yorkshire"},{name:"Northamptonshire"},{name:"Northumberland"},{name:"Nottingham"},{name:"Nottinghamshire"},{name:"Oxfordshire"},{name:"Peterborough"},{name:"Plymouth"},{name:"Poole"},{name:"Portsmouth"},{name:"Reading"},{name:"Redcar and Cleveland"},{name:"Rutland"},{name:"Shropshire"},{name:"Slough"},{name:"Somerset"},{name:"South Gloucestershire"},{name:"South Yorkshire"},{name:"Southampton"},{name:"Southend-on-Sea"},{name:"Staffordshire"},{name:"Stockton-on-Tees"},{name:"Stoke-on-Trent"},{name:"Suffolk"},{name:"Surrey"},{name:"Swindon"},{name:"Telford and Wrekin"},{name:"Thurrock"},{name:"Torbay"},{name:"Tyne and Wear"},{name:"Warrington"},{name:"Warwickshire"},{name:"West Berkshire"},{name:"West Midlands"},{name:"West Sussex"},{name:"West Yorkshire"},{name:"Wiltshire"},{name:"Windsor and Maidenhead"},{name:"Wokingham"},{name:"Worcestershire"},{name:"York"}]},provinces:{ca:[{name:"Alberta",abbreviation:"AB"},{name:"British Columbia",abbreviation:"BC"},{name:"Manitoba",abbreviation:"MB"},{name:"New Brunswick",abbreviation:"NB"},{name:"Newfoundland and Labrador",abbreviation:"NL"},{name:"Nova Scotia",abbreviation:"NS"},{name:"Ontario",abbreviation:"ON"},{name:"Prince Edward Island",abbreviation:"PE"},{name:"Quebec",abbreviation:"QC"},{name:"Saskatchewan",abbreviation:"SK"},{name:"Northwest Territories",abbreviation:"NT"},{name:"Nunavut",abbreviation:"NU"},{name:"Yukon",abbreviation:"YT"}],it:[{name:"Agrigento",abbreviation:"AG",code:84},{name:"Alessandria",abbreviation:"AL",code:6},{name:"Ancona",abbreviation:"AN",code:42},{name:"Aosta",abbreviation:"AO",code:7},{name:"L'Aquila",abbreviation:"AQ",code:66},{name:"Arezzo",abbreviation:"AR",code:51},{name:"Ascoli-Piceno",abbreviation:"AP",code:44},{name:"Asti",abbreviation:"AT",code:5},{name:"Avellino",abbreviation:"AV",code:64},{name:"Bari",abbreviation:"BA",code:72},{name:"Barletta-Andria-Trani",abbreviation:"BT",code:72},{name:"Belluno",abbreviation:"BL",code:25},{name:"Benevento",abbreviation:"BN",code:62},{name:"Bergamo",abbreviation:"BG",code:16},{name:"Biella",abbreviation:"BI",code:96},{name:"Bologna",abbreviation:"BO",code:37},{name:"Bolzano",abbreviation:"BZ",code:21},{name:"Brescia",abbreviation:"BS",code:17},{name:"Brindisi",abbreviation:"BR",code:74},{name:"Cagliari",abbreviation:"CA",code:92},{name:"Caltanissetta",abbreviation:"CL",code:85},{name:"Campobasso",abbreviation:"CB",code:70},{name:"Carbonia Iglesias",abbreviation:"CI",code:70},{name:"Caserta",abbreviation:"CE",code:61},{name:"Catania",abbreviation:"CT",code:87},{name:"Catanzaro",abbreviation:"CZ",code:79},{name:"Chieti",abbreviation:"CH",code:69},{name:"Como",abbreviation:"CO",code:13},{name:"Cosenza",abbreviation:"CS",code:78},{name:"Cremona",abbreviation:"CR",code:19},{name:"Crotone",abbreviation:"KR",code:101},{name:"Cuneo",abbreviation:"CN",code:4},{name:"Enna",abbreviation:"EN",code:86},{name:"Fermo",abbreviation:"FM",code:86},{name:"Ferrara",abbreviation:"FE",code:38},{name:"Firenze",abbreviation:"FI",code:48},{name:"Foggia",abbreviation:"FG",code:71},{name:"Forli-Cesena",abbreviation:"FC",code:71},{name:"Frosinone",abbreviation:"FR",code:60},{name:"Genova",abbreviation:"GE",code:10},{name:"Gorizia",abbreviation:"GO",code:31},{name:"Grosseto",abbreviation:"GR",code:53},{name:"Imperia",abbreviation:"IM",code:8},{name:"Isernia",abbreviation:"IS",code:94},{name:"La-Spezia",abbreviation:"SP",code:66},{name:"Latina",abbreviation:"LT",code:59},{name:"Lecce",abbreviation:"LE",code:75},{name:"Lecco",abbreviation:"LC",code:97},{name:"Livorno",abbreviation:"LI",code:49},{name:"Lodi",abbreviation:"LO",code:98},{name:"Lucca",abbreviation:"LU",code:46},{name:"Macerata",abbreviation:"MC",code:43},{name:"Mantova",abbreviation:"MN",code:20},{name:"Massa-Carrara",abbreviation:"MS",code:45},{name:"Matera",abbreviation:"MT",code:77},{name:"Medio Campidano",abbreviation:"VS",code:77},{name:"Messina",abbreviation:"ME",code:83},{name:"Milano",abbreviation:"MI",code:15},{name:"Modena",abbreviation:"MO",code:36},{name:"Monza-Brianza",abbreviation:"MB",code:36},{name:"Napoli",abbreviation:"NA",code:63},{name:"Novara",abbreviation:"NO",code:3},{name:"Nuoro",abbreviation:"NU",code:91},{name:"Ogliastra",abbreviation:"OG",code:91},{name:"Olbia Tempio",abbreviation:"OT",code:91},{name:"Oristano",abbreviation:"OR",code:95},{name:"Padova",abbreviation:"PD",code:28},{name:"Palermo",abbreviation:"PA",code:82},{name:"Parma",abbreviation:"PR",code:34},{name:"Pavia",abbreviation:"PV",code:18},{name:"Perugia",abbreviation:"PG",code:54},{name:"Pesaro-Urbino",abbreviation:"PU",code:41},{name:"Pescara",abbreviation:"PE",code:68},{name:"Piacenza",abbreviation:"PC",code:33},{name:"Pisa",abbreviation:"PI",code:50},{name:"Pistoia",abbreviation:"PT",code:47},{name:"Pordenone",abbreviation:"PN",code:93},{name:"Potenza",abbreviation:"PZ",code:76},{name:"Prato",abbreviation:"PO",code:100},{name:"Ragusa",abbreviation:"RG",code:88},{name:"Ravenna",abbreviation:"RA",code:39},{name:"Reggio-Calabria",abbreviation:"RC",code:35},{name:"Reggio-Emilia",abbreviation:"RE",code:35},{name:"Rieti",abbreviation:"RI",code:57},{name:"Rimini",abbreviation:"RN",code:99},{name:"Roma",abbreviation:"Roma",code:58},{name:"Rovigo",abbreviation:"RO",code:29},{name:"Salerno",abbreviation:"SA",code:65},{name:"Sassari",abbreviation:"SS",code:90},{name:"Savona",abbreviation:"SV",code:9},{name:"Siena",abbreviation:"SI",code:52},{name:"Siracusa",abbreviation:"SR",code:89},{name:"Sondrio",abbreviation:"SO",code:14},{name:"Taranto",abbreviation:"TA",code:73},{name:"Teramo",abbreviation:"TE",code:67},{name:"Terni",abbreviation:"TR",code:55},{name:"Torino",abbreviation:"TO",code:1},{name:"Trapani",abbreviation:"TP",code:81},{name:"Trento",abbreviation:"TN",code:22},{name:"Treviso",abbreviation:"TV",code:26},{name:"Trieste",abbreviation:"TS",code:32},{name:"Udine",abbreviation:"UD",code:30},{name:"Varese",abbreviation:"VA",code:12},{name:"Venezia",abbreviation:"VE",code:27},{name:"Verbania",abbreviation:"VB",code:27},{name:"Vercelli",abbreviation:"VC",code:2},{name:"Verona",abbreviation:"VR",code:23},{name:"Vibo-Valentia",abbreviation:"VV",code:102},{name:"Vicenza",abbreviation:"VI",code:24},{name:"Viterbo",abbreviation:"VT",code:56}]},nationalities:[{name:"Afghan"},{name:"Albanian"},{name:"Algerian"},{name:"American"},{name:"Andorran"},{name:"Angolan"},{name:"Antiguans"},{name:"Argentinean"},{name:"Armenian"},{name:"Australian"},{name:"Austrian"},{name:"Azerbaijani"},{name:"Bahami"},{name:"Bahraini"},{name:"Bangladeshi"},{name:"Barbadian"},{name:"Barbudans"},{name:"Batswana"},{name:"Belarusian"},{name:"Belgian"},{name:"Belizean"},{name:"Beninese"},{name:"Bhutanese"},{name:"Bolivian"},{name:"Bosnian"},{name:"Brazilian"},{name:"British"},{name:"Bruneian"},{name:"Bulgarian"},{name:"Burkinabe"},{name:"Burmese"},{name:"Burundian"},{name:"Cambodian"},{name:"Cameroonian"},{name:"Canadian"},{name:"Cape Verdean"},{name:"Central African"},{name:"Chadian"},{name:"Chilean"},{name:"Chinese"},{name:"Colombian"},{name:"Comoran"},{name:"Congolese"},{name:"Costa Rican"},{name:"Croatian"},{name:"Cuban"},{name:"Cypriot"},{name:"Czech"},{name:"Danish"},{name:"Djibouti"},{name:"Dominican"},{name:"Dutch"},{name:"East Timorese"},{name:"Ecuadorean"},{name:"Egyptian"},{name:"Emirian"},{name:"Equatorial Guinean"},{name:"Eritrean"},{name:"Estonian"},{name:"Ethiopian"},{name:"Fijian"},{name:"Filipino"},{name:"Finnish"},{name:"French"},{name:"Gabonese"},{name:"Gambian"},{name:"Georgian"},{name:"German"},{name:"Ghanaian"},{name:"Greek"},{name:"Grenadian"},{name:"Guatemalan"},{name:"Guinea-Bissauan"},{name:"Guinean"},{name:"Guyanese"},{name:"Haitian"},{name:"Herzegovinian"},{name:"Honduran"},{name:"Hungarian"},{name:"I-Kiribati"},{name:"Icelander"},{name:"Indian"},{name:"Indonesian"},{name:"Iranian"},{name:"Iraqi"},{name:"Irish"},{name:"Israeli"},{name:"Italian"},{name:"Ivorian"},{name:"Jamaican"},{name:"Japanese"},{name:"Jordanian"},{name:"Kazakhstani"},{name:"Kenyan"},{name:"Kittian and Nevisian"},{name:"Kuwaiti"},{name:"Kyrgyz"},{name:"Laotian"},{name:"Latvian"},{name:"Lebanese"},{name:"Liberian"},{name:"Libyan"},{name:"Liechtensteiner"},{name:"Lithuanian"},{name:"Luxembourger"},{name:"Macedonian"},{name:"Malagasy"},{name:"Malawian"},{name:"Malaysian"},{name:"Maldivan"},{name:"Malian"},{name:"Maltese"},{name:"Marshallese"},{name:"Mauritanian"},{name:"Mauritian"},{name:"Mexican"},{name:"Micronesian"},{name:"Moldovan"},{name:"Monacan"},{name:"Mongolian"},{name:"Moroccan"},{name:"Mosotho"},{name:"Motswana"},{name:"Mozambican"},{name:"Namibian"},{name:"Nauruan"},{name:"Nepalese"},{name:"New Zealander"},{name:"Nicaraguan"},{name:"Nigerian"},{name:"Nigerien"},{name:"North Korean"},{name:"Northern Irish"},{name:"Norwegian"},{name:"Omani"},{name:"Pakistani"},{name:"Palauan"},{name:"Panamanian"},{name:"Papua New Guinean"},{name:"Paraguayan"},{name:"Peruvian"},{name:"Polish"},{name:"Portuguese"},{name:"Qatari"},{name:"Romani"},{name:"Russian"},{name:"Rwandan"},{name:"Saint Lucian"},{name:"Salvadoran"},{name:"Samoan"},{name:"San Marinese"},{name:"Sao Tomean"},{name:"Saudi"},{name:"Scottish"},{name:"Senegalese"},{name:"Serbian"},{name:"Seychellois"},{name:"Sierra Leonean"},{name:"Singaporean"},{name:"Slovakian"},{name:"Slovenian"},{name:"Solomon Islander"},{name:"Somali"},{name:"South African"},{name:"South Korean"},{name:"Spanish"},{name:"Sri Lankan"},{name:"Sudanese"},{name:"Surinamer"},{name:"Swazi"},{name:"Swedish"},{name:"Swiss"},{name:"Syrian"},{name:"Taiwanese"},{name:"Tajik"},{name:"Tanzanian"},{name:"Thai"},{name:"Togolese"},{name:"Tongan"},{name:"Trinidadian or Tobagonian"},{name:"Tunisian"},{name:"Turkish"},{name:"Tuvaluan"},{name:"Ugandan"},{name:"Ukrainian"},{name:"Uruguaya"},{name:"Uzbekistani"},{name:"Venezuela"},{name:"Vietnamese"},{name:"Wels"},{name:"Yemenit"},{name:"Zambia"},{name:"Zimbabwe"}],us_states_and_dc:[{name:"Alabama",abbreviation:"AL"},{name:"Alaska",abbreviation:"AK"},{name:"Arizona",abbreviation:"AZ"},{name:"Arkansas",abbreviation:"AR"},{name:"California",abbreviation:"CA"},{name:"Colorado",abbreviation:"CO"},{name:"Connecticut",abbreviation:"CT"},{name:"Delaware",abbreviation:"DE"},{name:"District of Columbia",abbreviation:"DC"},{name:"Florida",abbreviation:"FL"},{name:"Georgia",abbreviation:"GA"},{name:"Hawaii",abbreviation:"HI"},{name:"Idaho",abbreviation:"ID"},{name:"Illinois",abbreviation:"IL"},{name:"Indiana",abbreviation:"IN"},{name:"Iowa",abbreviation:"IA"},{name:"Kansas",abbreviation:"KS"},{name:"Kentucky",abbreviation:"KY"},{name:"Louisiana",abbreviation:"LA"},{name:"Maine",abbreviation:"ME"},{name:"Maryland",abbreviation:"MD"},{name:"Massachusetts",abbreviation:"MA"},{name:"Michigan",abbreviation:"MI"},{name:"Minnesota",abbreviation:"MN"},{name:"Mississippi",abbreviation:"MS"},{name:"Missouri",abbreviation:"MO"},{name:"Montana",abbreviation:"MT"},{name:"Nebraska",abbreviation:"NE"},{name:"Nevada",abbreviation:"NV"},{name:"New Hampshire",abbreviation:"NH"},{name:"New Jersey",abbreviation:"NJ"},{name:"New Mexico",abbreviation:"NM"},{name:"New York",abbreviation:"NY"},{name:"North Carolina",abbreviation:"NC"},{name:"North Dakota",abbreviation:"ND"},{name:"Ohio",abbreviation:"OH"},{name:"Oklahoma",abbreviation:"OK"},{name:"Oregon",abbreviation:"OR"},{name:"Pennsylvania",abbreviation:"PA"},{name:"Rhode Island",abbreviation:"RI"},{name:"South Carolina",abbreviation:"SC"},{name:"South Dakota",abbreviation:"SD"},{name:"Tennessee",abbreviation:"TN"},{name:"Texas",abbreviation:"TX"},{name:"Utah",abbreviation:"UT"},{name:"Vermont",abbreviation:"VT"},{name:"Virginia",abbreviation:"VA"},{name:"Washington",abbreviation:"WA"},{name:"West Virginia",abbreviation:"WV"},{name:"Wisconsin",abbreviation:"WI"},{name:"Wyoming",abbreviation:"WY"}],territories:[{name:"American Samoa",abbreviation:"AS"},{name:"Federated States of Micronesia",abbreviation:"FM"},{name:"Guam",abbreviation:"GU"},{name:"Marshall Islands",abbreviation:"MH"},{name:"Northern Mariana Islands",abbreviation:"MP"},{name:"Puerto Rico",abbreviation:"PR"},{name:"Virgin Islands, U.S.",abbreviation:"VI"}],armed_forces:[{name:"Armed Forces Europe",abbreviation:"AE"},{name:"Armed Forces Pacific",abbreviation:"AP"},{name:"Armed Forces the Americas",abbreviation:"AA"}],country_regions:{it:[{name:"Valle d'Aosta",abbreviation:"VDA"},{name:"Piemonte",abbreviation:"PIE"},{name:"Lombardia",abbreviation:"LOM"},{name:"Veneto",abbreviation:"VEN"},{name:"Trentino Alto Adige",abbreviation:"TAA"},{name:"Friuli Venezia Giulia",abbreviation:"FVG"},{name:"Liguria",abbreviation:"LIG"},{name:"Emilia Romagna",abbreviation:"EMR"},{name:"Toscana",abbreviation:"TOS"},{name:"Umbria",abbreviation:"UMB"},{name:"Marche",abbreviation:"MAR"},{name:"Abruzzo",abbreviation:"ABR"},{name:"Lazio",abbreviation:"LAZ"},{name:"Campania",abbreviation:"CAM"},{name:"Puglia",abbreviation:"PUG"},{name:"Basilicata",abbreviation:"BAS"},{name:"Molise",abbreviation:"MOL"},{name:"Calabria",abbreviation:"CAL"},{name:"Sicilia",abbreviation:"SIC"},{name:"Sardegna",abbreviation:"SAR"}]},street_suffixes:{us:[{name:"Avenue",abbreviation:"Ave"},{name:"Boulevard",abbreviation:"Blvd"},{name:"Center",abbreviation:"Ctr"},{name:"Circle",abbreviation:"Cir"},{name:"Court",abbreviation:"Ct"},{name:"Drive",abbreviation:"Dr"},{name:"Extension",abbreviation:"Ext"},{name:"Glen",abbreviation:"Gln"},{name:"Grove",abbreviation:"Grv"},{name:"Heights",abbreviation:"Hts"},{name:"Highway",abbreviation:"Hwy"},{name:"Junction",abbreviation:"Jct"},{name:"Key",abbreviation:"Key"},{name:"Lane",abbreviation:"Ln"},{name:"Loop",abbreviation:"Loop"},{name:"Manor",abbreviation:"Mnr"},{name:"Mill",abbreviation:"Mill"},{name:"Park",abbreviation:"Park"},{name:"Parkway",abbreviation:"Pkwy"},{name:"Pass",abbreviation:"Pass"},{name:"Path",abbreviation:"Path"},{name:"Pike",abbreviation:"Pike"},{name:"Place",abbreviation:"Pl"},{name:"Plaza",abbreviation:"Plz"},{name:"Point",abbreviation:"Pt"},{name:"Ridge",abbreviation:"Rdg"},{name:"River",abbreviation:"Riv"},{name:"Road",abbreviation:"Rd"},{name:"Square",abbreviation:"Sq"},{name:"Street",abbreviation:"St"},{name:"Terrace",abbreviation:"Ter"},{name:"Trail",abbreviation:"Trl"},{name:"Turnpike",abbreviation:"Tpke"},{name:"View",abbreviation:"Vw"},{name:"Way",abbreviation:"Way"}],it:[{name:"Accesso",abbreviation:"Acc."},{name:"Alzaia",abbreviation:"Alz."},{name:"Arco",abbreviation:"Arco"},{name:"Archivolto",abbreviation:"Acv."},{name:"Arena",abbreviation:"Arena"},{name:"Argine",abbreviation:"Argine"},{name:"Bacino",abbreviation:"Bacino"},{name:"Banchi",abbreviation:"Banchi"},{name:"Banchina",abbreviation:"Ban."},{name:"Bastioni",abbreviation:"Bas."},{name:"Belvedere",abbreviation:"Belv."},{name:"Borgata",abbreviation:"B.ta"},{name:"Borgo",abbreviation:"B.go"},{name:"Calata",abbreviation:"Cal."},{name:"Calle",abbreviation:"Calle"},{name:"Campiello",abbreviation:"Cam."},{name:"Campo",abbreviation:"Cam."},{name:"Canale",abbreviation:"Can."},{name:"Carraia",abbreviation:"Carr."},{name:"Cascina",abbreviation:"Cascina"},{name:"Case sparse",abbreviation:"c.s."},{name:"Cavalcavia",abbreviation:"Cv."},{name:"Circonvallazione",abbreviation:"Cv."},{name:"Complanare",abbreviation:"C.re"},{name:"Contrada",abbreviation:"C.da"},{name:"Corso",abbreviation:"C.so"},{name:"Corte",abbreviation:"C.te"},{name:"Cortile",abbreviation:"C.le"},{name:"Diramazione",abbreviation:"Dir."},{name:"Fondaco",abbreviation:"F.co"},{name:"Fondamenta",abbreviation:"F.ta"},{name:"Fondo",abbreviation:"F.do"},{name:"Frazione",abbreviation:"Fr."},{name:"Isola",abbreviation:"Is."},{name:"Largo",abbreviation:"L.go"},{name:"Litoranea",abbreviation:"Lit."},{name:"Lungolago",abbreviation:"L.go lago"},{name:"Lungo Po",abbreviation:"l.go Po"},{name:"Molo",abbreviation:"Molo"},{name:"Mura",abbreviation:"Mura"},{name:"Passaggio privato",abbreviation:"pass. priv."},{name:"Passeggiata",abbreviation:"Pass."},{name:"Piazza",abbreviation:"P.zza"},{name:"Piazzale",abbreviation:"P.le"},{name:"Ponte",abbreviation:"P.te"},{name:"Portico",abbreviation:"P.co"},{name:"Rampa",abbreviation:"Rampa"},{name:"Regione",abbreviation:"Reg."},{name:"Rione",abbreviation:"R.ne"},{name:"Rio",abbreviation:"Rio"},{name:"Ripa",abbreviation:"Ripa"},{name:"Riva",abbreviation:"Riva"},{name:"Rondò",abbreviation:"Rondò"},{name:"Rotonda",abbreviation:"Rot."},{name:"Sagrato",abbreviation:"Sagr."},{name:"Salita",abbreviation:"Sal."},{name:"Scalinata",abbreviation:"Scal."},{name:"Scalone",abbreviation:"Scal."},{name:"Slargo",abbreviation:"Sl."},{name:"Sottoportico",abbreviation:"Sott."},{name:"Strada",abbreviation:"Str."},{name:"Stradale",abbreviation:"Str.le"},{name:"Strettoia",abbreviation:"Strett."},{name:"Traversa",abbreviation:"Trav."},{name:"Via",abbreviation:"V."},{name:"Viale",abbreviation:"V.le"},{name:"Vicinale",abbreviation:"Vic.le"},{name:"Vicolo",abbreviation:"Vic."}]},months:[{name:"January",short_name:"Jan",numeric:"01",days:31},{name:"February",short_name:"Feb",numeric:"02",days:28},{name:"March",short_name:"Mar",numeric:"03",days:31},{name:"April",short_name:"Apr",numeric:"04",days:30},{name:"May",short_name:"May",numeric:"05",days:31},{name:"June",short_name:"Jun",numeric:"06",days:30},{name:"July",short_name:"Jul",numeric:"07",days:31},{name:"August",short_name:"Aug",numeric:"08",days:31},{name:"September",short_name:"Sep",numeric:"09",days:30},{name:"October",short_name:"Oct",numeric:"10",days:31},{name:"November",short_name:"Nov",numeric:"11",days:30},{name:"December",short_name:"Dec",numeric:"12",days:31}],cc_types:[{name:"American Express",short_name:"amex",prefix:"34",length:15},{name:"Bankcard",short_name:"bankcard",prefix:"5610",length:16},{name:"China UnionPay",short_name:"chinaunion",prefix:"62",length:16},{name:"Diners Club Carte Blanche",short_name:"dccarte",prefix:"300",length:14},{name:"Diners Club enRoute",short_name:"dcenroute",prefix:"2014",length:15},{name:"Diners Club International",short_name:"dcintl",prefix:"36",length:14},{name:"Diners Club United States & Canada",short_name:"dcusc",prefix:"54",length:16},{name:"Discover Card",short_name:"discover",prefix:"6011",length:16},{name:"InstaPayment",short_name:"instapay",prefix:"637",length:16},{name:"JCB",short_name:"jcb",prefix:"3528",length:16},{name:"Laser",short_name:"laser",prefix:"6304",length:16},{name:"Maestro",short_name:"maestro",prefix:"5018",length:16},{name:"Mastercard",short_name:"mc",prefix:"51",length:16},{name:"Solo",short_name:"solo",prefix:"6334",length:16},{name:"Switch",short_name:"switch",prefix:"4903",length:16},{name:"Visa",short_name:"visa",prefix:"4",length:16},{name:"Visa Electron",short_name:"electron",prefix:"4026",length:16}],currency_types:[{code:"AED",name:"United Arab Emirates Dirham"},{code:"AFN",name:"Afghanistan Afghani"},{code:"ALL",name:"Albania Lek"},{code:"AMD",name:"Armenia Dram"},{code:"ANG",name:"Netherlands Antilles Guilder"},{code:"AOA",name:"Angola Kwanza"},{code:"ARS",name:"Argentina Peso"},{code:"AUD",name:"Australia Dollar"},{code:"AWG",name:"Aruba Guilder"},{code:"AZN",name:"Azerbaijan New Manat"},{code:"BAM",name:"Bosnia and Herzegovina Convertible Marka"},{code:"BBD",name:"Barbados Dollar"},{code:"BDT",name:"Bangladesh Taka"},{code:"BGN",name:"Bulgaria Lev"},{code:"BHD",name:"Bahrain Dinar"},{code:"BIF",name:"Burundi Franc"},{code:"BMD",name:"Bermuda Dollar"},{code:"BND",name:"Brunei Darussalam Dollar"},{code:"BOB",name:"Bolivia Boliviano"},{code:"BRL",name:"Brazil Real"},{code:"BSD",name:"Bahamas Dollar"},{code:"BTN",name:"Bhutan Ngultrum"},{code:"BWP",name:"Botswana Pula"},{code:"BYR",name:"Belarus Ruble"},{code:"BZD",name:"Belize Dollar"},{code:"CAD",name:"Canada Dollar"},{code:"CDF",name:"Congo/Kinshasa Franc"},{code:"CHF",name:"Switzerland Franc"},{code:"CLP",name:"Chile Peso"},{code:"CNY",name:"China Yuan Renminbi"},{code:"COP",name:"Colombia Peso"},{code:"CRC",name:"Costa Rica Colon"},{code:"CUC",name:"Cuba Convertible Peso"},{code:"CUP",name:"Cuba Peso"},{code:"CVE",name:"Cape Verde Escudo"},{code:"CZK",name:"Czech Republic Koruna"},{code:"DJF",name:"Djibouti Franc"},{code:"DKK",name:"Denmark Krone"},{code:"DOP",name:"Dominican Republic Peso"},{code:"DZD",name:"Algeria Dinar"},{code:"EGP",name:"Egypt Pound"},{code:"ERN",name:"Eritrea Nakfa"},{code:"ETB",name:"Ethiopia Birr"},{code:"EUR",name:"Euro Member Countries"},{code:"FJD",name:"Fiji Dollar"},{code:"FKP",name:"Falkland Islands (Malvinas) Pound"},{code:"GBP",name:"United Kingdom Pound"},{code:"GEL",name:"Georgia Lari"},{code:"GGP",name:"Guernsey Pound"},{code:"GHS",name:"Ghana Cedi"},{code:"GIP",name:"Gibraltar Pound"},{code:"GMD",name:"Gambia Dalasi"},{code:"GNF",name:"Guinea Franc"},{code:"GTQ",name:"Guatemala Quetzal"},{code:"GYD",name:"Guyana Dollar"},{code:"HKD",name:"Hong Kong Dollar"},{code:"HNL",name:"Honduras Lempira"},{code:"HRK",name:"Croatia Kuna"},{code:"HTG",name:"Haiti Gourde"},{code:"HUF",name:"Hungary Forint"},{code:"IDR",name:"Indonesia Rupiah"},{code:"ILS",name:"Israel Shekel"},{code:"IMP",name:"Isle of Man Pound"},{code:"INR",name:"India Rupee"},{code:"IQD",name:"Iraq Dinar"},{code:"IRR",name:"Iran Rial"},{code:"ISK",name:"Iceland Krona"},{code:"JEP",name:"Jersey Pound"},{code:"JMD",name:"Jamaica Dollar"},{code:"JOD",name:"Jordan Dinar"},{code:"JPY",name:"Japan Yen"},{code:"KES",name:"Kenya Shilling"},{code:"KGS",name:"Kyrgyzstan Som"},{code:"KHR",name:"Cambodia Riel"},{code:"KMF",name:"Comoros Franc"},{code:"KPW",name:"Korea (North) Won"},{code:"KRW",name:"Korea (South) Won"},{code:"KWD",name:"Kuwait Dinar"},{code:"KYD",name:"Cayman Islands Dollar"},{code:"KZT",name:"Kazakhstan Tenge"},{code:"LAK",name:"Laos Kip"},{code:"LBP",name:"Lebanon Pound"},{code:"LKR",name:"Sri Lanka Rupee"},{code:"LRD",name:"Liberia Dollar"},{code:"LSL",name:"Lesotho Loti"},{code:"LTL",name:"Lithuania Litas"},{code:"LYD",name:"Libya Dinar"},{code:"MAD",name:"Morocco Dirham"},{code:"MDL",name:"Moldova Leu"},{code:"MGA",name:"Madagascar Ariary"},{code:"MKD",name:"Macedonia Denar"},{code:"MMK",name:"Myanmar (Burma) Kyat"},{code:"MNT",name:"Mongolia Tughrik"},{code:"MOP",name:"Macau Pataca"},{code:"MRO",name:"Mauritania Ouguiya"},{code:"MUR",name:"Mauritius Rupee"},{code:"MVR",name:"Maldives (Maldive Islands) Rufiyaa"},{code:"MWK",name:"Malawi Kwacha"},{code:"MXN",name:"Mexico Peso"},{code:"MYR",name:"Malaysia Ringgit"},{code:"MZN",name:"Mozambique Metical"},{code:"NAD",name:"Namibia Dollar"},{code:"NGN",name:"Nigeria Naira"},{code:"NIO",name:"Nicaragua Cordoba"},{code:"NOK",name:"Norway Krone"},{code:"NPR",name:"Nepal Rupee"},{code:"NZD",name:"New Zealand Dollar"},{code:"OMR",name:"Oman Rial"},{code:"PAB",name:"Panama Balboa"},{code:"PEN",name:"Peru Nuevo Sol"},{code:"PGK",name:"Papua New Guinea Kina"},{code:"PHP",name:"Philippines Peso"},{code:"PKR",name:"Pakistan Rupee"},{code:"PLN",name:"Poland Zloty"},{code:"PYG",name:"Paraguay Guarani"},{code:"QAR",name:"Qatar Riyal"},{code:"RON",name:"Romania New Leu"},{code:"RSD",name:"Serbia Dinar"},{code:"RUB",name:"Russia Ruble"},{code:"RWF",name:"Rwanda Franc"},{code:"SAR",name:"Saudi Arabia Riyal"},{code:"SBD",name:"Solomon Islands Dollar"},{code:"SCR",name:"Seychelles Rupee"},{code:"SDG",name:"Sudan Pound"},{code:"SEK",name:"Sweden Krona"},{code:"SGD",name:"Singapore Dollar"},{code:"SHP",name:"Saint Helena Pound"},{code:"SLL",name:"Sierra Leone Leone"},{code:"SOS",name:"Somalia Shilling"},{code:"SPL",name:"Seborga Luigino"},{code:"SRD",name:"Suriname Dollar"},{code:"STD",name:"São Tomé and Príncipe Dobra"},{code:"SVC",name:"El Salvador Colon"},{code:"SYP",name:"Syria Pound"},{code:"SZL",name:"Swaziland Lilangeni"},{code:"THB",name:"Thailand Baht"},{code:"TJS",name:"Tajikistan Somoni"},{code:"TMT",name:"Turkmenistan Manat"},{code:"TND",name:"Tunisia Dinar"},{code:"TOP",name:"Tonga Pa'anga"},{code:"TRY",name:"Turkey Lira"},{code:"TTD",name:"Trinidad and Tobago Dollar"},{code:"TVD",name:"Tuvalu Dollar"},{code:"TWD",name:"Taiwan New Dollar"},{code:"TZS",name:"Tanzania Shilling"},{code:"UAH",name:"Ukraine Hryvnia"},{code:"UGX",name:"Uganda Shilling"},{code:"USD",name:"United States Dollar"},{code:"UYU",name:"Uruguay Peso"},{code:"UZS",name:"Uzbekistan Som"},{code:"VEF",name:"Venezuela Bolivar"},{code:"VND",name:"Viet Nam Dong"},{code:"VUV",name:"Vanuatu Vatu"},{code:"WST",name:"Samoa Tala"},{code:"XAF",name:"Communauté Financière Africaine (BEAC) CFA Franc BEAC"},{code:"XCD",name:"East Caribbean Dollar"},{code:"XDR",name:"International Monetary Fund (IMF) Special Drawing Rights"},{code:"XOF",name:"Communauté Financière Africaine (BCEAO) Franc"},{code:"XPF",name:"Comptoirs Français du Pacifique (CFP) Franc"},{code:"YER",name:"Yemen Rial"},{code:"ZAR",name:"South Africa Rand"},{code:"ZMW",name:"Zambia Kwacha"},{code:"ZWD",name:"Zimbabwe Dollar"}],colorNames:["AliceBlue","Black","Navy","DarkBlue","MediumBlue","Blue","DarkGreen","Green","Teal","DarkCyan","DeepSkyBlue","DarkTurquoise","MediumSpringGreen","Lime","SpringGreen","Aqua","Cyan","MidnightBlue","DodgerBlue","LightSeaGreen","ForestGreen","SeaGreen","DarkSlateGray","LimeGreen","MediumSeaGreen","Turquoise","RoyalBlue","SteelBlue","DarkSlateBlue","MediumTurquoise","Indigo","DarkOliveGreen","CadetBlue","CornflowerBlue","RebeccaPurple","MediumAquaMarine","DimGray","SlateBlue","OliveDrab","SlateGray","LightSlateGray","MediumSlateBlue","LawnGreen","Chartreuse","Aquamarine","Maroon","Purple","Olive","Gray","SkyBlue","LightSkyBlue","BlueViolet","DarkRed","DarkMagenta","SaddleBrown","Ivory","White","DarkSeaGreen","LightGreen","MediumPurple","DarkViolet","PaleGreen","DarkOrchid","YellowGreen","Sienna","Brown","DarkGray","LightBlue","GreenYellow","PaleTurquoise","LightSteelBlue","PowderBlue","FireBrick","DarkGoldenRod","MediumOrchid","RosyBrown","DarkKhaki","Silver","MediumVioletRed","IndianRed","Peru","Chocolate","Tan","LightGray","Thistle","Orchid","GoldenRod","PaleVioletRed","Crimson","Gainsboro","Plum","BurlyWood","LightCyan","Lavender","DarkSalmon","Violet","PaleGoldenRod","LightCoral","Khaki","AliceBlue","HoneyDew","Azure","SandyBrown","Wheat","Beige","WhiteSmoke","MintCream","GhostWhite","Salmon","AntiqueWhite","Linen","LightGoldenRodYellow","OldLace","Red","Fuchsia","Magenta","DeepPink","OrangeRed","Tomato","HotPink","Coral","DarkOrange","LightSalmon","Orange","LightPink","Pink","Gold","PeachPuff","NavajoWhite","Moccasin","Bisque","MistyRose","BlanchedAlmond","PapayaWhip","LavenderBlush","SeaShell","Cornsilk","LemonChiffon","FloralWhite","Snow","Yellow","LightYellow"],fileExtension:{raster:["bmp","gif","gpl","ico","jpeg","psd","png","psp","raw","tiff"],vector:["3dv","amf","awg","ai","cgm","cdr","cmx","dxf","e2d","egt","eps","fs","odg","svg","xar"],"3d":["3dmf","3dm","3mf","3ds","an8","aoi","blend","cal3d","cob","ctm","iob","jas","max","mb","mdx","obj","x","x3d"],document:["doc","docx","dot","html","xml","odt","odm","ott","csv","rtf","tex","xhtml","xps"]},timezones:[{name:"Dateline Standard Time",abbr:"DST",offset:-12,isdst:!1,text:"(UTC-12:00) International Date Line West",utc:["Etc/GMT+12"]},{name:"UTC-11",abbr:"U",offset:-11,isdst:!1,text:"(UTC-11:00) Coordinated Universal Time-11",utc:["Etc/GMT+11","Pacific/Midway","Pacific/Niue","Pacific/Pago_Pago"]},{name:"Hawaiian Standard Time",abbr:"HST",offset:-10,isdst:!1,text:"(UTC-10:00) Hawaii",utc:["Etc/GMT+10","Pacific/Honolulu","Pacific/Johnston","Pacific/Rarotonga","Pacific/Tahiti"]},{name:"Alaskan Standard Time",abbr:"AKDT",offset:-8,isdst:!0,text:"(UTC-09:00) Alaska",utc:["America/Anchorage","America/Juneau","America/Nome","America/Sitka","America/Yakutat"]},{name:"Pacific Standard Time (Mexico)",abbr:"PDT",offset:-7,isdst:!0,text:"(UTC-08:00) Baja California",utc:["America/Santa_Isabel"]},{name:"Pacific Standard Time",abbr:"PDT",offset:-7,isdst:!0,text:"(UTC-08:00) Pacific Time (US & Canada)",utc:["America/Dawson","America/Los_Angeles","America/Tijuana","America/Vancouver","America/Whitehorse","PST8PDT"]},{name:"US Mountain Standard Time",abbr:"UMST",offset:-7,isdst:!1,text:"(UTC-07:00) Arizona",utc:["America/Creston","America/Dawson_Creek","America/Hermosillo","America/Phoenix","Etc/GMT+7"]},{name:"Mountain Standard Time (Mexico)",abbr:"MDT",offset:-6,isdst:!0,text:"(UTC-07:00) Chihuahua, La Paz, Mazatlan",utc:["America/Chihuahua","America/Mazatlan"]},{name:"Mountain Standard Time",abbr:"MDT",offset:-6,isdst:!0,text:"(UTC-07:00) Mountain Time (US & Canada)",utc:["America/Boise","America/Cambridge_Bay","America/Denver","America/Edmonton","America/Inuvik","America/Ojinaga","America/Yellowknife","MST7MDT"]},{name:"Central America Standard Time",abbr:"CAST",offset:-6,isdst:!1,text:"(UTC-06:00) Central America",utc:["America/Belize","America/Costa_Rica","America/El_Salvador","America/Guatemala","America/Managua","America/Tegucigalpa","Etc/GMT+6","Pacific/Galapagos"]},{name:"Central Standard Time",abbr:"CDT",offset:-5,isdst:!0,text:"(UTC-06:00) Central Time (US & Canada)",utc:["America/Chicago","America/Indiana/Knox","America/Indiana/Tell_City","America/Matamoros","America/Menominee","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Rainy_River","America/Rankin_Inlet","America/Resolute","America/Winnipeg","CST6CDT"]},{name:"Central Standard Time (Mexico)",abbr:"CDT",offset:-5,isdst:!0,text:"(UTC-06:00) Guadalajara, Mexico City, Monterrey",utc:["America/Bahia_Banderas","America/Cancun","America/Merida","America/Mexico_City","America/Monterrey"]},{name:"Canada Central Standard Time",abbr:"CCST",offset:-6,isdst:!1,text:"(UTC-06:00) Saskatchewan",utc:["America/Regina","America/Swift_Current"]},{name:"SA Pacific Standard Time",abbr:"SPST",offset:-5,isdst:!1,text:"(UTC-05:00) Bogota, Lima, Quito",utc:["America/Bogota","America/Cayman","America/Coral_Harbour","America/Eirunepe","America/Guayaquil","America/Jamaica","America/Lima","America/Panama","America/Rio_Branco","Etc/GMT+5"]},{name:"Eastern Standard Time",abbr:"EDT",offset:-4,isdst:!0,text:"(UTC-05:00) Eastern Time (US & Canada)",utc:["America/Detroit","America/Havana","America/Indiana/Petersburg","America/Indiana/Vincennes","America/Indiana/Winamac","America/Iqaluit","America/Kentucky/Monticello","America/Louisville","America/Montreal","America/Nassau","America/New_York","America/Nipigon","America/Pangnirtung","America/Port-au-Prince","America/Thunder_Bay","America/Toronto","EST5EDT"]},{name:"US Eastern Standard Time",abbr:"UEDT",offset:-4,isdst:!0,text:"(UTC-05:00) Indiana (East)",utc:["America/Indiana/Marengo","America/Indiana/Vevay","America/Indianapolis"]},{name:"Venezuela Standard Time",abbr:"VST",offset:-4.5,isdst:!1,text:"(UTC-04:30) Caracas",utc:["America/Caracas"]},{name:"Paraguay Standard Time",abbr:"PST",offset:-4,isdst:!1,text:"(UTC-04:00) Asuncion",utc:["America/Asuncion"]},{name:"Atlantic Standard Time",abbr:"ADT",offset:-3,isdst:!0,text:"(UTC-04:00) Atlantic Time (Canada)",utc:["America/Glace_Bay","America/Goose_Bay","America/Halifax","America/Moncton","America/Thule","Atlantic/Bermuda"]},{name:"Central Brazilian Standard Time",abbr:"CBST",offset:-4,isdst:!1,text:"(UTC-04:00) Cuiaba",utc:["America/Campo_Grande","America/Cuiaba"]},{name:"SA Western Standard Time",abbr:"SWST",offset:-4,isdst:!1,text:"(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",utc:["America/Anguilla","America/Antigua","America/Aruba","America/Barbados","America/Blanc-Sablon","America/Boa_Vista","America/Curacao","America/Dominica","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guyana","America/Kralendijk","America/La_Paz","America/Lower_Princes","America/Manaus","America/Marigot","America/Martinique","America/Montserrat","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Santo_Domingo","America/St_Barthelemy","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Tortola","Etc/GMT+4"]
+},{name:"Pacific SA Standard Time",abbr:"PSST",offset:-4,isdst:!1,text:"(UTC-04:00) Santiago",utc:["America/Santiago","Antarctica/Palmer"]},{name:"Newfoundland Standard Time",abbr:"NDT",offset:-2.5,isdst:!0,text:"(UTC-03:30) Newfoundland",utc:["America/St_Johns"]},{name:"E. South America Standard Time",abbr:"ESAST",offset:-3,isdst:!1,text:"(UTC-03:00) Brasilia",utc:["America/Sao_Paulo"]},{name:"Argentina Standard Time",abbr:"AST",offset:-3,isdst:!1,text:"(UTC-03:00) Buenos Aires",utc:["America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Buenos_Aires","America/Catamarca","America/Cordoba","America/Jujuy","America/Mendoza"]},{name:"SA Eastern Standard Time",abbr:"SEST",offset:-3,isdst:!1,text:"(UTC-03:00) Cayenne, Fortaleza",utc:["America/Araguaina","America/Belem","America/Cayenne","America/Fortaleza","America/Maceio","America/Paramaribo","America/Recife","America/Santarem","Antarctica/Rothera","Atlantic/Stanley","Etc/GMT+3"]},{name:"Greenland Standard Time",abbr:"GDT",offset:-2,isdst:!0,text:"(UTC-03:00) Greenland",utc:["America/Godthab"]},{name:"Montevideo Standard Time",abbr:"MST",offset:-3,isdst:!1,text:"(UTC-03:00) Montevideo",utc:["America/Montevideo"]},{name:"Bahia Standard Time",abbr:"BST",offset:-3,isdst:!1,text:"(UTC-03:00) Salvador",utc:["America/Bahia"]},{name:"UTC-02",abbr:"U",offset:-2,isdst:!1,text:"(UTC-02:00) Coordinated Universal Time-02",utc:["America/Noronha","Atlantic/South_Georgia","Etc/GMT+2"]},{name:"Mid-Atlantic Standard Time",abbr:"MDT",offset:-1,isdst:!0,text:"(UTC-02:00) Mid-Atlantic - Old"},{name:"Azores Standard Time",abbr:"ADT",offset:0,isdst:!0,text:"(UTC-01:00) Azores",utc:["America/Scoresbysund","Atlantic/Azores"]},{name:"Cape Verde Standard Time",abbr:"CVST",offset:-1,isdst:!1,text:"(UTC-01:00) Cape Verde Is.",utc:["Atlantic/Cape_Verde","Etc/GMT+1"]},{name:"Morocco Standard Time",abbr:"MDT",offset:1,isdst:!0,text:"(UTC) Casablanca",utc:["Africa/Casablanca","Africa/El_Aaiun"]},{name:"UTC",abbr:"CUT",offset:0,isdst:!1,text:"(UTC) Coordinated Universal Time",utc:["America/Danmarkshavn","Etc/GMT"]},{name:"GMT Standard Time",abbr:"GDT",offset:1,isdst:!0,text:"(UTC) Dublin, Edinburgh, Lisbon, London",utc:["Atlantic/Canary","Atlantic/Faeroe","Atlantic/Madeira","Europe/Dublin","Europe/Guernsey","Europe/Isle_of_Man","Europe/Jersey","Europe/Lisbon","Europe/London"]},{name:"Greenwich Standard Time",abbr:"GST",offset:0,isdst:!1,text:"(UTC) Monrovia, Reykjavik",utc:["Africa/Abidjan","Africa/Accra","Africa/Bamako","Africa/Banjul","Africa/Bissau","Africa/Conakry","Africa/Dakar","Africa/Freetown","Africa/Lome","Africa/Monrovia","Africa/Nouakchott","Africa/Ouagadougou","Africa/Sao_Tome","Atlantic/Reykjavik","Atlantic/St_Helena"]},{name:"W. Europe Standard Time",abbr:"WEDT",offset:2,isdst:!0,text:"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",utc:["Arctic/Longyearbyen","Europe/Amsterdam","Europe/Andorra","Europe/Berlin","Europe/Busingen","Europe/Gibraltar","Europe/Luxembourg","Europe/Malta","Europe/Monaco","Europe/Oslo","Europe/Rome","Europe/San_Marino","Europe/Stockholm","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Zurich"]},{name:"Central Europe Standard Time",abbr:"CEDT",offset:2,isdst:!0,text:"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",utc:["Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Podgorica","Europe/Prague","Europe/Tirane"]},{name:"Romance Standard Time",abbr:"RDT",offset:2,isdst:!0,text:"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",utc:["Africa/Ceuta","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris"]},{name:"Central European Standard Time",abbr:"CEDT",offset:2,isdst:!0,text:"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",utc:["Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb"]},{name:"W. Central Africa Standard Time",abbr:"WCAST",offset:1,isdst:!1,text:"(UTC+01:00) West Central Africa",utc:["Africa/Algiers","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Luanda","Africa/Malabo","Africa/Ndjamena","Africa/Niamey","Africa/Porto-Novo","Africa/Tunis","Etc/GMT-1"]},{name:"Namibia Standard Time",abbr:"NST",offset:1,isdst:!1,text:"(UTC+01:00) Windhoek",utc:["Africa/Windhoek"]},{name:"GTB Standard Time",abbr:"GDT",offset:3,isdst:!0,text:"(UTC+02:00) Athens, Bucharest",utc:["Asia/Nicosia","Europe/Athens","Europe/Bucharest","Europe/Chisinau"]},{name:"Middle East Standard Time",abbr:"MEDT",offset:3,isdst:!0,text:"(UTC+02:00) Beirut",utc:["Asia/Beirut"]},{name:"Egypt Standard Time",abbr:"EST",offset:2,isdst:!1,text:"(UTC+02:00) Cairo",utc:["Africa/Cairo"]},{name:"Syria Standard Time",abbr:"SDT",offset:3,isdst:!0,text:"(UTC+02:00) Damascus",utc:["Asia/Damascus"]},{name:"E. Europe Standard Time",abbr:"EEDT",offset:3,isdst:!0,text:"(UTC+02:00) E. Europe"},{name:"South Africa Standard Time",abbr:"SAST",offset:2,isdst:!1,text:"(UTC+02:00) Harare, Pretoria",utc:["Africa/Blantyre","Africa/Bujumbura","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Kigali","Africa/Lubumbashi","Africa/Lusaka","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Etc/GMT-2"]},{name:"FLE Standard Time",abbr:"FDT",offset:3,isdst:!0,text:"(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",utc:["Europe/Helsinki","Europe/Kiev","Europe/Mariehamn","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Uzhgorod","Europe/Vilnius","Europe/Zaporozhye"]},{name:"Turkey Standard Time",abbr:"TDT",offset:3,isdst:!0,text:"(UTC+02:00) Istanbul",utc:["Europe/Istanbul"]},{name:"Israel Standard Time",abbr:"JDT",offset:3,isdst:!0,text:"(UTC+02:00) Jerusalem",utc:["Asia/Jerusalem"]},{name:"Libya Standard Time",abbr:"LST",offset:2,isdst:!1,text:"(UTC+02:00) Tripoli",utc:["Africa/Tripoli"]},{name:"Jordan Standard Time",abbr:"JST",offset:3,isdst:!1,text:"(UTC+03:00) Amman",utc:["Asia/Amman"]},{name:"Arabic Standard Time",abbr:"AST",offset:3,isdst:!1,text:"(UTC+03:00) Baghdad",utc:["Asia/Baghdad"]},{name:"Kaliningrad Standard Time",abbr:"KST",offset:3,isdst:!1,text:"(UTC+03:00) Kaliningrad, Minsk",utc:["Europe/Kaliningrad","Europe/Minsk"]},{name:"Arab Standard Time",abbr:"AST",offset:3,isdst:!1,text:"(UTC+03:00) Kuwait, Riyadh",utc:["Asia/Aden","Asia/Bahrain","Asia/Kuwait","Asia/Qatar","Asia/Riyadh"]},{name:"E. Africa Standard Time",abbr:"EAST",offset:3,isdst:!1,text:"(UTC+03:00) Nairobi",utc:["Africa/Addis_Ababa","Africa/Asmera","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Mogadishu","Africa/Nairobi","Antarctica/Syowa","Etc/GMT-3","Indian/Antananarivo","Indian/Comoro","Indian/Mayotte"]},{name:"Iran Standard Time",abbr:"IDT",offset:4.5,isdst:!0,text:"(UTC+03:30) Tehran",utc:["Asia/Tehran"]},{name:"Arabian Standard Time",abbr:"AST",offset:4,isdst:!1,text:"(UTC+04:00) Abu Dhabi, Muscat",utc:["Asia/Dubai","Asia/Muscat","Etc/GMT-4"]},{name:"Azerbaijan Standard Time",abbr:"ADT",offset:5,isdst:!0,text:"(UTC+04:00) Baku",utc:["Asia/Baku"]},{name:"Russian Standard Time",abbr:"RST",offset:4,isdst:!1,text:"(UTC+04:00) Moscow, St. Petersburg, Volgograd",utc:["Europe/Moscow","Europe/Samara","Europe/Simferopol","Europe/Volgograd"]},{name:"Mauritius Standard Time",abbr:"MST",offset:4,isdst:!1,text:"(UTC+04:00) Port Louis",utc:["Indian/Mahe","Indian/Mauritius","Indian/Reunion"]},{name:"Georgian Standard Time",abbr:"GST",offset:4,isdst:!1,text:"(UTC+04:00) Tbilisi",utc:["Asia/Tbilisi"]},{name:"Caucasus Standard Time",abbr:"CST",offset:4,isdst:!1,text:"(UTC+04:00) Yerevan",utc:["Asia/Yerevan"]},{name:"Afghanistan Standard Time",abbr:"AST",offset:4.5,isdst:!1,text:"(UTC+04:30) Kabul",utc:["Asia/Kabul"]},{name:"West Asia Standard Time",abbr:"WAST",offset:5,isdst:!1,text:"(UTC+05:00) Ashgabat, Tashkent",utc:["Antarctica/Mawson","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Dushanbe","Asia/Oral","Asia/Samarkand","Asia/Tashkent","Etc/GMT-5","Indian/Kerguelen","Indian/Maldives"]},{name:"Pakistan Standard Time",abbr:"PST",offset:5,isdst:!1,text:"(UTC+05:00) Islamabad, Karachi",utc:["Asia/Karachi"]},{name:"India Standard Time",abbr:"IST",offset:5.5,isdst:!1,text:"(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",utc:["Asia/Calcutta"]},{name:"Sri Lanka Standard Time",abbr:"SLST",offset:5.5,isdst:!1,text:"(UTC+05:30) Sri Jayawardenepura",utc:["Asia/Colombo"]},{name:"Nepal Standard Time",abbr:"NST",offset:5.75,isdst:!1,text:"(UTC+05:45) Kathmandu",utc:["Asia/Katmandu"]},{name:"Central Asia Standard Time",abbr:"CAST",offset:6,isdst:!1,text:"(UTC+06:00) Astana",utc:["Antarctica/Vostok","Asia/Almaty","Asia/Bishkek","Asia/Qyzylorda","Asia/Urumqi","Etc/GMT-6","Indian/Chagos"]},{name:"Bangladesh Standard Time",abbr:"BST",offset:6,isdst:!1,text:"(UTC+06:00) Dhaka",utc:["Asia/Dhaka","Asia/Thimphu"]},{name:"Ekaterinburg Standard Time",abbr:"EST",offset:6,isdst:!1,text:"(UTC+06:00) Ekaterinburg",utc:["Asia/Yekaterinburg"]},{name:"Myanmar Standard Time",abbr:"MST",offset:6.5,isdst:!1,text:"(UTC+06:30) Yangon (Rangoon)",utc:["Asia/Rangoon","Indian/Cocos"]},{name:"SE Asia Standard Time",abbr:"SAST",offset:7,isdst:!1,text:"(UTC+07:00) Bangkok, Hanoi, Jakarta",utc:["Antarctica/Davis","Asia/Bangkok","Asia/Hovd","Asia/Jakarta","Asia/Phnom_Penh","Asia/Pontianak","Asia/Saigon","Asia/Vientiane","Etc/GMT-7","Indian/Christmas"]},{name:"N. Central Asia Standard Time",abbr:"NCAST",offset:7,isdst:!1,text:"(UTC+07:00) Novosibirsk",utc:["Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk"]},{name:"China Standard Time",abbr:"CST",offset:8,isdst:!1,text:"(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",utc:["Asia/Hong_Kong","Asia/Macau","Asia/Shanghai"]},{name:"North Asia Standard Time",abbr:"NAST",offset:8,isdst:!1,text:"(UTC+08:00) Krasnoyarsk",utc:["Asia/Krasnoyarsk"]},{name:"Singapore Standard Time",abbr:"MPST",offset:8,isdst:!1,text:"(UTC+08:00) Kuala Lumpur, Singapore",utc:["Asia/Brunei","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Makassar","Asia/Manila","Asia/Singapore","Etc/GMT-8"]},{name:"W. Australia Standard Time",abbr:"WAST",offset:8,isdst:!1,text:"(UTC+08:00) Perth",utc:["Antarctica/Casey","Australia/Perth"]},{name:"Taipei Standard Time",abbr:"TST",offset:8,isdst:!1,text:"(UTC+08:00) Taipei",utc:["Asia/Taipei"]},{name:"Ulaanbaatar Standard Time",abbr:"UST",offset:8,isdst:!1,text:"(UTC+08:00) Ulaanbaatar",utc:["Asia/Choibalsan","Asia/Ulaanbaatar"]},{name:"North Asia East Standard Time",abbr:"NAEST",offset:9,isdst:!1,text:"(UTC+09:00) Irkutsk",utc:["Asia/Irkutsk"]},{name:"Tokyo Standard Time",abbr:"TST",offset:9,isdst:!1,text:"(UTC+09:00) Osaka, Sapporo, Tokyo",utc:["Asia/Dili","Asia/Jayapura","Asia/Tokyo","Etc/GMT-9","Pacific/Palau"]},{name:"Korea Standard Time",abbr:"KST",offset:9,isdst:!1,text:"(UTC+09:00) Seoul",utc:["Asia/Pyongyang","Asia/Seoul"]},{name:"Cen. Australia Standard Time",abbr:"CAST",offset:9.5,isdst:!1,text:"(UTC+09:30) Adelaide",utc:["Australia/Adelaide","Australia/Broken_Hill"]},{name:"AUS Central Standard Time",abbr:"ACST",offset:9.5,isdst:!1,text:"(UTC+09:30) Darwin",utc:["Australia/Darwin"]},{name:"E. Australia Standard Time",abbr:"EAST",offset:10,isdst:!1,text:"(UTC+10:00) Brisbane",utc:["Australia/Brisbane","Australia/Lindeman"]},{name:"AUS Eastern Standard Time",abbr:"AEST",offset:10,isdst:!1,text:"(UTC+10:00) Canberra, Melbourne, Sydney",utc:["Australia/Melbourne","Australia/Sydney"]},{name:"West Pacific Standard Time",abbr:"WPST",offset:10,isdst:!1,text:"(UTC+10:00) Guam, Port Moresby",utc:["Antarctica/DumontDUrville","Etc/GMT-10","Pacific/Guam","Pacific/Port_Moresby","Pacific/Saipan","Pacific/Truk"]},{name:"Tasmania Standard Time",abbr:"TST",offset:10,isdst:!1,text:"(UTC+10:00) Hobart",utc:["Australia/Currie","Australia/Hobart"]},{name:"Yakutsk Standard Time",abbr:"YST",offset:10,isdst:!1,text:"(UTC+10:00) Yakutsk",utc:["Asia/Chita","Asia/Khandyga","Asia/Yakutsk"]},{name:"Central Pacific Standard Time",abbr:"CPST",offset:11,isdst:!1,text:"(UTC+11:00) Solomon Is., New Caledonia",utc:["Antarctica/Macquarie","Etc/GMT-11","Pacific/Efate","Pacific/Guadalcanal","Pacific/Kosrae","Pacific/Noumea","Pacific/Ponape"]},{name:"Vladivostok Standard Time",abbr:"VST",offset:11,isdst:!1,text:"(UTC+11:00) Vladivostok",utc:["Asia/Sakhalin","Asia/Ust-Nera","Asia/Vladivostok"]},{name:"New Zealand Standard Time",abbr:"NZST",offset:12,isdst:!1,text:"(UTC+12:00) Auckland, Wellington",utc:["Antarctica/McMurdo","Pacific/Auckland"]},{name:"UTC+12",abbr:"U",offset:12,isdst:!1,text:"(UTC+12:00) Coordinated Universal Time+12",utc:["Etc/GMT-12","Pacific/Funafuti","Pacific/Kwajalein","Pacific/Majuro","Pacific/Nauru","Pacific/Tarawa","Pacific/Wake","Pacific/Wallis"]},{name:"Fiji Standard Time",abbr:"FST",offset:12,isdst:!1,text:"(UTC+12:00) Fiji",utc:["Pacific/Fiji"]},{name:"Magadan Standard Time",abbr:"MST",offset:12,isdst:!1,text:"(UTC+12:00) Magadan",utc:["Asia/Anadyr","Asia/Kamchatka","Asia/Magadan","Asia/Srednekolymsk"]},{name:"Kamchatka Standard Time",abbr:"KDT",offset:13,isdst:!0,text:"(UTC+12:00) Petropavlovsk-Kamchatsky - Old"},{name:"Tonga Standard Time",abbr:"TST",offset:13,isdst:!1,text:"(UTC+13:00) Nuku'alofa",utc:["Etc/GMT-13","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Tongatapu"]},{name:"Samoa Standard Time",abbr:"SST",offset:13,isdst:!1,text:"(UTC+13:00) Samoa",utc:["Pacific/Apia"]}]},q=Object.prototype.hasOwnProperty,r=Object.keys||function(a){var b=[];for(var c in a)q.call(a,c)&&b.push(c);return b};a.prototype.get=function(a){return g(p[a])},a.prototype.mac_address=function(a){a=b(a),a.separator||(a.separator=a.networkVersion?".":":");var c="ABCDEF1234567890",d="";return d=a.networkVersion?this.n(this.string,3,{pool:c,length:4}).join(a.separator):this.n(this.string,6,{pool:c,length:2}).join(a.separator)},a.prototype.normal=function(a){if(a=b(a,{mean:0,dev:1,pool:[]}),c(a.pool.constructor!==Array,"Chance: The pool option must be a valid array."),a.pool.length>0)return this.normal_pool(a);var d,e,f,g,h=a.mean,i=a.dev;do e=2*this.random()-1,f=2*this.random()-1,d=e*e+f*f;while(d>=1);return g=e*Math.sqrt(-2*Math.log(d)/d),i*g+h},a.prototype.normal_pool=function(a){var b=0;do{var c=Math.round(this.normal({mean:a.mean,dev:a.dev}));if(c<a.pool.length&&c>=0)return a.pool[c];b++}while(100>b);throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.")},a.prototype.radio=function(a){a=b(a,{side:"?"});var c="";switch(a.side.toLowerCase()){case"east":case"e":c="W";break;case"west":case"w":c="K";break;default:c=this.character({pool:"KW"})}return c+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})+this.character({alpha:!0,casing:"upper"})},a.prototype.set=function(a,b){"string"==typeof a?p[a]=b:p=g(a,p)},a.prototype.tv=function(a){return this.radio(a)},a.prototype.cnpj=function(){var a=this.n(this.natural,8,{max:9}),b=2+6*a[7]+7*a[6]+8*a[5]+9*a[4]+2*a[3]+3*a[2]+4*a[1]+5*a[0];b=11-b%11,b>=10&&(b=0);var c=2*b+3+7*a[7]+8*a[6]+9*a[5]+2*a[4]+3*a[3]+4*a[2]+5*a[1]+6*a[0];return c=11-c%11,c>=10&&(c=0),""+a[0]+a[1]+"."+a[2]+a[3]+a[4]+"."+a[5]+a[6]+a[7]+"/0001-"+b+c},a.prototype.mersenne_twister=function(a){return new s(a)},a.prototype.blueimp_md5=function(){return new t};var s=function(a){void 0===a&&(a=Math.floor(Math.random()*Math.pow(10,13))),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(a)};s.prototype.init_genrand=function(a){for(this.mt[0]=a>>>0,this.mti=1;this.mti<this.N;this.mti++)a=this.mt[this.mti-1]^this.mt[this.mti-1]>>>30,this.mt[this.mti]=(1812433253*((4294901760&a)>>>16)<<16)+1812433253*(65535&a)+this.mti,this.mt[this.mti]>>>=0},s.prototype.init_by_array=function(a,b){var c,d,e=1,f=0;for(this.init_genrand(19650218),c=this.N>b?this.N:b;c;c--)d=this.mt[e-1]^this.mt[e-1]>>>30,this.mt[e]=(this.mt[e]^(1664525*((4294901760&d)>>>16)<<16)+1664525*(65535&d))+a[f]+f,this.mt[e]>>>=0,e++,f++,e>=this.N&&(this.mt[0]=this.mt[this.N-1],e=1),f>=b&&(f=0);for(c=this.N-1;c;c--)d=this.mt[e-1]^this.mt[e-1]>>>30,this.mt[e]=(this.mt[e]^(1566083941*((4294901760&d)>>>16)<<16)+1566083941*(65535&d))-e,this.mt[e]>>>=0,e++,e>=this.N&&(this.mt[0]=this.mt[this.N-1],e=1);this.mt[0]=2147483648},s.prototype.genrand_int32=function(){var a,b=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var c;for(this.mti===this.N+1&&this.init_genrand(5489),c=0;c<this.N-this.M;c++)a=this.mt[c]&this.UPPER_MASK|this.mt[c+1]&this.LOWER_MASK,this.mt[c]=this.mt[c+this.M]^a>>>1^b[1&a];for(;c<this.N-1;c++)a=this.mt[c]&this.UPPER_MASK|this.mt[c+1]&this.LOWER_MASK,this.mt[c]=this.mt[c+(this.M-this.N)]^a>>>1^b[1&a];a=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^a>>>1^b[1&a],this.mti=0}return a=this.mt[this.mti++],a^=a>>>11,a^=a<<7&2636928640,a^=a<<15&4022730752,a^=a>>>18,a>>>0},s.prototype.genrand_int31=function(){return this.genrand_int32()>>>1},s.prototype.genrand_real1=function(){return this.genrand_int32()*(1/4294967295)},s.prototype.random=function(){return this.genrand_int32()*(1/4294967296)},s.prototype.genrand_real3=function(){return(this.genrand_int32()+.5)*(1/4294967296)},s.prototype.genrand_res53=function(){var a=this.genrand_int32()>>>5,b=this.genrand_int32()>>>6;return(67108864*a+b)*(1/9007199254740992)};var t=function(){};t.prototype.VERSION="1.0.1",t.prototype.safe_add=function(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c},t.prototype.bit_roll=function(a,b){return a<<b|a>>>32-b},t.prototype.md5_cmn=function(a,b,c,d,e,f){return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(b,a),this.safe_add(d,f)),e),c)},t.prototype.md5_ff=function(a,b,c,d,e,f,g){return this.md5_cmn(b&c|~b&d,a,b,e,f,g)},t.prototype.md5_gg=function(a,b,c,d,e,f,g){return this.md5_cmn(b&d|c&~d,a,b,e,f,g)},t.prototype.md5_hh=function(a,b,c,d,e,f,g){return this.md5_cmn(b^c^d,a,b,e,f,g)},t.prototype.md5_ii=function(a,b,c,d,e,f,g){return this.md5_cmn(c^(b|~d),a,b,e,f,g)},t.prototype.binl_md5=function(a,b){a[b>>5]|=128<<b%32,a[(b+64>>>9<<4)+14]=b;var c,d,e,f,g,h=1732584193,i=-271733879,j=-1732584194,k=271733878;for(c=0;c<a.length;c+=16)d=h,e=i,f=j,g=k,h=this.md5_ff(h,i,j,k,a[c],7,-680876936),k=this.md5_ff(k,h,i,j,a[c+1],12,-389564586),j=this.md5_ff(j,k,h,i,a[c+2],17,606105819),i=this.md5_ff(i,j,k,h,a[c+3],22,-1044525330),h=this.md5_ff(h,i,j,k,a[c+4],7,-176418897),k=this.md5_ff(k,h,i,j,a[c+5],12,1200080426),j=this.md5_ff(j,k,h,i,a[c+6],17,-1473231341),i=this.md5_ff(i,j,k,h,a[c+7],22,-45705983),h=this.md5_ff(h,i,j,k,a[c+8],7,1770035416),k=this.md5_ff(k,h,i,j,a[c+9],12,-1958414417),j=this.md5_ff(j,k,h,i,a[c+10],17,-42063),i=this.md5_ff(i,j,k,h,a[c+11],22,-1990404162),h=this.md5_ff(h,i,j,k,a[c+12],7,1804603682),k=this.md5_ff(k,h,i,j,a[c+13],12,-40341101),j=this.md5_ff(j,k,h,i,a[c+14],17,-1502002290),i=this.md5_ff(i,j,k,h,a[c+15],22,1236535329),h=this.md5_gg(h,i,j,k,a[c+1],5,-165796510),k=this.md5_gg(k,h,i,j,a[c+6],9,-1069501632),j=this.md5_gg(j,k,h,i,a[c+11],14,643717713),i=this.md5_gg(i,j,k,h,a[c],20,-373897302),h=this.md5_gg(h,i,j,k,a[c+5],5,-701558691),k=this.md5_gg(k,h,i,j,a[c+10],9,38016083),j=this.md5_gg(j,k,h,i,a[c+15],14,-660478335),i=this.md5_gg(i,j,k,h,a[c+4],20,-405537848),h=this.md5_gg(h,i,j,k,a[c+9],5,568446438),k=this.md5_gg(k,h,i,j,a[c+14],9,-1019803690),j=this.md5_gg(j,k,h,i,a[c+3],14,-187363961),i=this.md5_gg(i,j,k,h,a[c+8],20,1163531501),h=this.md5_gg(h,i,j,k,a[c+13],5,-1444681467),k=this.md5_gg(k,h,i,j,a[c+2],9,-51403784),j=this.md5_gg(j,k,h,i,a[c+7],14,1735328473),i=this.md5_gg(i,j,k,h,a[c+12],20,-1926607734),h=this.md5_hh(h,i,j,k,a[c+5],4,-378558),k=this.md5_hh(k,h,i,j,a[c+8],11,-2022574463),j=this.md5_hh(j,k,h,i,a[c+11],16,1839030562),i=this.md5_hh(i,j,k,h,a[c+14],23,-35309556),h=this.md5_hh(h,i,j,k,a[c+1],4,-1530992060),k=this.md5_hh(k,h,i,j,a[c+4],11,1272893353),j=this.md5_hh(j,k,h,i,a[c+7],16,-155497632),i=this.md5_hh(i,j,k,h,a[c+10],23,-1094730640),h=this.md5_hh(h,i,j,k,a[c+13],4,681279174),k=this.md5_hh(k,h,i,j,a[c],11,-358537222),j=this.md5_hh(j,k,h,i,a[c+3],16,-722521979),i=this.md5_hh(i,j,k,h,a[c+6],23,76029189),h=this.md5_hh(h,i,j,k,a[c+9],4,-640364487),k=this.md5_hh(k,h,i,j,a[c+12],11,-421815835),j=this.md5_hh(j,k,h,i,a[c+15],16,530742520),i=this.md5_hh(i,j,k,h,a[c+2],23,-995338651),h=this.md5_ii(h,i,j,k,a[c],6,-198630844),k=this.md5_ii(k,h,i,j,a[c+7],10,1126891415),j=this.md5_ii(j,k,h,i,a[c+14],15,-1416354905),i=this.md5_ii(i,j,k,h,a[c+5],21,-57434055),h=this.md5_ii(h,i,j,k,a[c+12],6,1700485571),k=this.md5_ii(k,h,i,j,a[c+3],10,-1894986606),j=this.md5_ii(j,k,h,i,a[c+10],15,-1051523),i=this.md5_ii(i,j,k,h,a[c+1],21,-2054922799),h=this.md5_ii(h,i,j,k,a[c+8],6,1873313359),k=this.md5_ii(k,h,i,j,a[c+15],10,-30611744),j=this.md5_ii(j,k,h,i,a[c+6],15,-1560198380),i=this.md5_ii(i,j,k,h,a[c+13],21,1309151649),h=this.md5_ii(h,i,j,k,a[c+4],6,-145523070),k=this.md5_ii(k,h,i,j,a[c+11],10,-1120210379),j=this.md5_ii(j,k,h,i,a[c+2],15,718787259),i=this.md5_ii(i,j,k,h,a[c+9],21,-343485551),h=this.safe_add(h,d),i=this.safe_add(i,e),j=this.safe_add(j,f),k=this.safe_add(k,g);return[h,i,j,k]},t.prototype.binl2rstr=function(a){var b,c="";for(b=0;b<32*a.length;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c},t.prototype.rstr2binl=function(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(b=0;b<8*a.length;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c},t.prototype.rstr_md5=function(a){return this.binl2rstr(this.binl_md5(this.rstr2binl(a),8*a.length))},t.prototype.rstr_hmac_md5=function(a,b){var c,d,e=this.rstr2binl(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=this.binl_md5(e,8*a.length)),c=0;16>c;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=this.binl_md5(f.concat(this.rstr2binl(b)),512+8*b.length),this.binl2rstr(this.binl_md5(g.concat(d),640))},t.prototype.rstr2hex=function(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e},t.prototype.str2rstr_utf8=function(a){return unescape(encodeURIComponent(a))},t.prototype.raw_md5=function(a){return this.rstr_md5(this.str2rstr_utf8(a))},t.prototype.hex_md5=function(a){return this.rstr2hex(this.raw_md5(a))},t.prototype.raw_hmac_md5=function(a,b){return this.rstr_hmac_md5(this.str2rstr_utf8(a),this.str2rstr_utf8(b))},t.prototype.hex_hmac_md5=function(a,b){return this.rstr2hex(this.raw_hmac_md5(a,b))},t.prototype.md5=function(a,b,c){return b?c?this.raw_hmac_md5(b,a):this.hex_hmac_md5(b,a):c?this.raw_md5(a):this.hex_md5(a)},"undefined"!=typeof exports&&("undefined"!=typeof module&&module.exports&&(exports=module.exports=a),exports.Chance=a),"function"==typeof define&&define.amd&&define([],function(){return a}),"undefined"!=typeof importScripts&&(chance=new a),"object"==typeof window&&"object"==typeof window.document&&(window.Chance=a,window.chance=new a)}();
+//# sourceMappingURL=chance.min.js.map \ No newline at end of file
diff --git a/src/node_modules/chance/docs/chance.min.js.map b/src/node_modules/chance/docs/chance.min.js.map
new file mode 100644
index 0000000..6b1dc59
--- /dev/null
+++ b/src/node_modules/chance/docs/chance.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chance.min.js","sources":["../chance.js"],"names":["Chance","seed","this","random","arguments","length","i","seedling","Object","prototype","toString","call","j","hash","k","charCodeAt","mt","mersenne_twister","bimd5","blueimp_md5","initOptions","options","defaults","testRange","test","errorMessage","RangeError","diceFn","range","natural","_copyObject","source","target","key","keys","o_keys","l","_copyArray","copyObject","_target","isArray","Array","MAX_INT","MIN_INT","NUMBERS","CHARS_LOWER","CHARS_UPPER","toUpperCase","HEX_POOL","slice","VERSION","base64","Error","btoa","Buffer","input","bool","likelihood","character","alpha","symbols","letters","pool","casing","charAt","max","floating","fixed","precision","num","Math","pow","min","integer","num_fixed","toFixed","parseFloat","floor","string","text","n","join","capitalize","word","substr","mixin","obj","func_name","unique","fn","comparator","arr","val","indexOf","result","count","MAX_DUPLICATES","params","clonedParams","JSON","parse","stringify","apply","push","pad","number","width","pick","shuffle","pickone","pickset","old_array","new_array","Number","splice","weighted","weights","trim","sum","weightIndex","chosenIdx","selected","total","lastGoodIdx","chosen","paragraph","sentences","sentence_array","sentence","words","punctuation","word_array","syllable","chr","consonants","vowels","all","syllables","substring","age","ageRange","type","birthday","currentYear","Date","getFullYear","setFullYear","year","date","cpf","formatted","d1","d2","replace","cnpj","first","gender","nationality","get","toLowerCase","extraGenders","concat","last","israelId","x","y","thisDigit","parseInt","mrz","checkDigit","split","multipliers","runningTotal","forEach","idx","pos","generate","opts","issuer","passportNumber","dob","expiry","that","getMonth","getDate","name","middle","middle_initial","prefix","suffix","name_prefixes","prefixes","abbreviation","name_prefix","full","HIDN","idn_pool","idn_chrs","idn","ssn","ssnFour","dashes","ssn_pool","dash","name_suffixes","suffixes","name_suffix","nationalities","android_id","apple_token","wp8_anid2","wp7_anid","guid","bb_pin","avatar","url","URL_BASE","PROTOCOLS","http","https","FILE_TYPES","bmp","gif","jpg","png","FALLBACKS","404","mm","identicon","monsterid","wavatar","retro","blank","RATINGS","g","pg","r","protocol","email","fileExtension","size","fallback","rating","constructor","md5","color","gray","value","delimiter","rgb","hasAlpha","rgbValue","alphaChanal","colorValue","hex","start","end","withHash","simbol","expression","isGrayscale","format","grayscale","domain","tld","fbid","google_analytics","account","property","hashtag","ip","ipv6","ip_addr","klout","semver","include_prerelease","prerelease","rpg","tlds","twitter","domain_prefix","path","extensions","extension","port","address","street","altitude","areacode","parens","city","coordinates","latitude","longitude","countries","country","depth","geohash","geojson","phone","numPick","self","ukNum","parts","section","sections","area","mobile","match","exchange","subscriber","postal","pd","fsa","ldu","counties","county","provinces","province","state","states","us_states_and_dc","territories","armed_forces","short_suffix","street_suffix","street_suffixes","zip","plusfour","ampm","date_string","american","getTime","m","month","raw","daysInMonth","days","numeric","day","hour","twentyfour","minute","second","millisecond","hammertime","months","timestamp","weekday","weekday_only","weekdays","cc","to_generate","cc_type","luhn_calculate","cc_types","types","short_name","currency_types","currency","timezones","timezone","currency_pair","returnAsString","currencies","reduce","acc","item","code","dollar","cents","undefined","euro","toLocaleString","exp","exp_year","exp_month","future","month_int","curMonth","curYear","vat","it_vat","cf","name_generator","isLast","temp","return_value","map","c","date_generator","lettermonths","checkdigit_generator","range1","range2","evens","odds","digit","pl_pesel","controlNumber","pl_nip","pl_regon","d4","d6","d8","d10","d12","d20","d30","d100","thrown","bits","rolls","p","version","guid_pool","variant_pool","luhn_check","str","digits","reverse","file","fileName","fileExtention","fileOptions","poolCollectionKey","typeRange","extention","extentions","extentionObjectCollection","fileType","data","firstNames","male","en","it","female","lastNames","uk","ca","country_regions","us","colorNames","raster","vector","3d","document","abbr","offset","isdst","utc","o_hasOwnProperty","hasOwnProperty","mac_address","separator","networkVersion","mac_pool","mac","normal","mean","dev","normal_pool","s","u","v","norm","sqrt","log","performanceCounter","round","radio","side","fl","set","values","tv","MersenneTwister","BlueImpMD5","N","M","MATRIX_A","UPPER_MASK","LOWER_MASK","mti","init_genrand","init_by_array","init_key","key_length","genrand_int32","mag01","kk","genrand_int31","genrand_real1","genrand_real3","genrand_res53","a","b","safe_add","lsw","msw","bit_roll","cnt","md5_cmn","q","t","md5_ff","d","md5_gg","md5_hh","md5_ii","binl_md5","len","olda","oldb","oldc","oldd","binl2rstr","output","String","fromCharCode","rstr2binl","rstr_md5","rstr_hmac_md5","bkey","ipad","opad","rstr2hex","hex_tab","str2rstr_utf8","unescape","encodeURIComponent","raw_md5","hex_md5","raw_hmac_md5","hex_hmac_md5","exports","module","define","amd","importScripts","chance","window"],"mappings":"CAKA,WAcI,QAASA,GAAQC,GACb,KAAMC,eAAgBF,IAClB,MAAe,OAARC,EAAe,GAAID,GAAW,GAAIA,GAAOC,EAIpD,IAAoB,kBAATA,GAEP,MADAC,MAAKC,OAASF,EACPC,IAGPE,WAAUC,SAEVH,KAAKD,KAAO,EAKhB,KAAK,GAAIK,GAAI,EAAGA,EAAIF,UAAUC,OAAQC,IAAK,CACvC,GAAIC,GAAW,CACf,IAAqD,oBAAjDC,OAAOC,UAAUC,SAASC,KAAKP,UAAUE,IACzC,IAAK,GAAIM,GAAI,EAAGA,EAAIR,UAAUE,GAAGD,OAAQO,IAAK,CAG1C,IAAK,GADDC,GAAO,EACFC,EAAI,EAAGA,EAAIV,UAAUE,GAAGD,OAAQS,IACrCD,EAAOT,UAAUE,GAAGS,WAAWD,IAAMD,GAAQ,IAAMA,GAAQ,IAAMA,CAErEN,IAAYM,MAGhBN,GAAWH,UAAUE,EAEzBJ,MAAKD,OAASG,UAAUC,OAASC,GAAKC,EAU1C,MANAL,MAAKc,GAAKd,KAAKe,iBAAiBf,KAAKD,MACrCC,KAAKgB,MAAQhB,KAAKiB,cAClBjB,KAAKC,OAAS,WACV,MAAOD,MAAKc,GAAGb,OAAOD,KAAKD,OAGxBC,KAMX,QAASkB,GAAYC,EAASC,GAG1B,GAFAD,IAAYA,MAERC,EACA,IAAK,GAAIhB,KAAKgB,GACgB,mBAAfD,GAAQf,KACfe,EAAQf,GAAKgB,EAAShB,GAKlC,OAAOe,GAGX,QAASE,GAAUC,EAAMC,GACrB,GAAID,EACA,KAAM,IAAIE,YAAWD,GA4yD7B,QAASE,GAAQC,GACb,MAAO,YACH,MAAO1B,MAAK2B,QAAQD,IA25E5B,QAASE,GAAYC,EAAQC,GAI3B,IAAK,GAFDC,GADAC,EAAOC,EAAOJ,GAGTzB,EAAI,EAAG8B,EAAIF,EAAK7B,OAAY+B,EAAJ9B,EAAOA,IACtC2B,EAAMC,EAAK5B,GACX0B,EAAOC,GAAOF,EAAOE,IAAQD,EAAOC,GAIxC,QAASI,GAAWN,EAAQC,GAC1B,IAAK,GAAI1B,GAAI,EAAG8B,EAAIL,EAAO1B,OAAY+B,EAAJ9B,EAAOA,IACxC0B,EAAO1B,GAAKyB,EAAOzB,GAIvB,QAASgC,GAAWP,EAAQQ,GACxB,GAAIC,GAAUC,MAAMD,QAAQT,GACxBC,EAASO,IAAYC,EAAU,GAAIC,OAAMV,EAAO1B,WAQpD,OANImC,GACFH,EAAWN,EAAQC,GAEnBF,EAAYC,EAAQC,GAGfA,EA9yIX,GAAIU,GAAU,iBACVC,GAAWD,EACXE,EAAU,aACVC,EAAc,6BACdC,EAAcD,EAAYE,cAC1BC,EAAYJ,EAAU,SAGtBK,EAAQR,MAAMhC,UAAUwC,KAgD5BjD,GAAOS,UAAUyC,QAAU,OA0B3B,IAAIC,GAAS,WACT,KAAM,IAAIC,OAAM,kCAIpB,WACwB,kBAATC,MACPF,EAASE,KACgB,kBAAXC,UACdH,EAAS,SAASI,GACd,MAAO,IAAID,QAAOC,GAAO7C,SAAS,eAe9CV,EAAOS,UAAU+C,KAAO,SAAUnC,GAgB9B,MAdAA,GAAUD,EAAYC,GAAUoC,WAAa,KAS7ClC,EACIF,EAAQoC,WAAa,GAAKpC,EAAQoC,WAAa,IAC/C,oDAGmB,IAAhBvD,KAAKC,SAAiBkB,EAAQoC,YAWzCzD,EAAOS,UAAUiD,UAAY,SAAUrC,GACnCA,EAAUD,EAAYC,GACtBE,EACIF,EAAQsC,OAAStC,EAAQuC,QACzB,iDAGJ,IACIC,GAASC,EADTF,EAAU,cAqBd,OAjBIC,GADmB,UAAnBxC,EAAQ0C,OACElB,EACgB,UAAnBxB,EAAQ0C,OACLjB,EAEAD,EAAcC,EAIxBgB,EADAzC,EAAQyC,KACDzC,EAAQyC,KACRzC,EAAQsC,MACRE,EACAxC,EAAQuC,QACRA,EAEAC,EAAUjB,EAAUgB,EAGxBE,EAAKE,OAAO9D,KAAK2B,SAASoC,IAAMH,EAAKzD,OAAS,MAiBzDL,EAAOS,UAAUyD,SAAW,SAAU7C,GAClCA,EAAUD,EAAYC,GAAU8C,MAAQ,IACxC5C,EACIF,EAAQ8C,OAAS9C,EAAQ+C,UACzB,mDAGJ,IAAIC,GACAF,EAAQG,KAAKC,IAAI,GAAIlD,EAAQ8C,OAE7BF,EAAMvB,EAAUyB,EAChBK,GAAOP,CAEX1C,GACIF,EAAQmD,KAAOnD,EAAQ8C,OAAS9C,EAAQmD,IAAMA,EAC9C,8EAAgFA,GAEpFjD,EACIF,EAAQ4C,KAAO5C,EAAQ8C,OAAS9C,EAAQ4C,IAAMA,EAC9C,6EAA+EA,GAGnF5C,EAAUD,EAAYC,GAAWmD,IAAMA,EAAKP,IAAMA,IAKlDI,EAAMnE,KAAKuE,SAASD,IAAKnD,EAAQmD,IAAML,EAAOF,IAAK5C,EAAQ4C,IAAME,GACjE,IAAIO,IAAaL,EAAMF,GAAOQ,QAAQtD,EAAQ8C,MAE9C,OAAOS,YAAWF,IActB1E,EAAOS,UAAUgE,QAAU,SAAUpD,GAMjC,MAHAA,GAAUD,EAAYC,GAAUmD,IAAK7B,EAASsB,IAAKvB,IACnDnB,EAAUF,EAAQmD,IAAMnD,EAAQ4C,IAAK,2CAE9BK,KAAKO,MAAM3E,KAAKC,UAAYkB,EAAQ4C,IAAM5C,EAAQmD,IAAM,GAAKnD,EAAQmD,MAchFxE,EAAOS,UAAUoB,QAAU,SAAUR,GAGjC,MAFAA,GAAUD,EAAYC,GAAUmD,IAAK,EAAGP,IAAKvB,IAC7CnB,EAAUF,EAAQmD,IAAM,EAAG,yCACpBtE,KAAKuE,QAAQpD,IAUxBrB,EAAOS,UAAUqE,OAAS,SAAUzD,GAChCA,EAAUD,EAAYC,GAAWhB,OAAQH,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,OACpE1C,EAAUF,EAAQhB,OAAS,EAAG,2CAC9B,IAAIA,GAASgB,EAAQhB,OACjB0E,EAAO7E,KAAK8E,EAAE9E,KAAKwD,UAAWrD,EAAQgB,EAE1C,OAAO0D,GAAKE,KAAK,KAOrBjF,EAAOS,UAAUyE,WAAa,SAAUC,GACpC,MAAOA,GAAKnB,OAAO,GAAGjB,cAAgBoC,EAAKC,OAAO,IAGtDpF,EAAOS,UAAU4E,MAAQ,SAAUC,GAC/B,IAAK,GAAIC,KAAaD,GAClBtF,EAAOS,UAAU8E,GAAaD,EAAIC,EAEtC,OAAOrF,OAcXF,EAAOS,UAAU+E,OAAS,SAASC,EAAIpB,EAAKhD,GACxCE,EACkB,kBAAPkE,GACP,iDAGJ,IAAIC,GAAa,SAASC,EAAKC,GAAO,MAA4B,KAArBD,EAAIE,QAAQD,GAErDvE,KACAqE,EAAarE,EAAQqE,YAAcA,EAKvC,KAFA,GAAyBI,GAArBH,KAAUI,EAAQ,EAAWC,EAAuB,GAAN3B,EAAU4B,EAAShD,EAAMtC,KAAKP,UAAW,GAEpFuF,EAAItF,OAASgE,GAAK,CACrB,GAAI6B,GAAeC,KAAKC,MAAMD,KAAKE,UAAUJ,GAQ7C,IAPAH,EAASL,EAAGa,MAAMpG,KAAMgG,GACnBR,EAAWC,EAAKG,KACjBH,EAAIY,KAAKT,GAETC,EAAQ,KAGNA,EAAQC,EACV,KAAM,IAAItE,YAAW,kDAG7B,MAAOiE,IAYX3F,EAAOS,UAAUuE,EAAI,SAASS,EAAIT,GAC9BzD,EACkB,kBAAPkE,GACP,kDAGa,mBAANT,KACPA,EAAI,EAER,IAAI1E,GAAI0E,EAAGW,KAAUM,EAAShD,EAAMtC,KAAKP,UAAW,EAKpD,KAFAE,EAAIgE,KAAKL,IAAK,EAAG3D,GAEZ,KAAMA,IAAK,KACZqF,EAAIY,KAAKd,EAAGa,MAAMpG,KAAM+F,GAG5B,OAAON,IAIX3F,EAAOS,UAAU+F,IAAM,SAAUC,EAAQC,EAAOF,GAK5C,MAHAA,GAAMA,GAAO,IAEbC,GAAkB,GACXA,EAAOpG,QAAUqG,EAAQD,EAAS,GAAIhE,OAAMiE,EAAQD,EAAOpG,OAAS,GAAG4E,KAAKuB,GAAOC,GAI9FzG,EAAOS,UAAUkG,KAAO,SAAUhB,EAAKI,GACnC,GAAmB,IAAfJ,EAAItF,OACJ,KAAM,IAAIqB,YAAW,4CAEzB,OAAKqE,IAAmB,IAAVA,EAGH7F,KAAK0G,QAAQjB,GAAK1C,MAAM,EAAG8C,GAF3BJ,EAAIzF,KAAK2B,SAASoC,IAAK0B,EAAItF,OAAS,MAOnDL,EAAOS,UAAUoG,QAAU,SAAUlB,GACjC,GAAmB,IAAfA,EAAItF,OACN,KAAM,IAAIqB,YAAW,+CAEvB,OAAOiE,GAAIzF,KAAK2B,SAASoC,IAAK0B,EAAItF,OAAS,MAI/CL,EAAOS,UAAUqG,QAAU,SAAUnB,EAAKI,GACtC,GAAc,IAAVA,EACA,QAEJ,IAAmB,IAAfJ,EAAItF,OACJ,KAAM,IAAIqB,YAAW,+CAEzB,IAAY,EAARqE,EACA,KAAM,IAAIrE,YAAW,wCAEzB,OAAKqE,IAAmB,IAAVA,EAGH7F,KAAK0G,QAAQjB,GAAK1C,MAAM,EAAG8C,IAFzB7F,KAAK2G,QAAQlB,KAM9B3F,EAAOS,UAAUmG,QAAU,SAAUjB,GAMjC,IAAK,GALDoB,GAAYpB,EAAI1C,MAAM,GACtB+D,KACApG,EAAI,EACJP,EAAS4G,OAAOF,EAAU1G,QAErBC,EAAI,EAAOD,EAAJC,EAAYA,IAExBM,EAAIV,KAAK2B,SAASoC,IAAK8C,EAAU1G,OAAS,IAE1C2G,EAAU1G,GAAKyG,EAAUnG,GAEzBmG,EAAUG,OAAOtG,EAAG,EAGxB,OAAOoG,IAIXhH,EAAOS,UAAU0G,SAAW,SAAUxB,EAAKyB,EAASC,GAChD,GAAI1B,EAAItF,SAAW+G,EAAQ/G,OACvB,KAAM,IAAIqB,YAAW,iDAMzB,KAAK,GADDkE,GADA0B,EAAM,EAEDC,EAAc,EAAGA,EAAcH,EAAQ/G,SAAUkH,EACtD3B,EAAMwB,EAAQG,GACV3B,EAAM,IACN0B,GAAO1B,EAIf,IAAY,IAAR0B,EACA,KAAM,IAAI5F,YAAW,4CAIzB,IAKI8F,GALAC,EAAWvH,KAAKC,SAAWmH,EAG3BI,EAAQ,EACRC,EAAc,EAElB,KAAKJ,EAAc,EAAGA,EAAcH,EAAQ/G,SAAUkH,EAAa,CAG/D,GAFA3B,EAAMwB,EAAQG,GACdG,GAAS9B,EACLA,EAAM,EAAG,CACT,GAAgB8B,GAAZD,EAAmB,CACnBD,EAAYD,CACZ,OAEJI,EAAcJ,EAIdA,IAAiBH,EAAQ/G,OAAS,IAClCmH,EAAYG,GAIpB,GAAIC,GAASjC,EAAI6B,EAOjB,OANAH,GAAwB,mBAATA,IAAwB,EAAQA,EAC3CA,IACA1B,EAAIuB,OAAOM,EAAW,GACtBJ,EAAQF,OAAOM,EAAW,IAGvBI,GAOX5H,EAAOS,UAAUoH,UAAY,SAAUxG,GACnCA,EAAUD,EAAYC,EAEtB,IAAIyG,GAAYzG,EAAQyG,WAAa5H,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,IAC5D8D,EAAiB7H,KAAK8E,EAAE9E,KAAK8H,SAAUF,EAE3C,OAAOC,GAAe9C,KAAK,MAK/BjF,EAAOS,UAAUuH,SAAW,SAAU3G,GAClCA,EAAUD,EAAYC,EAEtB,IAEI0D,GAFAkD,EAAQ5G,EAAQ4G,OAAS/H,KAAK2B,SAAS2C,IAAK,GAAIP,IAAK,KACrDiE,EAAc7G,EAAQ6G,YAChBC,EAAajI,KAAK8E,EAAE9E,KAAKiF,KAAM8C,EAiBzC,OAfAlD,GAAOoD,EAAWlD,KAAK,KAGvBF,EAAO7E,KAAKgF,WAAWH,GAGnBmD,KAAgB,GAAU,cAAc1G,KAAK0G,KAC7CA,EAAc,KAIdA,IACAnD,GAAQmD,GAGLnD,GAGX/E,EAAOS,UAAU2H,SAAW,SAAU/G,GAClCA,EAAUD,EAAYC,EAWtB,KAAK,GAJDgH,GALAhI,EAASgB,EAAQhB,QAAUH,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,IACtDqE,EAAa,qBACbC,EAAS,QACTC,EAAMF,EAAaC,EACnBxD,EAAO,GAKFzE,EAAI,EAAOD,EAAJC,EAAYA,IAGpB+H,EAFM,IAAN/H,EAEMJ,KAAKwD,WAAWI,KAAM0E,IACO,KAA5BF,EAAWzC,QAAQwC,GAEpBnI,KAAKwD,WAAWI,KAAMwE,IAGtBpI,KAAKwD,WAAWI,KAAMyE,IAGhCxD,GAAQsD,CAOZ,OAJIhH,GAAQ6D,aACRH,EAAO7E,KAAKgF,WAAWH,IAGpBA,GAGX/E,EAAOS,UAAU0E,KAAO,SAAU9D,GAC9BA,EAAUD,EAAYC,GAEtBE,EACIF,EAAQoH,WAAapH,EAAQhB,OAC7B,oDAGJ,IAAIoI,GAAYpH,EAAQoH,WAAavI,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,IAC5Dc,EAAO,EAEX,IAAI1D,EAAQhB,OAAQ,CAEhB,EACI0E,IAAQ7E,KAAKkI,iBACRrD,EAAK1E,OAASgB,EAAQhB,OAC/B0E,GAAOA,EAAK2D,UAAU,EAAGrH,EAAQhB,YAGjC,KAAK,GAAIC,GAAI,EAAOmI,EAAJnI,EAAeA,IAC3ByE,GAAQ7E,KAAKkI,UAQrB,OAJI/G,GAAQ6D,aACRH,EAAO7E,KAAKgF,WAAWH,IAGpBA,GAOX/E,EAAOS,UAAUkI,IAAM,SAAUtH,GAC7BA,EAAUD,EAAYC,EACtB,IAAIuH,EAEJ,QAAQvH,EAAQwH,MACZ,IAAK,QACDD,GAAYpE,IAAK,EAAGP,IAAK,GACzB,MACJ,KAAK,OACD2E,GAAYpE,IAAK,GAAIP,IAAK,GAC1B,MACJ,KAAK,QACD2E,GAAYpE,IAAK,GAAIP,IAAK,GAC1B,MACJ,KAAK,SACD2E,GAAYpE,IAAK,GAAIP,IAAK,IAC1B,MACJ,KAAK,MACD2E,GAAYpE,IAAK,EAAGP,IAAK,IACzB,MACJ,SACI2E,GAAYpE,IAAK,GAAIP,IAAK,IAIlC,MAAO/D,MAAK2B,QAAQ+G,IAGxB5I,EAAOS,UAAUqI,SAAW,SAAUzH,GAClC,GAAIsH,GAAMzI,KAAKyI,IAAItH,GACf0H,GAAc,GAAIC,OAAOC,aAE7B,IAAI5H,GAAWA,EAAQwH,KAAM,CACzB,GAAIrE,GAAM,GAAIwE,MACV/E,EAAM,GAAI+E,KACdxE,GAAI0E,YAAYH,EAAcJ,EAAM,GACpC1E,EAAIiF,YAAYH,EAAcJ,GAE9BtH,EAAUD,EAAYC,GAClBmD,IAAKA,EACLP,IAAKA,QAGT5C,GAAUD,EAAYC,GAClB8H,KAAMJ,EAAcJ,GAI5B,OAAOzI,MAAKkJ,KAAK/H,IAIrBrB,EAAOS,UAAU4I,IAAM,SAAUhI,GAC7BA,EAAUD,EAAYC,GAClBiI,WAAW,GAGf,IAAItE,GAAI9E,KAAK8E,EAAE9E,KAAK2B,QAAS,GAAKoC,IAAK,IACnCsF,EAAU,EAALvE,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,GAALA,EAAE,EACnEuE,GAAK,GAAMA,EAAK,GACZA,GAAI,KACJA,EAAK,EAET,IAAIC,GAAQ,EAAHD,EAAU,EAALvE,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,GAALA,EAAE,GAAW,GAALA,EAAE,EACzEwE,GAAK,GAAMA,EAAK,GACZA,GAAI,KACJA,EAAK,EAET,IAAIH,GAAM,GAAGrE,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAG,IAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAG,IAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAG,IAAIuE,EAAGC,CACzE,OAAOnI,GAAQiI,UAAYD,EAAMA,EAAII,QAAQ,MAAM,KAIvDzJ,EAAOS,UAAUiJ,KAAO,SAAUrI,GAC9BA,EAAUD,EAAYC,GAClBiI,WAAW,GAGf,IAAItE,GAAI9E,KAAK8E,EAAE9E,KAAK2B,QAAS,IAAMoC,IAAK,KACpCsF,EAAW,EAANvE,EAAE,IAAY,EAANA,EAAE,IAAW,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,EAC1FuE,GAAK,GAAMA,EAAK,GACT,EAAHA,IACAA,EAAK,EAET,IAAIC,GAAQ,EAAHD,EAAW,EAANvE,EAAE,IAAY,EAANA,EAAE,IAAW,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,GAAU,EAALA,EAAE,EAC/FwE,GAAK,GAAMA,EAAK,GACT,EAAHA,IACAA,EAAK,EAET,IAAIE,GAAO,GAAG1E,EAAE,GAAGA,EAAE,GAAG,IAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAG,IAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAG,IAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAIA,EAAE,IAAI,IAAIuE,EAAGC,CAC/F,OAAOnI,GAAQiI,UAAYI,EAAOA,EAAKD,QAAQ,MAAM,KAGzDzJ,EAAOS,UAAUkJ,MAAQ,SAAUtI,GAE/B,MADAA,GAAUD,EAAYC,GAAUuI,OAAQ1J,KAAK0J,SAAUC,YAAa,OAC7D3J,KAAKyG,KAAKzG,KAAK4J,IAAI,cAAczI,EAAQuI,OAAOG,eAAe1I,EAAQwI,YAAYE,iBAG9F/J,EAAOS,UAAUmJ,OAAS,SAAUvI,GAEhC,MADAA,GAAUD,EAAYC,GAAU2I,kBACzB9J,KAAKyG,MAAM,OAAQ,UAAUsD,OAAO5I,EAAQ2I,gBAGvDhK,EAAOS,UAAUyJ,KAAO,SAAU7I,GAE9B,MADAA,GAAUD,EAAYC,GAAUwI,YAAa,OACtC3J,KAAKyG,KAAKzG,KAAK4J,IAAI,aAAazI,EAAQwI,YAAYE,iBAG/D/J,EAAOS,UAAU0J,SAAS,WAGtB,IAAK,GAFDC,GAAElK,KAAK4E,QAAQhB,KAAM,aAAazD,OAAO,IACzCgK,EAAE,EACG/J,EAAE,EAAEA,EAAE8J,EAAE/J,OAAOC,IAAI,CACxB,GAAIgK,GAAYF,EAAE9J,IAAOA,EAAE,IAAIiK,SAASjK,EAAE,GAAK,EAAI,EACnDgK,GAAUpK,KAAKsG,IAAI8D,EAAU,GAAG5J,WAChC4J,EAAUC,SAASD,EAAU,IAAMC,SAASD,EAAU,IACtDD,GAAIC,EAGR,MADAF,KAAK,GAAGG,SAASF,EAAE3J,WAAWuC,MAAM,MAAMvC,WAAWuC,MAAM,KAI/DjD,EAAOS,UAAU+J,IAAM,SAAUnJ,GAC7B,GAAIoJ,GAAa,SAAUlH,GACvB,GAAII,GAAQ,+BAA+B+G,MAAM,IAC7CC,GAAgB,EAAG,EAAG,GACtBC,EAAe,CAiBnB,OAfqB,gBAAVrH,KACPA,EAAQA,EAAM7C,YAGlB6C,EAAMmH,MAAM,IAAIG,QAAQ,SAASnH,EAAWoH,GACxC,GAAIC,GAAMpH,EAAMkC,QAAQnC,EAGpBA,GADO,KAARqH,EACqB,IAARA,EAAY,EAAIA,EAAM,EAEtBR,SAAS7G,EAAW,IAEpCA,GAAaiH,EAAYG,EAAMH,EAAYtK,QAC3CuK,GAAgBlH,IAEbkH,EAAe,IAEtBI,EAAW,SAAUC,GACrB,GAAIzE,GAAM,SAAUnG,GAChB,MAAO,IAAIoC,OAAMpC,EAAS,GAAG4E,KAAK,MAElCwB,GAAW,KACAwE,EAAKC,OACLD,EAAKf,KAAKnH,cACV,KACAkI,EAAKtB,MAAM5G,cACXyD,EAAI,IAAMyE,EAAKf,KAAK7J,OAAS4K,EAAKtB,MAAMtJ,OAAS,IACjD4K,EAAKE,eACLV,EAAWQ,EAAKE,gBAChBF,EAAKpB,YACLoB,EAAKG,IACLX,EAAWQ,EAAKG,KAChBH,EAAKrB,OACLqB,EAAKI,OACLZ,EAAWQ,EAAKI,QAChB7E,EAAI,IACJiE,EAAWjE,EAAI,MAAOvB,KAAK,GAE1C,OAAOwB,GACFgE,EAAWhE,EAAOrB,OAAO,GAAI,IAClBqB,EAAOrB,OAAO,GAAI,GAClBqB,EAAOrB,OAAO,GAAI,KAGlCkG,EAAOpL,IAsBX,OApBAmB,GAAUD,EAAYC,GAClBsI,MAAOzJ,KAAKyJ,QACZO,KAAMhK,KAAKgK,OACXiB,eAAgBjL,KAAKuE,SAASD,IAAK,IAAWP,IAAK,YACnDmH,IAAM,WACF,GAAIhC,GAAOkC,EAAKxC,UAAUD,KAAM,SAChC,QAAQO,EAAKH,cAAcvI,WAAW0E,OAAO,GACrCkG,EAAK9E,IAAI4C,EAAKmC,WAAa,EAAG,GAC9BD,EAAK9E,IAAI4C,EAAKoC,UAAW,IAAIvG,KAAK,OAE9CoG,OAAS,WACL,GAAIjC,GAAO,GAAIJ,KACf,SAASI,EAAKH,cAAgB,GAAGvI,WAAW0E,OAAO,GAC3CkG,EAAK9E,IAAI4C,EAAKmC,WAAa,EAAG,GAC9BD,EAAK9E,IAAI4C,EAAKoC,UAAW,IAAIvG,KAAK,OAE9C2E,OAA0B,WAAlB1J,KAAK0J,SAAwB,IAAK,IAC1CsB,OAAQ,MACRrB,YAAa,QAEVmB,EAAU3J,IAGrBrB,EAAOS,UAAUgL,KAAO,SAAUpK,GAC9BA,EAAUD,EAAYC,EAEtB,IAEIoK,GAFA9B,EAAQzJ,KAAKyJ,MAAMtI,GACnB6I,EAAOhK,KAAKgK,KAAK7I,EAmBrB,OAfIoK,GADApK,EAAQqK,OACD/B,EAAQ,IAAMzJ,KAAKyJ,MAAMtI,GAAW,IAAM6I,EAC1C7I,EAAQsK,eACRhC,EAAQ,IAAMzJ,KAAKwD,WAAWC,OAAO,EAAMI,OAAQ,UAAY,KAAOmG,EAEtEP,EAAQ,IAAMO,EAGrB7I,EAAQuK,SACRH,EAAOvL,KAAK0L,OAAOvK,GAAW,IAAMoK,GAGpCpK,EAAQwK,SACRJ,EAAOA,EAAO,IAAMvL,KAAK2L,OAAOxK,IAG7BoK,GAKXzL,EAAOS,UAAUqL,cAAgB,SAAUlC,GACvCA,EAASA,GAAU,MACnBA,EAASA,EAAOG,aAEhB,IAAIgC,KACEN,KAAM,SAAUO,aAAc,OAYpC,QATe,SAAXpC,GAAgC,QAAXA,IACrBmC,EAASxF,MAAOkF,KAAM,SAAUO,aAAc,SAGnC,WAAXpC,GAAkC,QAAXA,KACvBmC,EAASxF,MAAOkF,KAAM,OAAQO,aAAc,SAC5CD,EAASxF,MAAOkF,KAAM,SAAUO,aAAc,UAG3CD,GAIX/L,EAAOS,UAAUmL,OAAS,SAAUvK,GAChC,MAAOnB,MAAK+L,YAAY5K,IAG5BrB,EAAOS,UAAUwL,YAAc,SAAU5K,GAErC,MADAA,GAAUD,EAAYC,GAAWuI,OAAQ,QAClCvI,EAAQ6K,KACXhM,KAAKyG,KAAKzG,KAAK4L,cAAczK,EAAQuI,SAAS6B,KAC9CvL,KAAKyG,KAAKzG,KAAK4L,cAAczK,EAAQuI,SAASoC,cAGtDhM,EAAOS,UAAU0L,KAAM,WAErB,GAAIC,GAAS,aACTC,EAAS,8BACTC,EAAI,EAGN,OAFAA,IAAKpM,KAAK4E,QAAQhB,KAAKsI,EAAS/L,OAAO,IACvCiM,GAAKpM,KAAK4E,QAAQhB,KAAKuI,EAAShM,OAAO,KAK3CL,EAAOS,UAAU8L,IAAM,SAAUlL,GAC7BA,EAAUD,EAAYC,GAAUmL,SAAS,EAAOC,QAAQ,GACxD,IACIF,GADAG,EAAW,aAEXC,EAAOtL,EAAQoL,OAAS,IAAM,EASlC,OAFIF,GALAlL,EAAQmL,QAKFtM,KAAK4E,QAAQhB,KAAM4I,EAAUrM,OAAQ,IAJrCH,KAAK4E,QAAQhB,KAAM4I,EAAUrM,OAAQ,IAAMsM,EACjDzM,KAAK4E,QAAQhB,KAAM4I,EAAUrM,OAAQ,IAAMsM,EAC3CzM,KAAK4E,QAAQhB,KAAM4I,EAAUrM,OAAQ,KAS7CL,EAAOS,UAAUmM,cAAgB,WAC7B,GAAIC,KACEpB,KAAM,iCAAkCO,aAAc,SACtDP,KAAM,uBAAwBO,aAAc,UAC5CP,KAAM,UAAWO,aAAc,SAC/BP,KAAM,SAAUO,aAAc,QAC9BP,KAAM,eAAgBO,aAAc,SACpCP,KAAM,iBAAkBO,aAAc,SACtCP,KAAM,oCAAqCO,aAAc,WACzDP,KAAM,oBAAqBO,aAAc,SACzCP,KAAM,iBAAkBO,aAAc,SACtCP,KAAM,SAAUO,aAAc,QAC9BP,KAAM,YAAaO,aAAc,QACjCP,KAAM,aAAcO,aAAc,OAClCP,KAAM,0BAA2BO,aAAc,QAC/CP,KAAM,yBAA0BO,aAAc,UAEpD,OAAOa,IAIX7M,EAAOS,UAAUoL,OAAS,SAAUxK,GAChC,MAAOnB,MAAK4M,YAAYzL,IAG5BrB,EAAOS,UAAUqM,YAAc,SAAUzL,GAErC,MADAA,GAAUD,EAAYC,GACfA,EAAQ6K,KACXhM,KAAKyG,KAAKzG,KAAK0M,iBAAiBnB,KAChCvL,KAAKyG,KAAKzG,KAAK0M,iBAAiBZ,cAGxChM,EAAOS,UAAUsM,cAAgB,WAC7B,MAAO7M,MAAK4J,IAAI,kBAIpB9J,EAAOS,UAAUoJ,YAAc,WAC3B,GAAIA,GAAc3J,KAAKyG,KAAKzG,KAAK6M,gBACjC,OAAOlD,GAAY4B,MAOvBzL,EAAOS,UAAUuM,WAAa,WAC1B,MAAO,QAAU9M,KAAK4E,QAAShB,KAAM,kEAAmEzD,OAAQ,OAIpHL,EAAOS,UAAUwM,YAAc,WAC3B,MAAO/M,MAAK4E,QAAShB,KAAM,mBAAoBzD,OAAQ,MAI3DL,EAAOS,UAAUyM,UAAY,WACzB,MAAO/J,GAAQjD,KAAKW,MAAQR,OAAS,OAIzCL,EAAOS,UAAU0M,SAAW,WACxB,MAAO,KAAOjN,KAAKkN,OAAO3D,QAAQ,KAAM,IAAI1G,cAAgB,MAAQ7C,KAAKW,MAAOR,OAAO,IAAO,MAAQH,KAAKuE,SAAUD,IAAI,EAAGP,IAAI,KAIpIjE,EAAOS,UAAU4M,OAAS,WACtB,MAAOnN,MAAKW,MAAOR,OAAQ,KAM/BL,EAAOS,UAAU6M,OAAS,SAAUjM,GAChC,GAAIkM,GAAM,KACNC,EAAW,6BACXC,GACAC,KAAM,OACNC,MAAO,SAEPC,GACAC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,OAELC,GACAC,IAAO,MACPC,GAAI,KACJC,UAAW,YACXC,UAAW,YACXC,QAAS,UACTC,MAAO,QACPC,MAAO,SAEPC,GACAC,EAAG,IACHC,GAAI,KACJC,EAAG,IACHxE,EAAG,KAEHa,GACA4D,SAAU,KACVC,MAAO,KACPC,cAAe,KACfC,KAAM,KACNC,SAAU,KACVC,OAAQ,KAGZ,IAAK7N,EAKA,GAAuB,gBAAZA,GACZ4J,EAAK6D,MAAQzN,EACbA,SAEC,CAAA,GAAuB,gBAAZA,GACZ,MAAO,KAEN,IAA4B,UAAxBA,EAAQ8N,YACb,MAAO,UAXPlE,GAAK6D,MAAQ5O,KAAK4O,QAClBzN,IAsCJ,OAzBA4J,GAAO7J,EAAYC,EAAS4J,GAEvBA,EAAK6D,QAEN7D,EAAK6D,MAAQ5O,KAAK4O,SAItB7D,EAAK4D,SAAWpB,EAAUxC,EAAK4D,UAAY5D,EAAK4D,SAAW,IAAM,GACjE5D,EAAK+D,KAAOzE,SAASU,EAAK+D,KAAM,GAAK/D,EAAK+D,KAAO,GACjD/D,EAAKiE,OAAST,EAAQxD,EAAKiE,QAAUjE,EAAKiE,OAAS,GACnDjE,EAAKgE,SAAWhB,EAAUhD,EAAKgE,UAAYhE,EAAKgE,SAAW,GAC3DhE,EAAK8D,cAAgBnB,EAAW3C,EAAK8D,eAAiB9D,EAAK8D,cAAgB,GAE3ExB,EACItC,EAAK4D,SACLrB,EACAtN,KAAKgB,MAAMkO,IAAInE,EAAK6D,QACnB7D,EAAK8D,cAAgB,IAAM9D,EAAK8D,cAAgB,KAChD9D,EAAK+D,MAAQ/D,EAAKiE,QAAUjE,EAAKgE,SAAW,IAAM,KAClDhE,EAAK+D,KAAO,MAAQ/D,EAAK+D,KAAKtO,WAAa,KAC3CuK,EAAKiE,OAAS,MAAQjE,EAAKiE,OAAS,KACpCjE,EAAKgE,SAAW,MAAQhE,EAAKgE,SAAW,KA0CjDjP,EAAOS,UAAU4O,MAAQ,SAAUhO,GAE/B,QAASiO,GAAKC,EAAOC,GACjB,OAAQD,EAAOA,EAAOA,GAAOtK,KAAKuK,GAAa,IAGnD,QAASC,GAAIC,GAET,GAAIC,GAAc,EAAgB,OAAS,MACvCC,EAAc,EAAiB,IAAM1P,KAAKgE,UAAUM,IAAI,EAAGP,IAAI,IAAO,GACtE4L,EAAc,EAAiBP,EAAKpP,KAAK2B,SAASoC,IAAK,MAAO,KAAS/D,KAAK2B,SAASoC,IAAK,MAAQ,IAAM/D,KAAK2B,SAASoC,IAAK,MAAQ,IAAM/D,KAAK2B,SAASoC,IAAK,KAEhK,OAAO0L,GAAW,IAAME,EAAaD,EAAc,IAGvD,QAASE,GAAIC,EAAOC,EAAKC,GAErB,GAAIC,GAAS,EAAa,IAAM,GAC5BC,EAAeC,EAAcd,EAAKpP,KAAKW,MAAMR,OAAQ0P,KAAW7P,KAAKW,MAAMR,OAAQ2P,GACvF,OAAOE,GAASC,EAGpB9O,EAAUD,EAAYC,GAClBgP,OAAQnQ,KAAKyG,MAAM,MAAO,WAAY,MAAO,OAAQ,KAAM,SAC3D2J,WAAW,EACXvM,OAAQ,SAGZ,IACI8L,GADAO,EAAc/O,EAAQiP,SAG1B,IAAuB,QAAnBjP,EAAQgP,OACRR,EAAcC,EAAInP,KAAKT,KAAM,EAAG,GAAG,OAElC,IAAuB,aAAnBmB,EAAQgP,OACbR,EAAaC,EAAInP,KAAKT,KAAM,EAAG,GAAG,OAEjC,IAAuB,QAAnBmB,EAAQgP,OACbR,EAAaJ,EAAI9O,KAAKT,MAAM,OAE3B,IAAuB,SAAnBmB,EAAQgP,OACbR,EAAaJ,EAAI9O,KAAKT,MAAM,OAE3B,CAAA,GAAuB,OAAnBmB,EAAQgP,OAGZ,CAAA,GAAsB,SAAnBhP,EAAQgP,OACZ,MAAOnQ,MAAKyG,KAAKzG,KAAK4J,IAAI,cAG1B,MAAM,IAAIpI,YAAW,oGANrBmO,EAAa,KAAOC,EAAInP,KAAKT,KAAM,EAAG,GAa1C,MAJuB,UAAnBmB,EAAQ0C,SACR8L,EAAaA,EAAW9M,eAGrB8M,GAGX7P,EAAOS,UAAU8P,OAAS,SAAUlP,GAEhC,MADAA,GAAUD,EAAYC,GACfnB,KAAKiF,OAAS,KAAO9D,EAAQmP,KAAOtQ,KAAKsQ,QAGpDxQ,EAAOS,UAAUqO,MAAQ,SAAUzN,GAE/B,MADAA,GAAUD,EAAYC,GACfnB,KAAKiF,MAAM9E,OAAQgB,EAAQhB,SAAW,KAAOgB,EAAQkP,QAAUrQ,KAAKqQ,WAG/EvQ,EAAOS,UAAUgQ,KAAO,WACpB,MAAOlG,UAAS,QAAUrK,KAAK2B,SAASoC,IAAK,OAAgB,KAGjEjE,EAAOS,UAAUiQ,iBAAmB,WAChC,GAAIC,GAAUzQ,KAAKsG,IAAItG,KAAK2B,SAASoC,IAAK,SAAU,GAChD2M,EAAW1Q,KAAKsG,IAAItG,KAAK2B,SAASoC,IAAK,KAAM,EAEjD,OAAO,MAAQ0M,EAAU,IAAMC,GAGnC5Q,EAAOS,UAAUoQ,QAAU,WACvB,MAAO,IAAM3Q,KAAKiF,QAGtBnF,EAAOS,UAAUqQ,GAAK,WAGlB,MAAO5Q,MAAK2B,SAAS2C,IAAK,EAAGP,IAAK,MAAQ,IACnC/D,KAAK2B,SAASoC,IAAK,MAAQ,IAC3B/D,KAAK2B,SAASoC,IAAK,MAAQ,IAC3B/D,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,OAGtCjE,EAAOS,UAAUsQ,KAAO,WACpB,GAAIC,GAAU9Q,KAAK8E,EAAE9E,KAAKW,KAAM,GAAIR,OAAQ,GAE5C,OAAO2Q,GAAQ/L,KAAK,MAGxBjF,EAAOS,UAAUwQ,MAAQ,WACrB,MAAO/Q,MAAK2B,SAAS2C,IAAK,EAAGP,IAAK,MAGtCjE,EAAOS,UAAUyQ,OAAS,SAAU7P,GAChCA,EAAUD,EAAYC,GAAW8P,oBAAoB,GAErD,IAAIvP,GAAQ1B,KAAK2G,SAAS,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KACtDxF,GAAQO,QACRA,EAAQP,EAAQO,MAGpB,IAAIwP,GAAa,EAIjB,OAHI/P,GAAQ8P,qBACRC,EAAalR,KAAKiH,UAAU,GAAI,OAAQ,QAAS,WAAY,GAAI,GAAI,EAAG,KAErEvF,EAAQ1B,KAAKmR,IAAI,QAAQpM,KAAK,KAAOmM,GAGhDpR,EAAOS,UAAU6Q,KAAO,WACpB,OAAQ,MAAO,MAAO,MAAO,MAAO,QAAS,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAGhiDtR,EAAOS,UAAU+P,IAAM,WACnB,MAAOtQ,MAAKyG,KAAKzG,KAAKoR,SAG1BtR,EAAOS,UAAU8Q,QAAU,WACvB,MAAO,IAAMrR,KAAKiF,QAGtBnF,EAAOS,UAAU8M,IAAM,SAAUlM,GAC7BA,EAAUD,EAAYC,GAAWwN,SAAU,OAAQ0B,OAAQrQ,KAAKqQ,OAAOlP,GAAUmQ,cAAe,GAAIC,KAAMvR,KAAKiF,OAAQuM,eAEvH,IAAIC,GAAYtQ,EAAQqQ,WAAWrR,OAAS,EAAI,IAAMH,KAAKyG,KAAKtF,EAAQqQ,YAAc,GAClFnB,EAASlP,EAAQmQ,cAAgBnQ,EAAQmQ,cAAgB,IAAMnQ,EAAQkP,OAASlP,EAAQkP,MAE5F,OAAOlP,GAAQwN,SAAW,MAAQ0B,EAAS,IAAMlP,EAAQoQ,KAAOE,GAGpE3R,EAAOS,UAAUmR,KAAO,WACpB,MAAO1R,MAAKuE,SAASD,IAAK,EAAGP,IAAK,SAOtCjE,EAAOS,UAAUoR,QAAU,SAAUxQ,GAEjC,MADAA,GAAUD,EAAYC,GACfnB,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,MAAS,IAAM/D,KAAK4R,OAAOzQ,IAGjErB,EAAOS,UAAUsR,SAAW,SAAU1Q,GAElC,MADAA,GAAUD,EAAYC,GAAU8C,MAAO,EAAGK,IAAK,EAAGP,IAAK,OAChD/D,KAAKgE,UACRM,IAAKnD,EAAQmD,IACbP,IAAK5C,EAAQ4C,IACbE,MAAO9C,EAAQ8C,SAIvBnE,EAAOS,UAAUuR,SAAW,SAAU3Q,GAClCA,EAAUD,EAAYC,GAAU4Q,QAAS,GAEzC,IAAID,GAAW9R,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,IAAIvD,WACtCR,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,IAAIvD,WAC/BR,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,IAAIvD,UAEvC,OAAOW,GAAQ4Q,OAAS,IAAMD,EAAW,IAAMA,GAGnDhS,EAAOS,UAAUyR,KAAO,WACpB,MAAOhS,MAAKgF,WAAWhF,KAAKiF,MAAMsD,UAAW,MAGjDzI,EAAOS,UAAU0R,YAAc,SAAU9Q,GACrC,MAAOnB,MAAKkS,SAAS/Q,GAAW,KAAOnB,KAAKmS,UAAUhR,IAG1DrB,EAAOS,UAAU6R,UAAY,WACzB,MAAOpS,MAAK4J,IAAI,cAGpB9J,EAAOS,UAAU8R,QAAU,SAAUlR,GACjCA,EAAUD,EAAYC,EACtB,IAAIkR,GAAUrS,KAAKyG,KAAKzG,KAAKoS,YAC7B,OAAOjR,GAAQ6K,KAAOqG,EAAQ9G,KAAO8G,EAAQvG,cAGjDhM,EAAOS,UAAU+R,MAAQ,SAAUnR,GAE/B,MADAA,GAAUD,EAAYC,GAAU8C,MAAO,EAAGK,IAAK,OAAQP,IAAK,IACrD/D,KAAKgE,UACRM,IAAKnD,EAAQmD,IACbP,IAAK5C,EAAQ4C,IACbE,MAAO9C,EAAQ8C,SAIvBnE,EAAOS,UAAUgS,QAAU,SAAUpR,GAEjC,MADAA,GAAUD,EAAYC,GAAWhB,OAAQ,IAClCH,KAAK4E,QAASzE,OAAQgB,EAAQhB,OAAQyD,KAAM,sCAGvD9D,EAAOS,UAAUiS,QAAU,SAAUrR,GACjC,MAAOnB,MAAKkS,SAAS/Q,GAAW,KAAOnB,KAAKmS,UAAUhR,GAAW,KAAOnB,KAAK6R,SAAS1Q,IAG1FrB,EAAOS,UAAU2R,SAAW,SAAU/Q,GAElC,MADAA,GAAUD,EAAYC,GAAU8C,MAAO,EAAGK,IAAK,IAAKP,IAAK,KAClD/D,KAAKgE,UAAUM,IAAKnD,EAAQmD,IAAKP,IAAK5C,EAAQ4C,IAAKE,MAAO9C,EAAQ8C,SAG7EnE,EAAOS,UAAU4R,UAAY,SAAUhR,GAEnC,MADAA,GAAUD,EAAYC,GAAU8C,MAAO,EAAGK,IAAK,KAAMP,IAAK,MACnD/D,KAAKgE,UAAUM,IAAKnD,EAAQmD,IAAKP,IAAK5C,EAAQ4C,IAAKE,MAAO9C,EAAQ8C,SAG7EnE,EAAOS,UAAUkS,MAAQ,SAAUtR,GAC/B,GACIuR,GADAC,EAAO3S,KAEP4S,EAAQ,SAAUC,GACd,GAAIC,KAKJ,OAHAD,GAAME,SAASpI,QAAQ,SAAS7F,GAC5BgO,EAAQzM,KAAKsM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ2E,OAEpD+N,EAAMG,KAAOF,EAAQ/N,KAAK,KAEzC5D,GAAUD,EAAYC,GAClBiI,WAAW,EACXiJ,QAAS,KACTY,QAAQ,IAEP9R,EAAQiI,YACTjI,EAAQ4Q,QAAS,EAErB,IAAIU,EACJ,QAAQtR,EAAQkR,SACZ,IAAK,KACIlR,EAAQ8R,QAYTP,EAAU1S,KAAKyG,MAAM,KAAM,OAASkM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,IAC9EsS,EAAQtR,EAAQiI,UAAYsJ,EAAQQ,MAAM,OAAOnO,KAAK,KAAO2N,IAZ7DA,EAAU1S,KAAKyG,MAEX,KAAOzG,KAAKyG,MAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAASkM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,IACrQ,KAAOH,KAAKyG,MAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAASkM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,IACvU,KAAOH,KAAKyG,MAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAASkM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,IACnV,KAAOH,KAAKyG,MAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAASkM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,IACrW,KAAOH,KAAKyG,MAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAASkM,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,IAC3Q,KAAOwS,EAAK/N,QAAShB,KAAM,aAAczD,OAAQ,MAErDsS,EAAQtR,EAAQiI,UAAYsJ,EAAQQ,MAAM,OAAOnO,KAAK,KAAO2N,EAKjE,MACJ,KAAK,KACIvR,EAAQ8R,QAmBTP,EAAU1S,KAAKyG,OACTuM,KAAM,KAAOhT,KAAKyG,MAAM,IAAI,IAAI,IAAI,IAAI,MAAOsM,UAAW,EAAE,KAC5DC,KAAM,SAAUD,UAAW,MAEjCN,EAAQtR,EAAQiI,UAAYwJ,EAAMF,GAAWE,EAAMF,GAASnJ,QAAQ,IAAK,MAtBzEmJ,EAAU1S,KAAKyG,OAETuM,KAAM,KAAOhT,KAAKwD,WAAYI,KAAM,WAAc,KAAMmP,UAAW,EAAE,KACrEC,KAAM,OAAShT,KAAKwD,WAAYI,KAAM,QAAUmP,UAAW,EAAE,KAC7DC,KAAM,OAAShT,KAAKwD,WAAYI,KAAM,OAASmP,UAAW,EAAE,KAC5DC,KAAM,QAASD,UAAW,EAAE,KAC5BC,KAAM,OAAShT,KAAKyG,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAQsM,UAAW,EAAE,KAClFC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KAC3EC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KACjEC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KAC3EC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KACjEC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KAC3EC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KACjEC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,KACjEC,KAAM,MAAQhT,KAAKyG,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAS,IAAKsM,UAAW,MAEtFN,EAAQtR,EAAQiI,UAAYwJ,EAAMF,GAAWE,EAAMF,GAASnJ,QAAQ,IAAK,GAAI,KAQjF,MACJ,KAAK,KACD,GAAIuI,GAAW9R,KAAK8R,SAAS3Q,GAASX,WAClC2S,EAAWnT,KAAK2B,SAAU2C,IAAK,EAAGP,IAAK,IAAKvD,WAC5CR,KAAK2B,SAAU2C,IAAK,EAAGP,IAAK,IAAKvD,WACjCR,KAAK2B,SAAU2C,IAAK,EAAGP,IAAK,IAAKvD,WACjC4S,EAAapT,KAAK2B,SAAU2C,IAAK,IAAMP,IAAK,OAAQvD,UACxDiS,GAAQtR,EAAQiI,UAAY0I,EAAW,IAAMqB,EAAW,IAAMC,EAAatB,EAAWqB,EAAWC,EAEzG,MAAOX,IAGX3S,EAAOS,UAAU8S,OAAS,WAEtB,GAAIC,GAAKtT,KAAKwD,WAAWI,KAAM,sBAE3B2P,EAAMD,EAAKtT,KAAK2B,SAASoC,IAAK,IAAM/D,KAAKwD,WAAWC,OAAO,EAAMI,OAAQ,UAEzE2P,EAAMxT,KAAK2B,SAASoC,IAAK,IAAM/D,KAAKwD,WAAWC,OAAO,EAAMI,OAAQ,UAAY7D,KAAK2B,SAASoC,IAAK,GAEvG,OAAOwP,GAAM,IAAMC,GAGvB1T,EAAOS,UAAUkT,SAAW,SAAUtS,GAElC,MADAA,GAAUD,EAAYC,GAAWkR,QAAS,OACnCrS,KAAK4J,IAAI,YAAYzI,EAAQkR,QAAQxI,gBAGhD/J,EAAOS,UAAUmT,OAAS,SAAUvS,GAChC,MAAOnB,MAAKyG,KAAKzG,KAAKyT,SAAStS,IAAUoK,MAG7CzL,EAAOS,UAAUoT,UAAY,SAAUxS,GAEnC,MADAA,GAAUD,EAAYC,GAAWkR,QAAS,OACnCrS,KAAK4J,IAAI,aAAazI,EAAQkR,QAAQxI,gBAGjD/J,EAAOS,UAAUqT,SAAW,SAAUzS,GAClC,MAAQA,IAAWA,EAAQ6K,KACvBhM,KAAKyG,KAAKzG,KAAK2T,UAAUxS,IAAUoK,KACnCvL,KAAKyG,KAAKzG,KAAK2T,UAAUxS,IAAU2K,cAG3ChM,EAAOS,UAAUsT,MAAQ,SAAU1S,GAC/B,MAAQA,IAAWA,EAAQ6K,KACvBhM,KAAKyG,KAAKzG,KAAK8T,OAAO3S,IAAUoK,KAChCvL,KAAKyG,KAAKzG,KAAK8T,OAAO3S,IAAU2K,cAGxChM,EAAOS,UAAUuT,OAAS,SAAU3S,GAChCA,EAAUD,EAAYC,GAAWkR,QAAS,KAAM0B,kBAAkB,GAElE,IAAID,EAEJ,QAAQ3S,EAAQkR,QAAQxI,eACpB,IAAK,KACD,GAAIkK,GAAmB/T,KAAK4J,IAAI,oBAC5BoK,EAAchU,KAAK4J,IAAI,eACvBqK,EAAejU,KAAK4J,IAAI,eAE5BkK,MAEI3S,EAAQ4S,mBACRD,EAASA,EAAO/J,OAAOgK,IAEvB5S,EAAQ6S,cACRF,EAASA,EAAO/J,OAAOiK,IAEvB7S,EAAQ8S,eACRH,EAASA,EAAO/J,OAAOkK,GAE3B,MACJ,KAAK,KACDH,EAAS9T,KAAK4J,IAAI,mBAAmBzI,EAAQkR,QAAQxI,cACrD,MACJ,KAAK,KACDiK,EAAS9T,KAAK4J,IAAI,YAAYzI,EAAQkR,QAAQxI,eAItD,MAAOiK,IAGXhU,EAAOS,UAAUqR,OAAS,SAAUzQ,GAChCA,EAAUD,EAAYC,GAAWkR,QAAS,KAAM9J,UAAW,GAC3D,IAAQqJ,EAER,QAAQzQ,EAAQkR,QAAQxI,eACpB,IAAK,KACD+H,EAAS5R,KAAKiF,MAAOsD,UAAWpH,EAAQoH,YACxCqJ,EAAS5R,KAAKgF,WAAW4M,GACzBA,GAAU,IACVA,GAAUzQ,EAAQ+S,aACdlU,KAAKmU,cAAchT,GAAS2K,aAC5B9L,KAAKmU,cAAchT,GAASoK,IAChC,MACJ,KAAK,KACDqG,EAAS5R,KAAKiF,MAAOsD,UAAWpH,EAAQoH,YACxCqJ,EAAS5R,KAAKgF,WAAW4M,GACzBA,GAAUzQ,EAAQ+S,aACdlU,KAAKmU,cAAchT,GAAS2K,aAC5B9L,KAAKmU,cAAchT,GAASoK,MAAQ,IAAMqG,EAGtD,MAAOA,IAGX9R,EAAOS,UAAU4T,cAAgB,SAAUhT,GAEvC,MADAA,GAAUD,EAAYC,GAAWkR,QAAS,OACnCrS,KAAKyG,KAAKzG,KAAKoU,gBAAgBjT,KAG1CrB,EAAOS,UAAU6T,gBAAkB,SAAUjT,GAGzC,MAFAA,GAAUD,EAAYC,GAAWkR,QAAS,OAEnCrS,KAAK4J,IAAI,mBAAmBzI,EAAQkR,QAAQxI,gBAKvD/J,EAAOS,UAAU8T,IAAM,SAAUlT,GAC7B,GAAIkT,GAAMrU,KAAK8E,EAAE9E,KAAK2B,QAAS,GAAIoC,IAAK,GAOxC,OALI5C,IAAWA,EAAQmT,YAAa,IAChCD,EAAIhO,KAAK,KACTgO,EAAMA,EAAItK,OAAO/J,KAAK8E,EAAE9E,KAAK2B,QAAS,GAAIoC,IAAK,MAG5CsQ,EAAItP,KAAK,KAOpBjF,EAAOS,UAAUgU,KAAO,WACpB,MAAOvU,MAAKsD,OAAS,KAAO,MAGhCxD,EAAOS,UAAU2I,KAAO,SAAU/H,GAC9B,GAAIqT,GAAatL,CAGjB,IAAG/H,IAAYA,EAAQmD,KAAOnD,EAAQ4C,KAAM,CACxC5C,EAAUD,EAAYC,GAClBsT,UAAU,EACV7P,QAAQ,GAEZ,IAAIN,GAA6B,mBAAhBnD,GAAQmD,IAAsBnD,EAAQmD,IAAIoQ,UAAY,EAEnE3Q,EAA6B,mBAAhB5C,GAAQ4C,IAAsB5C,EAAQ4C,IAAI2Q,UAAY,MAEvExL,GAAO,GAAIJ,MAAK9I,KAAKuE,SAASD,IAAKA,EAAKP,IAAKA,SAC1C,CACH,GAAI4Q,GAAI3U,KAAK4U,OAAOC,KAAK,IACrBC,EAAcH,EAAEI,IAEjB5T,IAAWA,EAAQyT,QAElBE,EAAc9U,KAAK4J,IAAI,WAAYzI,EAAQyT,MAAQ,GAAM,IAAM,IAAIG,MAGvE5T,EAAUD,EAAYC,GAClB8H,KAAMoB,SAASrK,KAAKiJ,OAAQ,IAG5B2L,MAAOD,EAAEK,QAAU,EACnBC,IAAKjV,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK+Q,IAChCI,KAAMlV,KAAKkV,MAAMC,YAAY,IAC7BC,OAAQpV,KAAKoV,SACbC,OAAQrV,KAAKqV,SACbC,YAAatV,KAAKsV,cAClBb,UAAU,EACV7P,QAAQ,IAGZsE,EAAO,GAAIJ,MAAK3H,EAAQ8H,KAAM9H,EAAQyT,MAAOzT,EAAQ8T,IAAK9T,EAAQ+T,KAAM/T,EAAQiU,OAAQjU,EAAQkU,OAAQlU,EAAQmU,aAWpH,MALId,GAHArT,EAAQsT,SAGOvL,EAAKmC,WAAa,EAAK,IAAMnC,EAAKoC,UAAY,IAAMpC,EAAKH,cAE1DG,EAAKoC,UAAY,KAAOpC,EAAKmC,WAAa,GAAK,IAAMnC,EAAKH,cAGrE5H,EAAQyD,OAAS4P,EAActL,GAG1CpJ,EAAOS,UAAUgV,WAAa,SAAUpU,GACpC,MAAOnB,MAAKkJ,KAAK/H,GAASuT,WAG9B5U,EAAOS,UAAU2U,KAAO,SAAU/T,GAW9B,MAVAA,GAAUD,EAAYC,GAClBmD,IAAKnD,GAAWA,EAAQgU,WAAa,EAAI,EACzCpR,IAAK5C,GAAWA,EAAQgU,WAAa,GAAK,KAG9C9T,EAAUF,EAAQmD,IAAM,EAAG,sCAC3BjD,EAAUF,EAAQgU,YAAchU,EAAQ4C,IAAM,GAAI,gEAClD1C,GAAWF,EAAQgU,YAAchU,EAAQ4C,IAAM,GAAI,0CACnD1C,EAAUF,EAAQmD,IAAMnD,EAAQ4C,IAAK,2CAE9B/D,KAAK2B,SAAS2C,IAAKnD,EAAQmD,IAAKP,IAAK5C,EAAQ4C,OAGxDjE,EAAOS,UAAU+U,YAAc,WAC3B,MAAOtV,MAAK2B,SAASoC,IAAK,OAG9BjE,EAAOS,UAAU6U,OAAStV,EAAOS,UAAU8U,OAAS,SAAUlU,GAO1D,MANAA,GAAUD,EAAYC,GAAUmD,IAAK,EAAGP,IAAK,KAE7C1C,EAAUF,EAAQmD,IAAM,EAAG,sCAC3BjD,EAAUF,EAAQ4C,IAAM,GAAI,0CAC5B1C,EAAUF,EAAQmD,IAAMnD,EAAQ4C,IAAK,2CAE9B/D,KAAK2B,SAAS2C,IAAKnD,EAAQmD,IAAKP,IAAK5C,EAAQ4C,OAGxDjE,EAAOS,UAAUqU,MAAQ,SAAUzT,GAC/BA,EAAUD,EAAYC,GAAUmD,IAAK,EAAGP,IAAK,KAE7C1C,EAAUF,EAAQmD,IAAM,EAAG,sCAC3BjD,EAAUF,EAAQ4C,IAAM,GAAI,0CAC5B1C,EAAUF,EAAQmD,IAAMnD,EAAQ4C,IAAK,0CAErC,IAAI6Q,GAAQ5U,KAAKyG,KAAKzG,KAAKwV,SAASzS,MAAM5B,EAAQmD,IAAM,EAAGnD,EAAQ4C,KACnE,OAAO5C,GAAQ0T,IAAMD,EAAQA,EAAMrJ,MAGvCzL,EAAOS,UAAUiV,OAAS,WACtB,MAAOxV,MAAK4J,IAAI,WAGpB9J,EAAOS,UAAU8U,OAAS,WACtB,MAAOrV,MAAK2B,SAASoC,IAAK,MAG9BjE,EAAOS,UAAUkV,UAAY,WACzB,MAAOzV,MAAK2B,SAAS2C,IAAK,EAAGP,IAAKsG,UAAS,GAAIvB,OAAO4L,UAAY,IAAM,OAG5E5U,EAAOS,UAAUmV,QAAU,SAAUvU,GACjCA,EAAUD,EAAYC,GAAUwU,cAAc,GAC9C,IAAIC,IAAY,SAAU,UAAW,YAAa,WAAY,SAK9D,OAJKzU,GAAQwU,eACTC,EAASvP,KAAK,YACduP,EAASvP,KAAK,WAEXrG,KAAK2G,QAAQiP,IAGxB9V,EAAOS,UAAU0I,KAAO,SAAU9H,GAO9B,MALAA,GAAUD,EAAYC,GAAUmD,KAAK,GAAIwE,OAAOC,gBAGhD5H,EAAQ4C,IAA8B,mBAAhB5C,GAAQ4C,IAAuB5C,EAAQ4C,IAAM5C,EAAQmD,IAAM,IAE1EtE,KAAK2B,QAAQR,GAASX,YAOjCV,EAAOS,UAAUsV,GAAK,SAAU1U,GAC5BA,EAAUD,EAAYC,EAEtB,IAAIwH,GAAMpC,EAAQuP,CAelB,OAbAnN,GAAQxH,EAAY,KACRnB,KAAK+V,SAAUxK,KAAMpK,EAAQwH,KAAMkM,KAAK,IACxC7U,KAAK+V,SAAUlB,KAAK,IAEhCtO,EAASoC,EAAK+C,OAAOlB,MAAM,IAC3BsL,EAAcnN,EAAKxI,OAASwI,EAAK+C,OAAOvL,OAAS,EAGjDoG,EAASA,EAAOwD,OAAO/J,KAAK8E,EAAE9E,KAAKuE,QAASuR,GAAcxR,IAAK,EAAGP,IAAK,KAGvEwC,EAAOF,KAAKrG,KAAKgW,eAAezP,EAAOxB,KAAK,MAErCwB,EAAOxB,KAAK,KAGvBjF,EAAOS,UAAU0V,SAAW,WAExB,MAAOjW,MAAK4J,IAAI,aAGpB9J,EAAOS,UAAUwV,QAAU,SAAU5U,GACjCA,EAAUD,EAAYC,EACtB,IAAI+U,GAAQlW,KAAKiW,WACbtN,EAAO,IAEX,IAAIxH,EAAQoK,KAAM,CACd,IAAK,GAAInL,GAAI,EAAGA,EAAI8V,EAAM/V,OAAQC,IAE9B,GAAI8V,EAAM9V,GAAGmL,OAASpK,EAAQoK,MAAQ2K,EAAM9V,GAAG+V,aAAehV,EAAQoK,KAAM,CACxE5C,EAAOuN,EAAM9V,EACb,OAGR,GAAa,OAATuI,EACA,KAAM,IAAInH,YAAW,qBAAuBL,EAAQoK,KAAO,2BAG/D5C,GAAO3I,KAAKyG,KAAKyP,EAGrB,OAAO/U,GAAQ0T,IAAMlM,EAAOA,EAAK4C,MAIrCzL,EAAOS,UAAU6V,eAAiB,WAC9B,MAAOpW,MAAK4J,IAAI,mBAIpB9J,EAAOS,UAAU8V,SAAW,WACxB,MAAOrW,MAAKyG,KAAKzG,KAAKoW,mBAI1BtW,EAAOS,UAAU+V,UAAY,WACzB,MAAOtW,MAAK4J,IAAI,cAIpB9J,EAAOS,UAAUgW,SAAW,WACxB,MAAOvW,MAAKyG,KAAKzG,KAAKsW,cAI1BxW,EAAOS,UAAUiW,cAAgB,SAAUC,GACvC,GAAIC,GAAa1W,KAAKsF,OAAOtF,KAAKqW,SAAU,GACxC7Q,WAAY,SAASC,EAAKC,GAEtB,MAAOD,GAAIkR,OAAO,SAASC,EAAKC,GAE5B,MAAOD,IAAQC,EAAKC,OAASpR,EAAIoR,OAClC,KAIX,OAAIL,GACOC,EAAW,GAAGI,KAAO,IAAMJ,EAAW,GAAGI,KAEzCJ,GAIf5W,EAAOS,UAAUwW,OAAS,SAAU5V,GAEhCA,EAAUD,EAAYC,GAAU4C,IAAM,IAAOO,IAAM,GAEnD,IAAIyS,GAAS/W,KAAKgE,UAAUM,IAAKnD,EAAQmD,IAAKP,IAAK5C,EAAQ4C,IAAKE,MAAO,IAAIzD,WACvEwW,EAAQD,EAAOvM,MAAM,KAAK,EAQ9B,OANcyM,UAAVD,EACAD,GAAU,MACHC,EAAM7W,OAAS,IACtB4W,GAAkB,KAGT,EAATA,EACO,KAAOA,EAAOxN,QAAQ,IAAK,IAE3B,IAAMwN,GAIrBjX,EAAOS,UAAU2W,KAAO,SAAU/V,GAC9B,MAAO4F,QAAO/G,KAAK+W,OAAO5V,GAASoI,QAAQ,IAAK,KAAK4N,iBAAmB,KAG5ErX,EAAOS,UAAU6W,IAAM,SAAUjW,GAC7BA,EAAUD,EAAYC,EACtB,IAAIiW,KAYJ,OAVAA,GAAInO,KAAOjJ,KAAKqX,WAIZD,EAAInO,QAAU,GAAIH,OAAOC,cAAevI,WACxC4W,EAAIxC,MAAQ5U,KAAKsX,WAAWC,QAAQ,IAEpCH,EAAIxC,MAAQ5U,KAAKsX,YAGdnW,EAAQ0T,IAAMuC,EAAMA,EAAIxC,MAAQ,IAAMwC,EAAInO,MAGrDnJ,EAAOS,UAAU+W,UAAY,SAAUnW,GACnCA,EAAUD,EAAYC,EACtB,IAAIyT,GAAO4C,EAEPC,GAAW,GAAI3O,OAAOuC,WAAa,CAEvC,IAAIlK,EAAQoW,QAAwB,KAAbE,GACnB,EACI7C,GAAQ5U,KAAK4U,OAAOC,KAAK,IAAOG,QAChCwC,EAAYnN,SAASuK,EAAO,UACV6C,GAAbD,OAET5C,GAAQ5U,KAAK4U,OAAOC,KAAK,IAAOG,OAGpC,OAAOJ,IAGX9U,EAAOS,UAAU8W,SAAW,WACxB,GAAII,IAAW,GAAI3O,OAAOuC,WAAa,EACnCqM,GAAU,GAAI5O,OAAOC,aAEzB,OAAO/I,MAAKiJ,MAAM3E,IAAoB,KAAbmT,EAAoBC,EAAU,EAAKA,EAAU3T,IAAM2T,EAAU,MAG1F5X,EAAOS,UAAUoX,IAAM,SAAUxW,GAE7B,OADAA,EAAUD,EAAYC,GAAWkR,QAAS,OAClClR,EAAQkR,QAAQxI,eACpB,IAAK,KACD,MAAO7J,MAAK4X,WAQxB9X,EAAOS,UAAUqX,OAAS,WACtB,GAAIA,GAAS5X,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,MAGxC,OADA6T,GAAS5X,KAAKsG,IAAIsR,EAAQ,GAAK5X,KAAKsG,IAAItG,KAAKyG,KAAKzG,KAAK2T,WAAYtB,QAAS,QAASyE,KAAM,GACpFc,EAAS5X,KAAKgW,eAAe4B,IAiBxC9X,EAAOS,UAAUsX,GAAK,SAAU1W,GAC5BA,EAAUA,KACV,IAAIuI,GAAWvI,EAAQuI,OAASvI,EAAQuI,OAAS1J,KAAK0J,SAClDD,EAAUtI,EAAQsI,MAAQtI,EAAQsI,MAAQzJ,KAAKyJ,OAASC,OAAQA,EAAQC,YAAa,OACrFK,EAAS7I,EAAQ6I,KAAO7I,EAAQ6I,KAAOhK,KAAKgK,MAAQL,YAAa,OACjEf,EAAazH,EAAQyH,SAAWzH,EAAQyH,SAAW5I,KAAK4I,WACxDoJ,EAAS7Q,EAAQ6Q,KAAO7Q,EAAQ6Q,KAAOhS,KAAK2G,SAAS,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAAQ3G,KAAKsG,IAAItG,KAAK2B,SAASoC,IAAI,MAAO,GACtJ8T,KACAC,EAAiB,SAASvM,EAAMwM,GAC5B,GAAIC,GACAC,IAyBJ,OAvBI1M,GAAKpL,OAAS,EACd8X,EAAe1M,EAAKf,MAAM,IAAIT,OAAO,MAAMS,MAAM,KAAKxD,OAAO,EAAE,IAG/DgR,EAAOzM,EAAK1I,cAAc2H,MAAM,IAAI0N,IAAI,SAASC,GAC7C,MAA4C,KAApC,qBAAqBxS,QAAQwS,GAAaA,EAAIlB,SACvDlS,KAAK,IACJiT,EAAK7X,OAAS,IAEV6X,EADAD,EACOC,EAAK9S,OAAO,EAAE,GAEd8S,EAAK,GAAKA,EAAK9S,OAAO,EAAE,IAGnC8S,EAAK7X,OAAS,IACd8X,EAAeD,EACfA,EAAOzM,EAAK1I,cAAc2H,MAAM,IAAI0N,IAAI,SAASC,GAC7C,MAA+B,KAAvB,QAAQxS,QAAQwS,GAAaA,EAAIlB,SAC1ClS,KAAK,IAAIG,OAAO,EAAG,EAAI+S,EAAa9X,SAE3C8X,GAA8BD,GAG3BC,GAEXG,EAAiB,SAASxP,EAAUc,EAAQ0B,GACxC,GAAIiN,IAAgB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAE3E,OAAQzP,GAASG,cAAcvI,WAAW0E,OAAO,GACzCmT,EAAazP,EAASyC,YACtBD,EAAK9E,IAAIsC,EAAS0C,WAAuC,WAAzB5B,EAAOG,cAA8B,GAAK,GAAI,IAE1FyO,EAAuB,SAAST,GAQ5B,IAAI,GAPAU,GAAS,uCACTC,EAAS,uCACTC,EAAS,6BACTC,EAAS,6BACTC,EAAS,EAGLvY,EAAI,EAAO,GAAJA,EAAQA,IAEfuY,GADAvY,EAAI,IAAM,EACDqY,EAAM9S,QAAQ6S,EAAOD,EAAO5S,QAAQkS,EAAGzX,MAGtCsY,EAAK/S,QAAQ6S,EAAOD,EAAO5S,QAAQkS,EAAGzX,KAGxD,OAAOqY,GAAME,EAAQ,IAM7B,OAHAd,GAAKA,EAAG9N,OAAO+N,EAAe9N,GAAM,GAAO8N,EAAerO,GAAQ2O,EAAexP,EAAUc,EAAQ1J,MAAOgS,EAAKnP,cAAc2H,MAAM,KAAKzF,KAAK,IAC7I8S,GAAMS,EAAqBT,EAAGhV,cAAe7C,MAEtC6X,EAAGhV,eAGd/C,EAAOS,UAAUqY,SAAW,WAGxB,IAAK,GAFDrS,GAASvG,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,aACpC0B,EAAMzF,KAAKsG,IAAIC,EAAQ,IAAIiE,MAAM,IAC5BpK,EAAI,EAAGA,EAAIqF,EAAItF,OAAQC,IAC5BqF,EAAIrF,GAAKiK,SAAS5E,EAAIrF,GAG1B,IAAIyY,IAAiB,EAAIpT,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,IAAM,EAKxJ,OAJqB,KAAlBoT,IACCA,EAAgB,GAAKA,GAGlBpT,EAAIV,KAAK,IAAM8T,GAG1B/Y,EAAOS,UAAUuY,OAAS,WAGtB,IAAK,GAFDvS,GAASvG,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,YACpC0B,EAAMzF,KAAKsG,IAAIC,EAAQ,GAAGiE,MAAM,IAC3BpK,EAAI,EAAGA,EAAIqF,EAAItF,OAAQC,IAC5BqF,EAAIrF,GAAKiK,SAAS5E,EAAIrF,GAG1B,IAAIyY,IAAiB,EAAIpT,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,IAAM,EAC3I,OAAqB,MAAlBoT,EACQ7Y,KAAK8Y,SAGTrT,EAAIV,KAAK,IAAM8T,GAG1B/Y,EAAOS,UAAUwY,SAAW,WAGxB,IAAK,GAFDxS,GAASvG,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK,WACpC0B,EAAMzF,KAAKsG,IAAIC,EAAQ,GAAGiE,MAAM,IAC3BpK,EAAI,EAAGA,EAAIqF,EAAItF,OAAQC,IAC5BqF,EAAIrF,GAAKiK,SAAS5E,EAAIrF,GAG1B,IAAIyY,IAAiB,EAAIpT,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,GAAK,EAAIA,EAAI,IAAM,EAK9H,OAJqB,MAAlBoT,IACCA,EAAgB,GAGbpT,EAAIV,KAAK,IAAM8T,GAa1B/Y,EAAOS,UAAUyY,GAAKvX,GAAQ6C,IAAK,EAAGP,IAAK,IAC3CjE,EAAOS,UAAU0Y,GAAKxX,GAAQ6C,IAAK,EAAGP,IAAK,IAC3CjE,EAAOS,UAAU2Y,GAAKzX,GAAQ6C,IAAK,EAAGP,IAAK,IAC3CjE,EAAOS,UAAU4Y,IAAM1X,GAAQ6C,IAAK,EAAGP,IAAK,KAC5CjE,EAAOS,UAAU6Y,IAAM3X,GAAQ6C,IAAK,EAAGP,IAAK,KAC5CjE,EAAOS,UAAU8Y,IAAM5X,GAAQ6C,IAAK,EAAGP,IAAK,KAC5CjE,EAAOS,UAAU+Y,IAAM7X,GAAQ6C,IAAK,EAAGP,IAAK,KAC5CjE,EAAOS,UAAUgZ,KAAO9X,GAAQ6C,IAAK,EAAGP,IAAK,MAE7CjE,EAAOS,UAAU4Q,IAAM,SAAUqI,EAAQrY,GAErC,GADAA,EAAUD,EAAYC,GACjBqY,EAEE,CACH,GAAIC,GAAOD,EAAO3P,cAAcW,MAAM,KAClCkP,IAEJ,IAAoB,IAAhBD,EAAKtZ,SAAiBkK,SAASoP,EAAK,GAAI,MAAQpP,SAASoP,EAAK,GAAI,IAClE,KAAM,IAAIvW,OAAM,mIAEpB,KAAK,GAAI9C,GAAIqZ,EAAK,GAAIrZ,EAAI,EAAGA,IACzBsZ,EAAMtZ,EAAI,GAAKJ,KAAK2B,SAAS2C,IAAK,EAAGP,IAAK0V,EAAK,IAEnD,OAA+B,mBAAhBtY,GAAQiG,KAAuBjG,EAAQiG,IAAOsS,EAAM/C,OAAO,SAAUgD,EAAGxB,GAAK,MAAOwB,GAAIxB,IAAQuB,EAX/G,KAAM,IAAIlY,YAAW,wCAgB7B1B,EAAOS,UAAU2M,KAAO,SAAU/L,GAC9BA,EAAUD,EAAYC,GAAWyY,QAAS,GAE1C,IAAIC,GAAY,mBACZC,EAAe,OACf5M,EAAOlN,KAAK4E,QAAShB,KAAMiW,EAAW1Z,OAAQ,IAAO,IAC9CH,KAAK4E,QAAShB,KAAMiW,EAAW1Z,OAAQ,IAAO,IAE9CgB,EAAQyY,QACR5Z,KAAK4E,QAAShB,KAAMiW,EAAW1Z,OAAQ,IAAO,IAE9CH,KAAK4E,QAAShB,KAAMkW,EAAc3Z,OAAQ,IAC1CH,KAAK4E,QAAShB,KAAMiW,EAAW1Z,OAAQ,IAAO,IAC9CH,KAAK4E,QAAShB,KAAMiW,EAAW1Z,OAAQ,IAClD,OAAO+M,IAIXpN,EAAOS,UAAUI,KAAO,SAAUQ,GAC9BA,EAAUD,EAAYC,GAAUhB,OAAS,GAAI0D,OAAQ,SACrD,IAAID,GAA0B,UAAnBzC,EAAQ0C,OAAqBf,EAASD,cAAgBC,CACjE,OAAO9C,MAAK4E,QAAQhB,KAAMA,EAAMzD,OAAQgB,EAAQhB,UAGpDL,EAAOS,UAAUwZ,WAAa,SAAU5V,GACpC,GAAI6V,GAAM7V,EAAI3D,WACV+J,GAAcyP,EAAIxR,UAAUwR,EAAI7Z,OAAS,EAC7C,OAAOoK,KAAevK,KAAKgW,gBAAgBgE,EAAIxR,UAAU,EAAGwR,EAAI7Z,OAAS,KAG7EL,EAAOS,UAAUyV,eAAiB,SAAU7R,GAKxC,IAAK,GAFDwU,GAFAsB,EAAS9V,EAAI3D,WAAWgK,MAAM,IAAI0P,UAClC9S,EAAM,EAGDhH,EAAI,EAAG8B,EAAI+X,EAAO9Z,OAAQ+B,EAAI9B,IAAKA,EACxCuY,GAASsB,EAAO7Z,GACZA,EAAI,IAAM,IACVuY,GAAS,EACLA,EAAQ,IACRA,GAAS,IAGjBvR,GAAOuR,CAEX,OAAc,GAANvR,EAAW,IAIvBtH,EAAOS,UAAU2O,IAAM,SAAS/N,GAC5B,GAAI4J,IAASiP,IAAK,GAAIjY,IAAK,KAAM8S,KAAK,EAEtC,IAAK1T,EAIA,GAAuB,gBAAZA,GACZ4J,EAAKiP,IAAM7Y,EACXA,SAEC,CAAA,GAAuB,gBAAZA,GACZ,MAAO,KAEN,IAA2B,UAAxBA,EAAQ8N,YACZ,MAAO,UAXPlE,GAAKiP,IAAMha,KAAK4E,SAChBzD,IAeJ,IAFA4J,EAAO7J,EAAYC,EAAS4J,IAExBA,EAAKiP,IACL,KAAM,IAAI9W,OAAM,iDAGpB,OAAOlD,MAAKgB,MAAMkO,IAAInE,EAAKiP,IAAKjP,EAAKhJ,IAAKgJ,EAAK8J,MAgEnD/U,EAAOS,UAAU4Z,KAAO,SAAShZ,GAE7B,GAGIiZ,GACAC,EAJAC,EAAcnZ,MACdoZ,EAAoB,gBACpBC,EAAcla,OAAO0B,KAAKhC,KAAK4J,IAAI,iBAQvC,IAHAwQ,EAAWpa,KAAKiF,MAAM9E,OAASma,EAAYna,SAGxCma,EAAYG,UAGX,MADAJ,GAAgBC,EAAYG;AACpBL,EAAW,IAAMC,CAI7B,IAAGC,EAAYI,WAAY,CAEvB,GAAGnY,MAAMD,QAAQgY,EAAYI,YAGzB,MADAL,GAAgBra,KAAK2G,QAAQ2T,EAAYI,YACjCN,EAAW,IAAMC,CAExB,IAAGC,EAAYI,WAAWzL,cAAgB3O,OAAQ,CAEnD,GAAIqa,GAA4BL,EAAYI,WACxC1Y,EAAO1B,OAAO0B,KAAK2Y,EAGvB,OADAN,GAAgBra,KAAK2G,QAAQgU,EAA0B3a,KAAK2G,QAAQ3E,KAC5DoY,EAAW,IAAMC,EAG7B,KAAM,IAAInX,OAAM,0EAIpB,GAAGoX,EAAYM,SAAU,CAErB,GAAIA,GAAWN,EAAYM,QAC3B,IAAmC,KAAhCJ,EAAU7U,QAAQiV,GAGjB,MADAP,GAAgBra,KAAK2G,QAAQ3G,KAAK4J,IAAI2Q,GAAmBK,IACjDR,EAAW,IAAMC,CAG7B,MAAM,IAAInX,OAAM,wEAKpB,MADAmX,GAAgBra,KAAK2G,QAAQ3G,KAAK4J,IAAI2Q,GAAmBva,KAAK2G,QAAQ6T,KAC9DJ,EAAW,IAAMC,EAG7B,IAAIQ,IAEAC,YACIC,MACIC,IAAO,QAAS,OAAQ,SAAU,UAAW,UAAW,QAAS,UAAW,SAAU,UAAW,SAAU,cAAe,SAAU,UAAW,SAAU,SAAU,UAAW,OAAQ,OAAQ,SAAU,SAAU,UAAW,SAAU,QAAS,SAAU,QAAS,SAAU,UAAW,QAAS,UAAW,QAAS,OAAQ,OAAQ,WAAY,OAAQ,UAAW,QAAS,QAAS,WAAY,QAAS,UAAW,SAAU,UAAW,UAAW,SAAU,WAAY,UAAW,OAAQ,QAAS,SAAU,SAAU,QAAS,YAAa,QAAS,QAAS,UAAW,SAAU,QAAS,OAAQ,OAAQ,SAAU,UAAW,OAAQ,SAAU,SAAU,OAAQ,WAAY,MAAO,SAAU,SAAU,QAAS,QAAS,SAAU,QAAS,QAAS,QAAS,OAAQ,QAAS,MAAO,QAAS,QAAS,SAAU,QAAS,SAAU,YAAa,QAAS,QAAS,UAAW,SAAU,OAAQ,QAAS,SAAU,SAAU,OAAQ,OAAQ,QAAS,UAAW,QAAS,QAAS,SAAU,UAAW,SAAU,WAAY,SAAU,SAAU,QAAS,UAAW,QAAS,SAAU,UAAW,UAAW,OAAQ,UAAW,QAAS,UAAW,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,SAAU,QAAS,YAAa,QAAS,SAAU,OAAQ,OAAQ,OAAQ,SAAU,SAAU,QAAS,OAAQ,YAAa,SAAU,SAAU,SAAU,QAAS,UAAW,OAAQ,QAAS,QAAS,OAAQ,UAAW,MAAO,UAAW,UAAW,QAAS,QAAS,QAAS,SAAU,WAAY,SAAU,OAAQ,QAAS,QAAS,OAAQ,OAAQ,SAAU,MAAO,SAAU,UAAW,QAAS,QAAS,UAAW,SAAU,MAAO,QAAS,QAAS,SAAU,SAAU,QAAS,WAAY,MAAO,QAAS,SAAU,QAAS,QAAS,QAAS,SAAU,MAAO,QAAS,SAAU,UAAW,SAAU,SAAU,MAAO,OAAQ,MAAO,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAQ,SAAU,UAAW,WAAY,QAAS,QAAS,OAAQ,QAAS,MAAO,QAAS,UAAW,SAAU,SAAU,QAAS,OAAQ,QAAS,SAAU,QAAS,QAAS,SAAU,QAAS,QAAS,MAAO,UAAW,QAAS,QAAS,OAAQ,SAAU,QAAS,UAAW,UAAW,WAAY,UAAW,MAAO,QAAS,OAAQ,SAAU,UAAW,QAAS,OAAQ,YAAa,OAAQ,OAAQ,UAAW,UAAW,MAAO,QAAS,UAAW,YAAa,OAAQ,SAAU,SAAU,OAAQ,OAAQ,QAAS,QAAS,UAEl1EC,IAAO,SAAU,UAAW,OAAQ,aAAc,UAAW,UAAW,SAAU,SAAU,SAAU,UAAW,WAAY,UAAW,UAAW,SAAU,WAAY,QAAS,QAAS,SAAU,YAAa,UAAW,UAAW,SAAU,WAAY,YAAa,UAAW,QAAS,QAAS,SAAU,QAAS,OAAQ,WAAY,SAAU,UAAW,OAAQ,OAAQ,WAAY,WAAY,SAAU,SAAU,OAAQ,SAAU,QAAS,WAAY,WAAY,aAAc,WAAY,UAAW,YAAa,SAAU,WAAY,UAAW,YAAa,YAAa,YAAa,aAAc,WAAY,YAAa,SAAU,OAAQ,UAAW,WAAY,WAAY,SAAU,WAAY,WAAY,WAAY,QAAS,SAAU,SAAU,OAAQ,WAAY,UAAW,OAAQ,UAAW,QAAS,SAAU,WAAY,QAAS,SAAU,QAAS,eAAgB,UAAW,SAAU,SAAU,WAAY,QAAS,UAAW,QAAS,UAAW,QAAS,OAAQ,UAAW,SAAU,UAAW,SAAU,QAAS,aAAc,QAAS,SAAU,WAAY,OAAQ,SAAU,QAAS,WAAY,UAAW,UAAW,SAAU,YAAa,UAAW,SAAU,SAAU,UAAW,SAAU,UAAW,SAAU,UAAW,SAAU,MAAO,UAAW,UAAW,SAAU,QAAS,WAAY,aAEvyCC,QACIF,IAAO,OAAQ,OAAQ,YAAa,SAAU,WAAY,MAAO,QAAS,SAAU,QAAS,QAAS,QAAS,OAAQ,WAAY,OAAQ,SAAU,QAAS,SAAU,QAAS,SAAU,QAAS,QAAS,SAAU,SAAU,WAAY,QAAS,SAAU,QAAS,SAAU,OAAQ,YAAa,UAAW,MAAO,SAAU,QAAS,SAAU,SAAU,QAAS,OAAQ,SAAU,MAAO,UAAW,OAAQ,OAAQ,OAAQ,SAAU,QAAS,QAAS,SAAU,YAAa,OAAQ,OAAQ,YAAa,QAAS,QAAS,OAAQ,MAAO,QAAS,UAAW,SAAU,QAAS,QAAS,QAAS,SAAU,SAAU,QAAS,SAAU,QAAS,QAAS,OAAQ,MAAO,OAAQ,UAAW,QAAS,WAAY,QAAS,QAAS,QAAS,OAAQ,QAAS,SAAU,OAAQ,QAAS,UAAW,QAAS,OAAQ,SAAU,SAAU,SAAU,QAAS,YAAa,UAAW,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,WAAY,QAAS,UAAW,QAAS,UAAW,SAAU,SAAU,YAAa,QAAS,MAAO,SAAU,OAAQ,UAAW,UAAW,UAAW,MAAO,UAAW,QAAS,OAAQ,SAAU,QAAS,OAAQ,UAAW,MAAO,SAAU,SAAU,MAAO,QAAS,UAAW,UAAW,MAAO,SAAU,QAAS,QAAS,SAAU,UAAW,OAAQ,QAAS,SAAU,SAAU,UAAW,SAAU,OAAQ,OAAQ,QAAS,QAAS,SAAU,QAAS,WAAY,WAAY,OAAQ,WAAY,OAAQ,QAAS,YAAa,WAAY,SAAU,WAAY,QAAS,OAAQ,SAAU,SAAU,SAAU,SAAU,UAAW,WAAY,QAAS,QAAS,MAAO,QAAS,SAAU,OAAQ,UAAW,YAAa,OAAQ,OAAQ,OAAQ,QAAS,WAAY,QAAS,OAAQ,SAAU,SAAU,SAAU,QAAS,MAAO,SAAU,WAAY,YAAa,QAAS,QAAS,MAAO,UAAW,QAAS,UAAW,UAAW,SAAU,QAAS,UAAW,SAAU,QAAS,QAAS,UAAW,YAAa,OAAQ,WAAY,SAAU,UAAW,WAAY,UAAW,SAAU,OAAQ,OAAQ,OAAQ,SAAU,SAAU,WAAY,OAAQ,SAAU,SAAU,SAAU,OAAQ,OAAQ,SAAU,UAAW,aAAc,OAAQ,UAAW,OAAQ,SAAU,OAAQ,UAAW,QAAS,SAAU,UAAW,OAAQ,SAAU,UAAW,UAAW,SAAU,SAAU,QAAS,OAAQ,SAAU,UAAW,QAAS,QAAS,SAAU,UAAW,SAAU,UAAW,UAAW,WAEv2EC,IAAO,MAAO,UAAW,aAAc,UAAW,QAAS,SAAU,OAAQ,aAAc,WAAY,SAAU,aAAc,YAAa,UAAW,OAAQ,UAAW,SAAU,UAAW,WAAY,YAAa,SAAU,QAAS,UAAW,QAAS,WAAY,UAAW,WAAY,WAAY,QAAS,UAAW,SAAU,SAAU,QAAS,UAAW,WAAY,WAAY,UAAW,SAAU,UAAW,OAAQ,YAAa,QAAS,WAAY,QAAS,aAAc,WAAY,OAAQ,MAAO,WAAY,WAAY,WAAY,WAAY,QAAS,SAAU,YAAa,YAAa,OAAQ,QAAS,QAAS,SAAU,OAAQ,UAAW,UAAW,WAAY,SAAU,WAAY,WAAY,aAAc,SAAU,YAAa,QAAS,MAAO,SAAU,OAAQ,UAAW,QAAS,OAAQ,WAAY,UAAW,QAAS,OAAQ,UAAW,QAAS,QAAS,UAAW,OAAQ,QAAS,OAAQ,QAAS,UAAW,QAAS,QAAS,UAAW,WAAY,QAAS,UAAW,OAAQ,WAAY,aAAc,QAAS,iBAAkB,eAAgB,cAAe,YAAa,eAAgB,SAAU,SAAU,QAAS,UAAW,SAAU,UAAW,UAAW,UAAW,SAAU,UAAW,SAAU,WAAY,QAAS,YAAa,QAAS,OAAQ,QAAS,WAAY,QAAS,UAAW,YAAa,UAAW,SAAU,OAAQ,OAAQ,UAAW,OAAQ,UAAW,UAAW,WAAY,UAAW,SAAU,OAAQ,SAAU,UAAW,SAAU,SAAU,YAAa,QAAS,QAAS,WAAY,UAAW,SAAU,OAAQ,UAAW,QAAS,YAAa,UAAW,QAAS,UAAW,QAAS,OAAQ,WAAY,QAAS,QAAS,WAAY,cAIvqDE,WACIH,IAAO,QAAS,UAAW,WAAY,QAAS,QAAS,QAAS,SAAU,SAAU,QAAS,SAAU,WAAY,SAAU,UAAW,QAAS,SAAU,SAAU,WAAY,SAAU,WAAY,WAAY,QAAS,YAAa,QAAS,MAAO,SAAU,OAAQ,QAAS,QAAS,YAAa,OAAQ,SAAU,QAAS,OAAQ,QAAS,QAAS,QAAS,QAAS,WAAY,SAAU,SAAU,WAAY,QAAS,UAAW,SAAU,WAAY,WAAY,SAAU,QAAS,UAAW,UAAW,UAAW,UAAW,SAAU,SAAU,OAAQ,OAAQ,SAAU,OAAQ,SAAU,SAAU,SAAU,SAAU,aAAc,MAAO,SAAU,OAAQ,SAAU,WAAY,OAAQ,UAAW,QAAS,SAAU,SAAU,QAAS,UAAW,QAAS,UAAW,OAAQ,SAAU,OAAQ,YAAa,UAAW,UAAW,QAAS,SAAU,OAAQ,YAAa,SAAU,SAAU,aAAc,SAAU,UAAW,SAAU,WAAY,SAAU,YAAa,UAAW,UAAW,OAAQ,QAAS,QAAS,OAAQ,WAAY,SAAU,WAAY,UAAW,QAAS,OAAQ,OAAQ,SAAU,QAAS,WAAY,SAAU,QAAS,WAAY,SAAU,WAAY,OAAQ,WAAY,QAAS,QAAS,SAAU,UAAW,QAAS,OAAQ,UAAW,UAAW,SAAU,SAAU,SAAU,QAAS,WAAY,QAAS,OAAQ,QAAS,UAAW,UAAW,SAAU,QAAS,QAAS,QAAS,QAAS,SAAU,OAAQ,SAAU,OAAQ,YAAa,OAAQ,QAAS,UAAW,SAAU,QAAS,UAAW,QAAS,SAAU,WAAY,OAAQ,QAAS,UAAW,OAAQ,UAAW,SAAU,UAAW,UAAW,WAAY,QAAS,SAAU,QAAS,WAAY,SAAU,SAAU,SAAU,MAAO,UAAW,QAAS,UAAW,SAAU,SAAU,OAAQ,aAAc,UAAW,OAAQ,UAAW,OAAQ,SAAU,MAAO,QAAS,YAAa,YAAa,SAAU,SAAU,WAAY,UAAW,SAAU,OAAQ,SAAU,SAAU,SAAU,WAAY,SAAU,SAAU,YAAa,OAAQ,UAAW,OAAQ,UAAW,WAAY,UAAW,UAAW,SAAU,aAAc,WAAY,aAAc,WAAY,QAAS,QAAS,SAAU,QAAS,SAAU,UAAW,WAAY,SAAU,YAAa,QAAS,SAAU,SAAU,SAAU,UAAW,SAAU,SAAU,SAAU,OAAQ,MAAO,SAAU,QAAS,OAAQ,UAAW,UAAW,SAAU,QAAS,SAAU,UAAW,QAAS,SAAU,MAAO,UAAW,SAAU,SAAU,SAAU,SAAU,SAAU,UAAW,UAAW,QAAS,UAAW,UAAW,UAAW,UAAW,SAAU,SAAU,OAAQ,WAAY,UAAW,MAAO,QAAS,UAAW,OAAQ,OAAQ,UAAW,SAAU,OAAQ,WAAY,OAAQ,WAAY,UAAW,SAAU,UAAW,SAAU,UAAW,UAAW,SAAU,SAAU,SAAU,UAAW,WAAY,QAAS,QAAS,QAAS,YAAa,WAAY,OAAQ,UAAW,WAAY,QAAS,QAAS,OAAQ,SAAU,OAAQ,OAAQ,SAAU,SAAU,WAAY,SAAU,OAAQ,SAAU,QAAS,SAAU,WAAY,SAAU,QAAS,OAAQ,SAAU,QAAS,SAAU,UAAW,SAAU,SAAU,OAAQ,QAAS,OAAQ,SAAU,WAAY,QAAS,UAAW,QAAS,QAAS,SAAU,QAAS,YAAa,UAAW,SAAU,QAAS,QAAS,SAAU,SAAU,WAAY,QAAS,UAAW,WAAY,SAAU,UAAW,UAAW,SAAU,SAAU,YAAa,UAAW,SAAU,OAAQ,QAAS,SAAU,OAAQ,OAAQ,OAAQ,WAAY,SAAU,QAAS,SAAU,UAAW,UAAW,OAAQ,SAAU,UAAW,QAAS,SAAU,UAAW,UAAW,SAAU,OAAQ,QAAS,UAAW,SAAU,QAAS,SAAU,aAAc,WAAY,SAAU,UAAW,SAAU,OAAQ,UAAW,SAAU,SAAU,UAAW,SAAU,UAAW,UAAW,YAAa,QAAS,SAAU,WAAY,SAAU,OAAQ,SAAU,SAAU,UAAW,SAAU,SAAU,UAAW,UAAW,OAAQ,QAAS,QAAS,QAAS,UAAW,OAAQ,QAAS,UAAW,OAAQ,WAAY,WAAY,UAAW,UAAW,WAAY,QAAS,QAAS,QAAS,aAAc,SAAU,QAAS,UAAW,WAAY,OAAQ,QAAS,OAAQ,WAAY,QAAS,UAAW,QAAS,SAAU,QAAS,UAAW,WAAY,UAAW,UAAW,cAAe,QAAS,QAAS,SAAU,UAAW,aAAc,YAAa,SAAU,WAAY,QAAS,WAAY,MAAO,UAAW,QAAS,YAAa,WAAY,QAAS,QAAS,QAAS,QAAS,OAAQ,OAAQ,QAAS,QAAS,OAAQ,YAAa,OAAQ,SAAU,SAAU,SAAU,UAAW,SAAU,OAAQ,UAAW,SAAU,QAAS,WAAY,SAAU,SAAU,WAAY,SAAU,OAAQ,OAAQ,aAAc,QAAS,QAAS,SAAU,SAAU,SAAU,YAAa,UAAW,OAAQ,QAAS,YAAa,QAAS,WAAY,UAAW,OAAQ,SAAU,UAAW,UAAW,UAAW,YAAa,OAAQ,UAAW,UAEj7JC,IAAO,SAAU,WAAY,WAAY,UAAW,QAAS,SAAU,WAAY,UAAW,SAAU,SAAU,UAAW,WAAY,QAAS,YAAa,aAAc,SAAU,WAAY,WAAY,SAAU,WAAY,YAAa,WAAY,QAAS,SAAU,WAAY,UAAW,UAAW,WAAY,QAAS,YAAa,QAAS,WAAY,WAAY,QAAS,UAAW,aAAc,QAAS,UAAW,YAAa,QAAS,UAAW,UAAW,QAAS,SAAU,aAAc,UAAW,OAAQ,WAAY,WAAY,aAAc,WAAY,WAAY,QAAS,WAAY,aAAc,aAAc,QAAS,aAAc,YAAa,SAAU,SAAU,UAAW,YAAa,aAAc,UAAW,YAAa,YAAa,aAAc,UAAW,SAAU,QAAS,WAAY,YAAa,aAAc,QAAS,UAAW,YAAa,SAAU,UAAW,WAAY,UAAW,QAAS,UAAW,WAAY,UAAW,YAAa,UAAW,OAAQ,SAAU,QAAS,UAAW,YAAa,cAAe,eAAgB,WAAY,aAAc,QAAS,UAAW,WAAY,QAAS,UAAW,QAAS,QAAS,UAAW,QAAS,UAAW,WAAY,YAAa,aAAc,UAAW,YAAa,SAAU,UAAW,UAAW,OAAQ,WAAY,QAAS,UAAW,QAAS,OAAQ,SAAU,WAAY,QAAS,SAAU,YAAa,WAAY,UAAW,WAAY,aAAc,QAAS,UAAW,UAAW,OAAQ,SAAU,SAAU,UAAW,SAAU,WAAY,WAAY,QAAS,WAAY,SAAU,SAAU,SAAU,WAAY,SAAU,UAAW,QAAS,WAAY,UAAW,SAAU,SAAU,WAAY,QAAS,WAAY,WAAY,WAAY,QAAS,QAAS,UAAW,UAAW,QAAS,cAAe,WAAY,UAAW,QAAS,UAAW,SAAU,WAAY,UAAW,WAAY,OAAQ,WAAY,SAAU,YAAa,UAAW,cAAe,UAAW,QAAS,WAAY,SAAU,WAAY,QAAS,eAAgB,WAAY,WAAY,WAAY,UAAW,UAAW,WAAY,SAAU,cAAe,WAAY,aAAc,UAAW,WAAY,SAAU,UAAW,UAAW,UAAW,UAAW,WAAY,QAAS,SAAU,UAAW,SAAU,YAAa,QAAS,SAAU,WAAY,SAAU,UAAW,SAAU,aAAc,aAAc,WAAY,cAAe,WAAY,UAAW,WAAY,cAAe,YAAa,YAAa,WAAY,SAAU,aAAc,aAAc,cAAe,aAAc,SAAU,WAAY,UAAW,MAAO,SAAU,QAAS,UAAW,WAAY,OAAQ,QAAS,SAAU,SAAU,SAAU,YAAa,UAAW,YAAa,QAAS,WAAY,OAAQ,QAAS,UAAW,YAAa,cAAe,cAAe,YAAa,SAAU,WAAY,WAAY,YAAa,SAAU,WAAY,QAAS,UAAW,QAAS,WAAY,SAAU,UAAW,cAAe,aAAc,QAAS,WAAY,SAAU,SAAU,SAAU,SAAU,UAAW,UAAW,OAAQ,UAAW,SAAU,QAAS,WAAY,UAAW,QAAS,UAAW,SAAU,SAAU,WAAY,WAAY,SAAU,UAAW,OAAQ,UAAW,UAAW,QAAS,YAAa,WAAY,WAAY,QAAS,QAAS,UAAW,UAAW,UAAW,QAAS,UAAW,QAAS,UAAW,OAAQ,QAAS,aAAc,aAAc,QAAS,SAAU,YAAa,SAAU,QAAS,UAAW,aAAc,eAAgB,UAAW,WAAY,QAAS,WAAY,SAAU,QAAS,UAAW,aAAc,UAAW,WAAY,UAAW,YAAa,YAAa,UAAW,iBAAkB,kBAAmB,MAAO,YAAa,SAAU,WAAY,aAAc,OAAQ,OAAQ,QAAS,QAAS,SAAU,UAAW,OAAQ,UAAW,QAAS,UAAW,SAAU,WAAY,cAAe,SAAU,WAAY,YAAa,WAAY,YAAa,UAAW,WAAY,QAAS,UAAW,SAAU,QAAS,WAAY,UAAW,UAAW,UAAW,UAAW,UAAW,YAAa,WAAY,UAAW,UAAW,UAAW,OAAQ,aAAc,WAAY,QAAS,UAAW,UAAW,SAAU,UAAW,UAAW,OAAQ,MAAO,WAAY,UAAW,UAAW,UAAW,WAAY,QAAS,UAAW,UAAW,UAAW,QAAS,UAAW,UAAW,YAAa,OAAQ,aAAc,QAAS,aAAc,UAAW,QAAS,UAAW,QAAS,UAAW,aAAc,UAAW,UAAW,WAAY,QAAS,QAAS,UAAW,UAAW,QAAS,cAAe,aAAc,eAAgB,UAAW,YAAa,SAAU,WAAY,YAAa,SAAU,aAAc,QAAS,UAAW,SAAU,SAAU,UAAW,UAAW,WAAY,QAAS,OAAQ,aAAc,YAAa,YAAa,UAAW,UAAW,WAAY,WAAY,QAAS,QAAS,UAAW,cAAe,UAAW,WAAY,aAAc,QAAS,YAAa,QAAS,QAAS,UAAW,UAAW,UAAW,OAAQ,SAAU,QAAS,QAAS,YAAa,SAAU,aAAc,WAAY,QAAS,YAAa,YAAa,SAAU,WAAY,WAAY,YAAa,YAAa,QAAS,WAAY,YAAa,SAAU,cAAe,cAAe,cAAe,aAAc,aAAc,WAAY,SAAU,WAAY,SAAU,WAAY,UAAW,OAAQ,QAAS,WAAY,SAAU,SAAU,WAAY,WAAY,QAAS,UAAW,SAAU,WAAY,SAAU,YAAa,YAAa,UAAW,YAAa,SAAU,SAAU,SAAU,WAAY,QAAS,WAAY,KAAM,QAAS,KAAM,QAAS,WAAY,UAAW,YAAa,MAAO,UAAW,MAAO,QAAS,UAAW,SAAU,OAAQ,SAAU,OAAQ,cAAe,YAAa,SAAU,UAAW,YAAa,QAAS,QAAS,WAAY,WAAY,QAAS,QAAS,QAAS,KAAM,OAAQ,MAAO,SAAU,QAAS,OAAQ,OAAQ,WAAY,aAAc,WAAY,QAAS,QAAS,UAAW,YAAa,SAAU,QAAS,KAAM,WAAY,YAAa,SAAU,OAAQ,SAAU,YAAa,SAAU,QAAS,UAAW,YAAa,SAAU,UAAW,WAAY,QAAS,WAAY,UAAW,YAAa,YAAa,QAAS,UAAW,UAAW,WAAY,UAAW,WAAY,QAAS,UAAW,WAAY,WAAY,UAAW,WAAY,WAAY,YAAa,SAAU,YAAa,aAAc,UAAW,WAAY,WAAY,OAAQ,UAAW,UAAW,UAAW,WAAY,YAAa,SAAU,SAAU,WAAY,UAAW,WAAY,aAAc,UAAW,UAAW,QAAS,OAAQ,SAAU,SAAU,SAAU,YAAa,SAAU,WAAY,YAAa,YAAa,WAAY,YAAa,UAAW,QAAS,WAAY,SAAU,WAAY,QAAS,UAAW,YAAa,UAAW,UAAW,WAAY,SAAU,UAAW,QAAS,SAAU,OAAQ,OAAQ,UAAW,aAAc,QAAS,UAAW,UAAW,UAAW,SAAU,YAAa,SAAU,UAAW,YAAa,aAAc,WAAY,aAAc,SAAU,UAAW,SAAU,SAAU,aAAc,WAAY,YAAa,cAAe,QAAS,aAAc,UAAW,UAAW,YAAa,UAAW,UAAW,WAAY,OAAQ,SAAU,SAAU,UAAW,SAAU,WAAY,UAAW,QAAS,UAAW,WAAY,QAAS,UAAW,WAAY,QAAS,UAAW,UAAW,SAAU,SAAU,WAAY,UAAW,WAAY,OAAQ,OAAQ,QAAS,WAAY,UAAW,YAAa,OAAQ,SAAU,YAAa,WAAY,UAAW,QAAS,OAAQ,SAAU,QAAS,WAAY,OAAQ,UAAW,YAAa,UAAW,SAAU,WAAY,YAAa,WAAY,OAAQ,OAAQ,SAAU,SAAU,SAAU,WAAY,UAAW,QAAS,UAAW,WAAY,SAAU,YAAa,UAAW,WAAY,UAAW,YAAa,UAAW,WAAY,aAAc,UAAW,UAAW,WAAY,QAAS,UAAW,OAAQ,SAAU,UAAW,UAAW,SAAU,SAAU,QAAS,UAAW,WAAY,UAAW,YAAa,WAAY,aAAc,OAAQ,SAAU,UAAW,UAAW,QAAS,WAAY,QAAS,UAAW,WAAY,UAAW,UAAW,YAAa,QAAS,SAAU,WAAY,WAAY,WAAY,SAAU,UAAW,WAAY,aAAc,cAAe,WAAY,aAAc,QAAS,UAAW,UAAW,WAAY,OAAQ,QAAS,QAAS,UAAW,WAAY,QAAS,SAAU,YAAa,UAAW,QAAS,WAAY,aAAc,OAAQ,YAAa,WAAY,QAAS,aAAc,UAAW,WAAY,UAAW,QAAS,UAAW,WAAY,OAAQ,WAAY,SAAU,SAAU,YAAa,QAAS,OAAQ,YAAa,YAAa,WAAY,UAAW,YAAa,SAAU,UAAW,QAAS,QAAS,UAAW,QAAS,YAAa,OAAQ,UAAW,UAAW,QAAS,UAAW,UAAW,WAAY,UAAW,QAAS,SAAU,WAAY,QAAS,YAAa,YAAa,SAAU,SAAU,QAAS,QAAS,SAAU,SAAU,WAAY,UAAW,SAAU,UAAW,OAAQ,WAAY,QAAS,UAAW,QAAS,UAAW,WAAY,QAAS,WAAY,WAAY,YAAa,SAAU,QAAS,UAAW,YAAa,UAAW,YAAa,cAAe,QAAS,UAAW,SAAU,OAAQ,QAAS,QAAS,UAAW,UAAW,UAAW,WAAY,QAAS,QAAS,QAAS,QAAS,SAAU,QAAS,YAAa,YAAa,YAAa,QAAS,QAAS,WAAY,SAAU,WAAY,SAAU,QAAS,UAAW,UAAW,QAAS,YAAa,YAAa,YAAa,YAAa,SAAU,QAAS,OAAQ,QAAS,UAAW,QAAS,UAAW,aAAc,UAAW,QAAS,WAAY,YAAa,YAAa,aAAc,UAAW,YAAa,SAAU,SAAU,SAAU,UAAW,SAAU,cAAe,YAAa,aAAc,OAAQ,SAAU,YAAa,SAAU,YAAa,WAAY,QAAS,UAAW,WAAY,UAAW,OAAQ,QAAS,QAAS,QAAS,QAAS,aAAc,aAAc,WAAY,SAAU,aAAc,UAAW,SAAU,UAAW,UAAW,OAAQ,OAAQ,QAAS,YAAa,UAAW,QAAS,SAAU,UAAW,QAAS,UAAW,UAAW,YAAa,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"} \ No newline at end of file
diff --git a/src/node_modules/chance/docs/finance/cc.md b/src/node_modules/chance/docs/finance/cc.md
new file mode 100644
index 0000000..b5bf3d9
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/cc.md
@@ -0,0 +1,37 @@
+# cc
+
+```js
+// usage
+chance.cc()
+chance.cc({type: 'Mastercard'})
+```
+
+<p class="pullquote" data-pullquote='Somewhat obvious warning: Do not use this to hit live payment gateways...' markdown="1"></p>
+
+Generate a random credit card number. This card number will pass the
+[Luhn algorithm][Luhn] so it looks like a legit card.
+
+```js
+chance.cc();
+=> '6304038511073827'
+```
+
+Optionally specify a particular type of card to return:
+
+```js
+chance.cc({type: 'Mastercard'});
+=> '5171206237468496'
+```
+
+The type can be specified by the long name, or by the short name:
+
+```js
+chance.cc({type: 'mc'});
+=> '5103820202214116'
+```
+
+
+The [types][types] are enumerated below.
+
+[Luhn]: http://en.wikipedia.org/wiki/Luhn_algorithm
+[types]: #cc_type
diff --git a/src/node_modules/chance/docs/finance/cc_type.md b/src/node_modules/chance/docs/finance/cc_type.md
new file mode 100644
index 0000000..538e43b
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/cc_type.md
@@ -0,0 +1,42 @@
+# cc_type
+
+```js
+// usage
+chance.cc_type()
+chance.cc_type({raw: true})
+```
+
+Return a random credit card type.
+
+```js
+chance.cc_type();
+=> 'Visa'
+```
+
+Default returns just the name. To return the entire object (consisting of name,
+short name, numeric prefix, and length), specify so with the raw flag.
+
+```js
+chance.cc_type({raw: true});
+=> {name: 'Discover Card', short_name: 'discover', prefix: '6011', length: 16}
+```
+
+The available types are (name - *short_name*):
+
+* American Express - *amex*
+* Bankcard - *bankcard*
+* China UnionPay - *chinaunion*
+* Diners Club Carte Blanche - *dccarte*
+* Diners Club enRoute - *dcenroute*
+* Diners Club International - *dcintl*
+* Diners Club United States & Canada - *dcusc*
+* Discover Card - *discover*
+* InstaPayment - *instapay*
+* JCB - *jcb*
+* Laser - *laser*
+* Maestro - *maestro*
+* Mastercard - *mc*
+* Solo - *solo*
+* Switch - *switch*
+* Visa - *visa*
+* Visa Electron - *electron*
diff --git a/src/node_modules/chance/docs/finance/currency.md b/src/node_modules/chance/docs/finance/currency.md
new file mode 100644
index 0000000..03be07c
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/currency.md
@@ -0,0 +1,13 @@
+# currency
+
+```js
+// usage
+chance.currency()
+```
+
+Generate a random currency.
+
+```js
+chance.currency();
+=> { code: "TVD", name: "Tuvalu Dollar" }
+```
diff --git a/src/node_modules/chance/docs/finance/currency_pair.md b/src/node_modules/chance/docs/finance/currency_pair.md
new file mode 100644
index 0000000..dab1151
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/currency_pair.md
@@ -0,0 +1,13 @@
+# currency_pair
+
+```js
+// usage
+chance.currency_pair()
+```
+
+Generate a currency pair. Handy for simulating currency conversions. Guaranteed to return a unique pair (and not the same currency twice).
+
+```js
+chance.currency_pair();
+=> [{ code: "ALL", name: "Albania Lek" }, { code: "ZWD", name: "Zimbabwe Dollar" }]
+```
diff --git a/src/node_modules/chance/docs/finance/dollar.md b/src/node_modules/chance/docs/finance/dollar.md
new file mode 100644
index 0000000..8840b00
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/dollar.md
@@ -0,0 +1,30 @@
+# dollar
+
+```js
+// usage
+chance.dollar()
+chance.dollar({max: 250})
+```
+
+<p class="pullquote" data-pullquote="Dolla, dolla, bill ya'll" markdown="1"></p>
+
+Return a random dollar amount.
+
+```js
+chance.dollar();
+=> "$2560.27"
+
+chance.dollar();
+=> "$750.99"
+```
+
+By default returns dollar amount no larger than 10000. Optionally specify
+the max to make it larger (or smaller).
+
+```js
+chance.dollar({max: 20});
+=> "$15.23"
+
+chance.dollar({max: 10000000})
+=> "$5051205.49"
+```
diff --git a/src/node_modules/chance/docs/finance/euro.md b/src/node_modules/chance/docs/finance/euro.md
new file mode 100644
index 0000000..553a7fe
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/euro.md
@@ -0,0 +1,28 @@
+# euro
+
+```js
+// usage
+chance.euro()
+chance.euro({max: 250})
+```
+
+Return a random euro amount. Formatting depends on the current locale (samples are displayed with european formatting)
+
+```js
+chance.euro();
+=> "2.560,27€"
+
+chance.euro();
+=> "750.99€"
+```
+
+By default returns euro amount no larger than 10000. Optionally specify
+the max to make it larger (or smaller).
+
+```js
+chance.euro({max: 20});
+=> "15,23€"
+
+chance.euro({max: 10000000})
+=> "5.051.205,49€"
+```
diff --git a/src/node_modules/chance/docs/finance/exp.md b/src/node_modules/chance/docs/finance/exp.md
new file mode 100644
index 0000000..05fb59d
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/exp.md
@@ -0,0 +1,21 @@
+# exp
+
+```js
+// usage
+chance.exp()
+chance.exp({raw: true})
+```
+
+Generate a random credit card expiration.
+
+```js
+chance.exp();
+=> '10/2020'
+```
+
+Optionally specify that a raw object be returned rather than a string
+
+```js
+chance.exp({raw: true});
+=> {month: '11', year: '2017'}
+```
diff --git a/src/node_modules/chance/docs/finance/exp_month.md b/src/node_modules/chance/docs/finance/exp_month.md
new file mode 100644
index 0000000..b77ad1e
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/exp_month.md
@@ -0,0 +1,28 @@
+# exp_month
+
+```js
+// usage
+chance.exp_month()
+chance.exp_month({future: true})
+```
+
+Generate a random credit card expiration month.
+
+```js
+chance.exp_month();
+=> '01'
+```
+
+Optionally specify that it must be a later month than the current month.
+
+```js
+chance.exp_month({future: true});
+=> '10'
+```
+
+So if called in June, this would return a random month from July - Dec. If
+called in October, would return November or December.
+
+This because many credit card sandboxes require an expiration date later
+than the current date so it's necessary when generating an expiration with the
+current year to generate a month later than the current month.
diff --git a/src/node_modules/chance/docs/finance/exp_year.md b/src/node_modules/chance/docs/finance/exp_year.md
new file mode 100644
index 0000000..3a203f9
--- /dev/null
+++ b/src/node_modules/chance/docs/finance/exp_year.md
@@ -0,0 +1,15 @@
+# exp_year
+
+```js
+// usage
+chance.exp_year()
+```
+
+Generate a random credit card expiration year.
+
+```js
+chance.exp_year();
+=> '2018'
+```
+
+Returns a random year between today and 10 years in the future.
diff --git a/src/node_modules/chance/docs/helpers/capitalize.md b/src/node_modules/chance/docs/helpers/capitalize.md
new file mode 100644
index 0000000..52b41a7
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/capitalize.md
@@ -0,0 +1,13 @@
+# capitalize
+
+```js
+// usage
+chance.capitalize(string)
+```
+
+Capitalize the first letter of a word
+
+```js
+chance.capitalize('bread')
+=> 'Bread'
+```
diff --git a/src/node_modules/chance/docs/helpers/mixin.md b/src/node_modules/chance/docs/helpers/mixin.md
new file mode 100644
index 0000000..499a98f
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/mixin.md
@@ -0,0 +1,90 @@
+# mixin
+
+```js
+// usage
+chance.mixin(<Object>)
+```
+
+Mixins are a very powerful way to extend **Chance** to fit the needs of your
+specific application.
+
+First, if you are thinking of using a mixin for **Chance**, please consider first
+whether your use is something from which others may benefit. If so, please
+submit a [pull request][PR] rather than using a mixin!
+
+Spread the love and give everyone the benefit of your awesome generator :)
+
+Now, that said, there are bound to be times when you want to generate something
+random that is specific to your application but not widely applicable. Enter
+mixins!
+
+**Chance** mixins allow you to add one-off methods to **Chance** which you can
+use later.
+
+For example, let's say I have a user object which consists of first, last,
+and email.
+
+```js
+
+var user = {
+first: 'John',
+last: 'Smith',
+email: 'john@aol.com'
+};
+
+```
+
+Let's say I want to be able to randomly generate these user objects.
+
+This is not the type of thing which would be widely applicable as it's specific
+to my application so it's perfect for a mixin!
+
+To create a mixin, build an object whose keys are the names of the methods, and
+whose values are the functions to be called.
+
+Note: Within each function, you will have access to `chance` itself!
+
+For example, to create a `user` mixin:
+
+```js
+chance.mixin({
+'user': function() {
+return {
+first: chance.first(),
+last: chance.last(),
+email: chance.email()
+};
+}
+});
+
+// Then you can call your mixin
+chance.user();
+
+=> {first: 'Eli', last: 'Benson', email: 'gembibuj@dugesan.com'}
+```
+
+Mixins can even include other mixins!
+
+For example, to "extend" the user object:
+```js
+chance.mixin({
+'user': function () {
+return {
+first: chance.first(),
+last: chance.last(),
+email: chance.email()
+};
+},
+'social_user': function () {
+var user = chance.user();
+user.network = chance.pick(['facebook', 'twitter']);
+return user;
+}
+});
+```
+
+So we have a second mixin here, `social_user` which is using the `user` mixin
+and adding to it! Note, these mixins can be defined in any order on the object
+if both declared at once.
+
+[PR]: https://github.com/victorquinn/chancejs/pulls
diff --git a/src/node_modules/chance/docs/helpers/pad.md b/src/node_modules/chance/docs/helpers/pad.md
new file mode 100644
index 0000000..8606767
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/pad.md
@@ -0,0 +1,40 @@
+# pad
+
+```js
+// usage
+chance.pad(number, width)
+chance.pad(number, width, padder)
+```
+
+Pad a number with some string until it reaches a desired width.
+
+By default, `chance.pad()` will pad with zeroes. For example, to zero-pad
+numbers such that the outcome width is 5, do the following.
+
+```js
+chance.pad(45, 5)
+=> '00045'
+
+chance.pad(284, 5)
+=> '00284'
+
+chance.pad(82843, 5)
+=> '82843'
+```
+
+Notice how every item returned is a string with leading zeroes until the width
+is 5 for each one.
+
+Can optionally specify a character if the desire is to pad with something other
+than zero.
+
+```js
+chance.pad(81, 5, 'Z')
+=> 'ZZZ81'
+
+chance.pad(692, 5, 'Z')
+=> 'ZZ692'
+
+chance.pad(52859, 5)
+=> '52859'
+```
diff --git a/src/node_modules/chance/docs/helpers/pick.md b/src/node_modules/chance/docs/helpers/pick.md
new file mode 100644
index 0000000..68f9824
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/pick.md
@@ -0,0 +1,9 @@
+# pick
+
+```js
+// usage
+chance.pick(array)
+chance.pick(array, count)
+```
+
+**`pick()` is now deprecated in favor of `pickone()` and `pickset()`**
diff --git a/src/node_modules/chance/docs/helpers/pickone.md b/src/node_modules/chance/docs/helpers/pickone.md
new file mode 100644
index 0000000..b3f1cbe
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/pickone.md
@@ -0,0 +1,13 @@
+# pickone
+
+```js
+// usage
+chance.pickone(array)
+```
+
+Given an array, pick a random element and return it
+
+```js
+chance.pickone(['alpha', 'bravo', 'charlie', 'delta', 'echo']);
+=> 'delta'
+```
diff --git a/src/node_modules/chance/docs/helpers/pickset.md b/src/node_modules/chance/docs/helpers/pickset.md
new file mode 100644
index 0000000..3c3b393
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/pickset.md
@@ -0,0 +1,20 @@
+# pickset
+
+```js
+// usage
+chance.pickset(array, quantity)
+```
+
+Given an array, pick some random elements and return them in a new array
+
+```js
+chance.pickset(['alpha', 'bravo', 'charlie', 'delta', 'echo'], 3);
+=> ['echo', 'alpha', 'bravo']
+```
+
+Optionally omit the quantity to retrieve a set with length 1
+
+```js
+chance.pickset(['alpha', 'bravo', 'charlie', 'delta', 'echo']);
+=> ['delta']
+```
diff --git a/src/node_modules/chance/docs/helpers/set.md b/src/node_modules/chance/docs/helpers/set.md
new file mode 100644
index 0000000..da0293f
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/set.md
@@ -0,0 +1,23 @@
+# set
+
+```js
+// usage
+chance.set(key, value)
+```
+
+Used for overriding the default data used by Chance.
+
+For example, if instead of the default set of last names (which were pulled from the U.S. census data and therefore obviously American biased), you could replace the data for the first names with something more suited to your task. For example, if you want instead to pick from last names of houses in *A Song of Ice and Fire*, you could do something like:
+
+```js
+chance.set('lastNames', ['Arryn', 'Baratheon', 'Bolton', 'Frey', 'Greyjoy', 'Lannister', 'Martell', 'Stark', 'Targaryen', 'Tully', 'Tyrell']);
+
+// then
+chance.last()
+=> 'Lannister'
+```
+
+This is very handy for internationalization.
+
+Available keys for datasets to override: `firstNames`, `lastNames`, `provinces`, `us_states_and_dc`, `territories`, `armed_forces`, `street_suffixes`, `months`, `cc_types`, `currency_types`
+
diff --git a/src/node_modules/chance/docs/helpers/shuffle.md b/src/node_modules/chance/docs/helpers/shuffle.md
new file mode 100644
index 0000000..dc80097
--- /dev/null
+++ b/src/node_modules/chance/docs/helpers/shuffle.md
@@ -0,0 +1,13 @@
+# shuffle
+
+```js
+// usage
+chance.shuffle(array)
+```
+
+Given an array, scramble the order and return it.
+
+```js
+chance.shuffle(['alpha', 'bravo', 'charlie', 'delta', 'echo']);
+=> ['echo', 'delta', 'alpha', 'charlie', 'bravo']
+```
diff --git a/src/node_modules/chance/docs/inspector.png b/src/node_modules/chance/docs/inspector.png
new file mode 100644
index 0000000..6005e5e
--- /dev/null
+++ b/src/node_modules/chance/docs/inspector.png
Binary files differ
diff --git a/src/node_modules/chance/docs/intro.md b/src/node_modules/chance/docs/intro.md
new file mode 100644
index 0000000..53d3797
--- /dev/null
+++ b/src/node_modules/chance/docs/intro.md
@@ -0,0 +1,56 @@
+# ![Chance](./logo.png)
+
+**Chance** is a minimalist generator of random <a href="#true-random">[1]</a>
+strings, numbers, etc. to help reduce some monotony particularly while writing
+automated tests or anywhere else you need anything random.
+
+**Chance** is open source software and is released under the developer and
+business-friendly [MIT License](http://en.wikipedia.org/wiki/MIT_License)
+
+**Chance** is loaded on this site so you can just open the console on your
+browser and play!
+
+![Chance Web Inspector](./inspector.png)
+
+<a class="twitter-share-button"
+ href="https://twitter.com/share"
+ data-size="large"
+ data-text="Chance - Utility library to generate random things for JavaScript"
+ data-hashtags="chancejs,javascript"
+ data-url="http://chancejs.com/"
+ data-count="horizontal"
+ data-via="victorquinn">
+ Tweet
+</a>
+
+<iframe src="https://ghbtns.com/github-btn.html?user=chancejs&repo=chancejs&type=star&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe>
+
+Written by [Victor Quinn](https://www.victorquinn.com)
+
+[![Chance on NPM](https://nodei.co/npm/chance.png?downloads=true)](https://nodei.co/npm/chance/)
+
+<ul class=downloads>
+ <li>
+ <a href="chance.js" class="download" download="chance.js">chance.js (for development)</a>
+ - <i>95KB uncompressed</i>
+ </li>
+ <li>
+ <a href="chance.min.js" class="download">chance.min.js (for production)</a>
+ – <i>55KB, 17KB when gzipped</i>
+ </li>
+ </ul>
+
+Or move on to the [Usage](usage/bower.md) section for many other ways to get and use Chance.
+
+## Acknowledgements & Thanks
+
+Thank you to [Sean McCullough](https://github.com/banksean) for your [Mersenne Twister gist](https://gist.github.com/banksean/300494) on which almost the entirety of this library is dependent. And to Takuji Nishimura and Makoto Matsumoto who wrote the original C version on which Sean's JavaScript gist is based.
+
+And of course a monster thank you to all of the [Contributors](https://github.com/chancejs/chancejs/graphs/contributors) to this project!
+
+<small>© 2013 [Victor Quinn](https://www.victorquinn.com)
+Chance and this documentation are released under the terms of the [MIT license](http://opensource.org/licenses/MIT).</small>
+
+<a id="true-random">[1]</a> Of course true mathematicians out there would say that this ought to be considered as only generating pseudo-random things, not true random. For that we'd need some external entropy, not depending on a Mersenne Twister, blah, blah, blah. However, for most practical uses of this library for which it was created and intended, such as generating random names and addresses for automated tests, our random is good enough. But it should probably NOT be used for any cryptographic applications requiring true-random. See [Wikipedia's article](http://vq.io/12hBd84) for more info.
+
+<a href="https://www.gosquared.com/analytics/?utm_campaign=badge"><img src="https://stats.gs/badge" alt="Analytics by GoSquared" /></a> \ No newline at end of file
diff --git a/src/node_modules/chance/docs/location/address.md b/src/node_modules/chance/docs/location/address.md
new file mode 100644
index 0000000..d797ca5
--- /dev/null
+++ b/src/node_modules/chance/docs/location/address.md
@@ -0,0 +1,21 @@
+# address
+
+```js
+// usage
+chance.address()
+chance.address({short_suffix: true})
+```
+
+Generate a random street address
+
+```js
+chance.address();
+=> '5447 Bazpe Lane'
+```
+
+Optionally mandate that it return a short suffix
+
+```js
+chance.address({short_suffix: true});
+=> '536 Baner Rd'
+```
diff --git a/src/node_modules/chance/docs/location/altitude.md b/src/node_modules/chance/docs/location/altitude.md
new file mode 100644
index 0000000..01cc612
--- /dev/null
+++ b/src/node_modules/chance/docs/location/altitude.md
@@ -0,0 +1,29 @@
+# altitude
+
+```js
+// usage
+chance.altitude()
+chance.altitude({ fixed: 7 })
+chance.altitude({ max: 1000 })
+```
+
+Generate a random altitude, in meters.
+
+```js
+chance.altitude()
+=> 1863.21417
+```
+
+By default, includes 5 digits of accuracy after the decimal. Can override with the `fixed` option.
+
+```js
+chance.altitude({ fixed: 7 })
+=> 6897.8978386
+```
+
+By default, max of 8848m (height of Mount Everest), but this can be overridden with the `max` option.
+
+```js
+chance.altitude({ max: 1000 })
+=> 890.20665
+```
diff --git a/src/node_modules/chance/docs/location/areacode.md b/src/node_modules/chance/docs/location/areacode.md
new file mode 100644
index 0000000..df92ac3
--- /dev/null
+++ b/src/node_modules/chance/docs/location/areacode.md
@@ -0,0 +1,16 @@
+# areacode
+
+```js
+// usage
+chance.areacode()
+```
+
+Generate a random area code
+
+```js
+chance.areacode()
+=> '(526)'
+```
+
+*Note, this is a US area code, we have little support for internationalization
+at this time. Hope to fix that in the future!*
diff --git a/src/node_modules/chance/docs/location/city.md b/src/node_modules/chance/docs/location/city.md
new file mode 100644
index 0000000..0916ab4
--- /dev/null
+++ b/src/node_modules/chance/docs/location/city.md
@@ -0,0 +1,13 @@
+# city
+
+```js
+// usage
+chance.city()
+```
+
+Generate a random city name
+
+```js
+chance.city();
+=> 'Cowotba'
+```
diff --git a/src/node_modules/chance/docs/location/coordinates.md b/src/node_modules/chance/docs/location/coordinates.md
new file mode 100644
index 0000000..d1e143b
--- /dev/null
+++ b/src/node_modules/chance/docs/location/coordinates.md
@@ -0,0 +1,34 @@
+# coordinates
+
+```js
+// usage
+chance.coordinates()
+chance.coordinates({fixed: 2})
+chance.coordinates({format: 'dms'})
+```
+
+Generate random coordinates, which are latitude and longitude, comma separated.
+
+```js
+chance.coordinates();
+=> "-29.52974, 24.52815"
+```
+
+By default includes 5 fixed digits after decimal, can specify otherwise.
+
+```js
+chance.coordinates({fixed: 2});
+=> "-49.16, 68.81"
+```
+
+By default cooridnates' format is dd, can specify otherwise.
+
+```js
+chance.coordinates({format: 'ddm'});
+=> "41°44.9592, 25°56.2622"
+```
+
+```js
+chance.coordinates({format: 'dms'});
+=> "56°2’9.8187”, 79°55’40.6812”"
+```
diff --git a/src/node_modules/chance/docs/location/country.md b/src/node_modules/chance/docs/location/country.md
new file mode 100644
index 0000000..1617ad7
--- /dev/null
+++ b/src/node_modules/chance/docs/location/country.md
@@ -0,0 +1,23 @@
+# country
+
+```js
+// usage
+chance.country()
+chance.country({ full: true })
+```
+
+Return a random country.
+
+```js
+chance.country();
+=> 'LT'
+```
+
+By default, returns only the 2 letter ISO 3166-1 code for the country.
+
+Optionally specify that it ought to return a full country name.
+
+```js
+chance.country({ full: true });
+=> 'Venezuela'
+```
diff --git a/src/node_modules/chance/docs/location/depth.md b/src/node_modules/chance/docs/location/depth.md
new file mode 100644
index 0000000..163c3ce
--- /dev/null
+++ b/src/node_modules/chance/docs/location/depth.md
@@ -0,0 +1,29 @@
+# depth
+
+```js
+// usage
+chance.depth()
+chance.depth({ fixed: 2 })
+chance.depth({ min: -1000 })
+```
+
+Generate a random depth, in meters. Depths are always negative
+
+```js
+chance.depth()
+=> -2126.95039
+```
+
+By default, includes 5 digits of accuracy after the decimal. Can override with the `fixed` option.
+
+```js
+chance.depth({ fixed: 2 })
+=> -1542.11
+```
+
+By default, maximum (or minimum depending on your frame of reference) depth of -2550 (depth of the Mariana Trench), but this can be overridden with the `min` option.
+
+```js
+chance.depth({ min: -1000 })
+=> -718.41976
+```
diff --git a/src/node_modules/chance/docs/location/geohash.md b/src/node_modules/chance/docs/location/geohash.md
new file mode 100644
index 0000000..f71eb9a
--- /dev/null
+++ b/src/node_modules/chance/docs/location/geohash.md
@@ -0,0 +1,21 @@
+# geohash
+
+```js
+// usage
+chance.geohash()
+chance.geohash({ length: 5 })
+```
+
+Generate a random geohash. [More details on what a geohash is](http://en.wikipedia.org/wiki/Geohash).
+
+```js
+chance.geohash()
+=> 'h9xhn7y'
+```
+
+By default, includes 7 characters of accuracy. Can override with the `length` option.
+
+```js
+chance.geohash({ length: 5 })
+=> 'dr0kr'
+```
diff --git a/src/node_modules/chance/docs/location/latitude.md b/src/node_modules/chance/docs/location/latitude.md
new file mode 100644
index 0000000..f1b711f
--- /dev/null
+++ b/src/node_modules/chance/docs/location/latitude.md
@@ -0,0 +1,43 @@
+# latitude
+
+```js
+// usage
+chance.latitude()
+chance.latitude({fixed: 7})
+chance.latitude({format: 'dms'})
+```
+
+Generate a random latitude.
+
+```js
+chance.latitude();
+=> 57.99514
+```
+
+_range: -90 to 90_
+
+By default includes 5 fixed digits after decimal, can specify otherwise.
+
+```js
+chance.latitude({fixed: 7});
+=> -29.6443133
+```
+
+By default includes entire range of allowed latitudes, can specify a min and/or max to bound it
+
+```js
+chance.latitude({min: 38.7, max: 38.9});
+=> 38.82358
+```
+
+By default latitudes' format is dd, can specify otherwise.
+
+```js
+chance.latitude({format: 'ddm'});
+=> "41°44.9592"
+```
+
+```js
+chance.latitude({format: 'dms'});
+=> "56°2’9.8187”"
+```
diff --git a/src/node_modules/chance/docs/location/locale.md b/src/node_modules/chance/docs/location/locale.md
new file mode 100644
index 0000000..5d14db4
--- /dev/null
+++ b/src/node_modules/chance/docs/location/locale.md
@@ -0,0 +1,25 @@
+# locale
+
+```js
+// usage
+chance.locale()
+chance.locale({region: true})
+```
+
+Generate a random ISO-639-1 language code
+
+```js
+chance.locale();
+=> 'ca'
+```
+
+Generate a random IETF region code
+
+```js
+chance.locale({region: true});
+=> 'es-EA'
+```
+
+
+_Note, the language codes comes from the [ISO-639-1 spec](http://www.loc.gov/standards/iso639-2/php/code_list.php)
+and the region codes come from [IETF standard](http://data.okfn.org/data/core/language-codes#resource-language-codes-full)_
diff --git a/src/node_modules/chance/docs/location/longitude.md b/src/node_modules/chance/docs/location/longitude.md
new file mode 100644
index 0000000..de1cd34
--- /dev/null
+++ b/src/node_modules/chance/docs/location/longitude.md
@@ -0,0 +1,43 @@
+# longitude
+
+```js
+// usage
+chance.longitude()
+chance.longitude({fixed: 7})
+chance.longitude({format: 'dms'})
+```
+
+Generate a random longitude.
+
+```js
+chance.longitude();
+=> 149.41549
+```
+
+_range: -180 to 180_
+
+By default includes 5 fixed digits after decimal, can specify otherwise.
+
+```js
+chance.longitude({fixed: 7});
+=> 51.4549925
+```
+
+By default includes entire range of allowed longitudes, can specify a min and/or max to bound it
+
+```js
+chance.longitude({min: -78, max: -77});
+=> -77.22644
+```
+
+By default longitude' format is dd, can specify otherwise.
+
+```js
+chance.longitude({format: 'ddm'});
+=> "41°44.9592"
+```
+
+```js
+chance.longitude({format: 'dms'});
+=> "56°2’9.8187”"
+``` \ No newline at end of file
diff --git a/src/node_modules/chance/docs/location/phone.md b/src/node_modules/chance/docs/location/phone.md
new file mode 100644
index 0000000..ba04326
--- /dev/null
+++ b/src/node_modules/chance/docs/location/phone.md
@@ -0,0 +1,41 @@
+# phone
+
+```js
+// usage
+chance.phone()
+chance.phone({ formatted: false })
+chance.phone({ country: "fr" })
+chance.phone({ country: "fr", mobile: true })
+```
+
+Generate a random phone
+
+```js
+chance.phone();
+=> '(494) 927-2152'
+```
+
+By default conforms to [NANP](http://en.wikipedia.org/wiki/North_American_Numbering_Plan) for a proper US phone number.
+
+Optionally disable formatting.
+
+```js
+chance.phone({ formatted: false });
+=> '2617613391'
+```
+
+Optionally specify a country.
+
+```js
+chance.phone({ country: 'fr' });
+=> '01 60 44 92 67'
+```
+
+Note, at current we only have support for `'us'`, `'uk'`, or `'fr'` for countries.
+
+For `uk` and `fr`, optionally specify a mobile phone.
+
+```js
+chance.phone({ country: 'uk', mobile: true });
+=> '07624 321221'
+```
diff --git a/src/node_modules/chance/docs/location/postal.md b/src/node_modules/chance/docs/location/postal.md
new file mode 100644
index 0000000..17510a4
--- /dev/null
+++ b/src/node_modules/chance/docs/location/postal.md
@@ -0,0 +1,13 @@
+# postal
+
+```js
+// usage
+chance.postal()
+```
+
+Return a Canadian Postal code. Returned postal code is valid with respect to the Postal District (first character) and format only.
+
+```js
+chance.postal();
+=> 'R1S 3F4'
+```
diff --git a/src/node_modules/chance/docs/location/postcode.md b/src/node_modules/chance/docs/location/postcode.md
new file mode 100644
index 0000000..fab584f
--- /dev/null
+++ b/src/node_modules/chance/docs/location/postcode.md
@@ -0,0 +1,13 @@
+# postcode
+
+```js
+// usage
+chance.postcode()
+```
+
+Generate a random (U.K.) postcode. Returned postcode is valid with respect to the Postcode Area (first characters) and format only.
+
+```js
+chance.postcode();
+=> 'W6 9PF'
+```
diff --git a/src/node_modules/chance/docs/location/province.md b/src/node_modules/chance/docs/location/province.md
new file mode 100644
index 0000000..bf07618
--- /dev/null
+++ b/src/node_modules/chance/docs/location/province.md
@@ -0,0 +1,33 @@
+# province
+
+```js
+// usage
+chance.province()
+chance.province({full: true})
+chance.province({full: true})
+```
+
+Return a random province.
+
+```js
+chance.province();
+=> 'ON'
+```
+
+By default, returns only the 2 letter abbreviation for province.
+
+Optionally specify that it ought to return a full province name.
+
+```js
+chance.province({full: true});
+=> 'Nova Scotia'
+```
+
+Optionally specify the country from which it should return the province name.
+
+```js
+chance.province({country: 'it', full: true});
+=> 'Vicenza'
+```
+
+Note, currently support for country is limited to: `'ca', 'it'`.
diff --git a/src/node_modules/chance/docs/location/state.md b/src/node_modules/chance/docs/location/state.md
new file mode 100644
index 0000000..81a200b
--- /dev/null
+++ b/src/node_modules/chance/docs/location/state.md
@@ -0,0 +1,62 @@
+# state
+
+```js
+// usage
+chance.state()
+chance.state({ full: true })
+chance.state({ territories: true })
+chance.state({ armed_forces: true })
+chance.state({ us_states_and_dc: false })
+chance.state({ country: 'us' })
+```
+
+Return a random state.
+
+```js
+chance.state();
+=> 'AK'
+```
+
+By default, returns only the 2 letter abbreviation for state.
+
+Optionally specify that it ought to return a full state name.
+
+```js
+chance.state({ full: true });
+=> 'Florida'
+```
+
+Optionally add U.S. Territories ('American Samoa', 'Federated States of Micronesia', 'Guam', 'Marshall Islands', 'Northern Mariana Islands', 'Puerto Rico', 'Virgin Islands, U.S.') to the mix of randomly selected items:
+
+```js
+chance.state({ territories: true, full: true })
+=> 'Guam'
+```
+
+Optionally add Armed Forces to the list as well:
+
+```js
+chance.state({ armed_forces: true, full: true })
+=> 'Armed Forces Pacific'
+```
+
+For all U.S. states, territories, and armed forces, specify all of them:
+
+```js
+chance.state({ armed_forces: true, territories: true })
+=> 'NY'
+```
+
+For just territories or armed forces, specify that it ought not return U.S. states:
+
+```js
+chance.state({ territories: true, us_states_and_dc: false })
+=> 'PR'
+```
+
+Optionally specify a country (US specific options are ignored if country is specified and different from `'us'`):
+
+```js
+chance.state({ country: 'it', full: true })
+=> 'Toscana'
+```
diff --git a/src/node_modules/chance/docs/location/street.md b/src/node_modules/chance/docs/location/street.md
new file mode 100644
index 0000000..91ec1ba
--- /dev/null
+++ b/src/node_modules/chance/docs/location/street.md
@@ -0,0 +1,37 @@
+# street
+
+```js
+// usage
+chance.street()
+chance.street({country:it})
+```
+
+Generate a random street
+
+```js
+chance.street();
+=> 'Tesca Circle'
+```
+
+Optionally mandate that it returns a short suffix
+
+```js
+chance.street({short_suffix: true});
+=> 'Jiled St'
+```
+
+Optionally specify the number of syllables used to generate the street name
+
+```js
+chance.street({syllables: 8});
+=> 'Teniefitinusewjircor Junction'
+```
+
+Optionally specify a country to localize street prefixes
+
+```js
+chance.street({country: 'it'});
+=> 'Via Nefba'
+```
+
+Note, currently support for country is limited to: `'us', 'it'`.
diff --git a/src/node_modules/chance/docs/location/zip.md b/src/node_modules/chance/docs/location/zip.md
new file mode 100644
index 0000000..e3311b4
--- /dev/null
+++ b/src/node_modules/chance/docs/location/zip.md
@@ -0,0 +1,23 @@
+# zip
+
+```js
+// usage
+chance.zip()
+chance.zip({plusfour: true})
+```
+
+Generate a random (U.S.) zip code.
+
+```js
+chance.zip();
+=> '90210'
+```
+
+Can optionally specify that it ought to return a [Zip+4][zip+4]:
+
+```js
+chance.zip({plusfour: true});
+=> '01035-1838'
+```
+
+[zip+4]: http://vq.io/19rzsve
diff --git a/src/node_modules/chance/docs/logo.png b/src/node_modules/chance/docs/logo.png
new file mode 100644
index 0000000..2cba423
--- /dev/null
+++ b/src/node_modules/chance/docs/logo.png
Binary files differ
diff --git a/src/node_modules/chance/docs/miscellaneous/coin.md b/src/node_modules/chance/docs/miscellaneous/coin.md
new file mode 100644
index 0000000..9053853
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/coin.md
@@ -0,0 +1,16 @@
+# coin
+
+```js
+// usage
+chance.coin()
+```
+
+Flip a coin!
+
+```js
+chance.coin();
+=> 'heads'
+
+chance.coin();
+=> 'tails'
+```
diff --git a/src/node_modules/chance/docs/miscellaneous/dice.md b/src/node_modules/chance/docs/miscellaneous/dice.md
new file mode 100644
index 0000000..f4ebc20
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/dice.md
@@ -0,0 +1,29 @@
+# dice
+
+```js
+// usage
+chance.d4()
+chance.d6()
+chance.d8()
+chance.d10()
+chance.d12()
+chance.d20()
+chance.d30()
+chance.d100()
+```
+
+<p class="pullquote" data-pullquote='"Any dungeon master worth his weight in geldings goes nowhere without his 20 sided die."' markdown="1"></p>
+
+Return a value equal to the roll of a die.
+
+```js
+chance.d20();
+=> 13
+
+chance.d6();
+=> 4
+```
+
+These are just wrappers around natural() but are convenient for use by games.
+
+They return values between 1 and the number after the `d`, so `chance.d4()` returns 1, 2, 3, or 4, just like a 4 sided die would.
diff --git a/src/node_modules/chance/docs/miscellaneous/guid.md b/src/node_modules/chance/docs/miscellaneous/guid.md
new file mode 100644
index 0000000..4156708
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/guid.md
@@ -0,0 +1,16 @@
+# guid
+
+```js
+// usage
+chance.guid()
+chance.guid({version: 5})
+```
+
+Return a random guid, version 5 by default.
+
+```js
+chance.guid();
+=> 'f0d8368d-85e2-54fb-73c4-2d60374295e3'
+chance.guid({version: 4});
+=> 'c71f58e3-34af-43c0-b405-2764d6947d21'
+```
diff --git a/src/node_modules/chance/docs/miscellaneous/hash.md b/src/node_modules/chance/docs/miscellaneous/hash.md
new file mode 100644
index 0000000..3ad4d0c
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/hash.md
@@ -0,0 +1,35 @@
+# hash
+
+```js
+// usage
+chance.hash()
+chance.hash({length: 25})
+chance.hash({casing: 'upper'})
+```
+
+Return a random hex hash
+
+```js
+chance.hash()
+=> 'e5162f27da96ed8e1ae51def1ba643b91d2581d8'
+```
+
+By default, the hash is lowercase and 40 hex characters long (same as a git
+commit hash).
+
+Optionally specify a length
+
+```js
+chance.hash({length: 15})
+=> 'c28f57cb599ada4'
+```
+
+Optionally specify casing to get a hash with only uppercase letters
+rather than the default lowercase
+
+```js
+chance.hash({casing: 'upper'})
+=> '3F2EB3FB85D88984C1EC4F46A3DBE740B5E0E56E'
+```
+
+
diff --git a/src/node_modules/chance/docs/miscellaneous/hidden.md b/src/node_modules/chance/docs/miscellaneous/hidden.md
new file mode 100644
index 0000000..dee3f01
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/hidden.md
@@ -0,0 +1,59 @@
+# hidden
+
+```js
+// usage
+chance.cc_types()
+chance.mersenne_twister()
+chance.mersenne_twister(12345)
+chance.months()
+chance.name_prefixes()
+chance.provinces()
+chance.states()
+chance.street_suffix()
+chance.street_suffixes()
+```
+
+These aren't really hidden per se, but just utility methods intended to be used
+internally but exposed externally in case they're useful to anyone.
+
+```js
+
+// Return the list of cc types
+chance.cc_types()
+=> [{name: "American Express", short_name: 'amex', prefix: '34', length: 15}, ...]
+
+// Return a new Mersenne Twister
+chance.mersenne_twister()
+=> [object Object] // An instance of a Mersenne Twister
+
+// Optionally provide a seed for that twister
+chance.mersenne_twister(12345)
+=> [object Object] // An instance of a twister with seed 12345
+
+// Return our list of name prefixes
+chance.months();
+=> [{name: 'January', short_name 'Jan', numeric: '01'}, ...]
+
+// Return our list of name prefixes
+chance.name_prefixes();
+=> [{name: 'Doctor', abbreviation: 'Dr.'}, {name: 'Miss', abbreviation: 'Miss'}, ...]
+
+// Return the list of provinces
+chance.provinces();
+=> [{name: 'Alberta', abbreviation: 'AB'}, {name: 'British Columbia', abbreviation: 'BC'}, ...]
+
+// Return the list of states
+chance.states();
+=> [{name: 'Alabama', abbreviation: 'AL'}, {name: 'Alaska', abbreviation: 'AK'}, ...]
+
+// Return a random street suffix
+chance.street_suffix();
+=> {name: 'Street', abbreviation: 'St'}
+
+// Return the list of street suffixes
+chance.street_suffixes();
+=> [{name: 'Avenue', abbreviation: 'Ave'}, {name: 'Boulevard', abbreviation: 'Blvd'}, ...]
+
+```
+
+
diff --git a/src/node_modules/chance/docs/miscellaneous/n.md b/src/node_modules/chance/docs/miscellaneous/n.md
new file mode 100644
index 0000000..9c5249f
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/n.md
@@ -0,0 +1,35 @@
+# n
+
+```js
+// usage
+chance.n(chance.email, 5)
+chance.n(chance.email, 5, { domain: "socialradar.com" })
+```
+
+Provide any function that generates random stuff (usually another **Chance** function) and a number and `n()` will generate an array of items with a length matching the length you specified.
+
+For example, to generate 5 email addresses:
+
+```js
+chance.n(chance.email, 5);
+=> [ 'nese@me.gov',
+'tukvogi@novew.co.uk',
+'worzi@jotok.edu',
+'wicumafom@lalu.edu',
+'hifebwo@abecusa.com' ]
+```
+
+Any options that would be sent to the random function can be added following the number.
+
+For example, `chance.email()` has options which can be specified, so you can generate 5 emails with a known domain as follows:
+
+```js
+chance.n(chance.email, 5, { domain: "socialradar.com" })
+=> [ 'nuvvu@socialradar.com',
+'icolul@socialradar.com',
+'rig@socialradar.com',
+'ca@socialradar.com',
+'uc@socialradar.com' ]
+```
+
+Note, these items are not guaranteed to be unique. If that is the intent, see [`chance.unique()`](http://chancejs.com/#unique)
diff --git a/src/node_modules/chance/docs/miscellaneous/normal.md b/src/node_modules/chance/docs/miscellaneous/normal.md
new file mode 100644
index 0000000..da3b580
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/normal.md
@@ -0,0 +1,35 @@
+# normal
+
+```js
+// usage
+chance.normal()
+chance.normal({mean: 100})
+chance.normal({mean: 100, dev: 15})
+```
+
+Return a normally-distributed random variate.
+
+```js
+chance.normal()
+=> 0.4244767651300604
+```
+
+By default this starts with a mean of `0` and a standard deviation of `1` which
+is the standard normal distribution.
+
+Optionally specify a mean and/or deviation.
+
+```js
+// Notice, since no deviation was specified, using the default of `1`
+chance.normal({mean: 100})
+=> 99.68352269988522
+
+// For example, to get a random IQ (which by definition has a mean of 100
+// and a standard deviation of 15)
+chance.normal({mean: 100, dev: 15})
+=> 85.11040121833615
+```
+
+Used in combination with the above generators, this can be an extremely powerful
+way to get more realistic results as often "pure random" results fail to
+approximate the real world.
diff --git a/src/node_modules/chance/docs/miscellaneous/radio.md b/src/node_modules/chance/docs/miscellaneous/radio.md
new file mode 100644
index 0000000..0a97ef4
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/radio.md
@@ -0,0 +1,27 @@
+# radio
+
+```js
+// usage
+chance.radio()
+```
+
+<p class="pullquote" data-pullquote='Broadcast call signs start with a W if east of the Mississippi River and K if west.' markdown="1"></p>
+
+Generate a random radio call sign.
+
+```js
+chance.radio();
+=> 'KCXW'
+```
+
+Optionally specify a side of the Mississippi River to limit stations to that side.
+
+See [K and W](http://en.wikipedia.org/wiki/Call_signs_in_North_America#K_and_W) for more details
+
+```js
+chance.radio({side: 'east'});
+=> 'WKOQ'
+
+chance.radio({side: 'east'});
+=> 'WNOW'
+```
diff --git a/src/node_modules/chance/docs/miscellaneous/rpg.md b/src/node_modules/chance/docs/miscellaneous/rpg.md
new file mode 100644
index 0000000..e8d1d13
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/rpg.md
@@ -0,0 +1,25 @@
+# rpg
+
+```js
+// usage
+chance.rpg('#d#')
+chance.rpg('#d#', {sum: true})
+```
+
+Given an input looking like #d#, where the first # is the number of dice to
+roll and the second # is the max of each die, returns an array of dice values.
+
+```js
+chance.rpg('3d10');
+=> [1, 6, 9]
+
+chance.rpg('5d6');
+=> [3, 1, 2, 5, 2]
+```
+
+Optionally specify a sum be returned rather than an array of dice.
+
+```js
+chance.rpg('3d10', {sum: true});
+=> 14
+```
diff --git a/src/node_modules/chance/docs/miscellaneous/tv.md b/src/node_modules/chance/docs/miscellaneous/tv.md
new file mode 100644
index 0000000..24a8d41
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/tv.md
@@ -0,0 +1,25 @@
+# tv
+
+```js
+// usage
+chance.tv()
+chance.tv({side: 'west'})
+```
+
+Generate a TV station call sign. This is an alias for `radio()` since they both
+follow the same rules.
+
+```js
+chance.radio();
+=> 'WXTY'
+```
+
+Optionally specify a side of the Mississippi River to limit stations to that side.
+
+```js
+chance.radio({side: 'west'});
+=> 'KCYL'
+
+chance.radio({side: 'west'});
+=> 'KQDV'
+```
diff --git a/src/node_modules/chance/docs/miscellaneous/unique.md b/src/node_modules/chance/docs/miscellaneous/unique.md
new file mode 100644
index 0000000..78319db
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/unique.md
@@ -0,0 +1,47 @@
+# unique
+
+```js
+// usage
+chance.unique(chance.state, 5)
+chance.unique(chance.state, 5, { comparator: func })
+```
+
+Provide any function that generates random stuff (usually another **Chance** function) and a number and `unique()` will generate a random array of unique (not repeating) items with a length matching the one you specified.
+
+```js
+chance.unique(chance.state, 5);
+=> ["SC", "WA", "CO", "TX", "ND"]
+```
+
+This is helpful when there are a limited number of options and you want a bunch but want to ensure each is different.
+
+Optionally specify the comparator used to determine whether a generated item is in the list of already generated items. By default the comparator just checks to see if the newly generated item is in the array of already generated items. This works for most simple cases (such as `chance.state()`) but will not work if the generated item is an object (because the `Array.prototype.indexOf()` method will not work on an object since 2 objects will not be strictly equal, `===`, unless they are references to the same object).
+
+```js
+chance.unique(chance.currency, 2, {
+comparator: function(arr, val) {
+return arr.reduce(function(acc, item) {
+return acc || (item.code === val.code);
+}, false);
+}
+});
+=> [{ code: "KYF", name: "Cayman Islands Dollar" }, { code: "CDF", name: "Congo/Kinshasa Franc" }]
+```
+
+You can also specify any arbitrary options in this third argument and they'll be passed along to the method you specify as the first.
+
+For example, let's say you want to retrieve 10 unique integers between 0 and 100. This is easily achievable by specifying `chance.integer` as hte function, 10 as the number to retrieve, and a min/max in the options.
+
+```js
+chance.unique(chance.integer, 10, {min: 0, max: 100});
+=> [78, 49, 7, 87, 59, 89, 84, 62, 60, 63]
+```
+
+Note, there could be cases where it is impossible to generate the unique number. For example, if you choose `chance.state` as shown above as the random function and want say, 55 uniques, **Chance** will throw a RangeError because it is impossible to generate 55 uniques because there are only 51 states in the available pool (50 states plus the District of Columbia).
+
+```js
+chance.unique(chance.state, 55);
+=> RangeError: Chance: num is likely too large for sample set
+```
+
+
diff --git a/src/node_modules/chance/docs/miscellaneous/weighted.md b/src/node_modules/chance/docs/miscellaneous/weighted.md
new file mode 100644
index 0000000..be0e261
--- /dev/null
+++ b/src/node_modules/chance/docs/miscellaneous/weighted.md
@@ -0,0 +1,55 @@
+# weighted
+
+```js
+// usage
+chance.weighted(['a', 'b'], [100, 1])
+chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4])
+```
+
+Provide an array of items, and another array of items specifying the relative weights and **Chance** will select one of those items, obeying the specified weight.
+
+For example, the following code:
+
+```js
+chance.weighted(['a', 'b'], [100, 1]);
+=> 'a'
+```
+
+Will generate `'a'` 100 times more often than `'b'` but still choose one or the other randomly.
+
+The weights are all relative, so if you have more than just two it will ensure that all items are generated relative to all of the weights.
+
+For example, the following code:
+
+```js
+chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4]);
+=> 'c'
+```
+
+Will generate a letter from the array but will pick `'b'` twice as often as it picks `'a'` and will pick `'c'` three times as often as it picks `'a'` and will pick `'d'` four times as often as it will pick `'a'` and will pick `'d'` two times as often as it will pick `'b'`.
+
+The weights can be whole numbers as shown above or fractions.
+
+```js
+chance.weighted(['a', 'b', 'c', 'd'], [0.1, 0.2, 0.3, 0.4]);
+=> 'd'
+```
+
+There is no requirement that the weights sum to anything in particular, they are all compared relative to each other so all of the following are equivalent:
+
+```js
+chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4]);
+chance.weighted(['a', 'b', 'c', 'd'], [0.1, 0.2, 0.3, 0.4]);
+chance.weighted(['a', 'b', 'c', 'd'], [100, 200, 300, 400]);
+chance.weighted(['a', 'b', 'c', 'd'], [17, 34, 51, 68]);
+chance.weighted(['a', 'b', 'c', 'd'], [0.17, 0.34, 0.51, 0.68]);
+```
+
+Recall JavaScript has first class functions so you could do something like the following:
+
+```js
+chance.weighted([chance.fbid, chance.twitter, chance.ip], [10, 5, 1])();
+=> 10000345166213
+```
+
+That will pick one of the **Chance** methods with the relative weights specified and then immediately invoke it, so it will return a random fbid twice as often as it will return a twitter handle (because 10/5 is 2) and an fbid 10 times more often than it will return a random ip address (because 10/1 is 10). It will return a random twitter handle 5 times more often than it will return an ip address (because 5/1 is 5).
diff --git a/src/node_modules/chance/docs/mobile/android_id.md b/src/node_modules/chance/docs/mobile/android_id.md
new file mode 100644
index 0000000..6fbce75
--- /dev/null
+++ b/src/node_modules/chance/docs/mobile/android_id.md
@@ -0,0 +1,13 @@
+# android_id
+
+```js
+// usage
+chance.android_id()
+```
+
+Return a random GCM registration ID.
+
+```js
+chance.android_id()
+=> 'APA91HHQyPlWqV2Nu61LRs41eE4vrR4bHLKTs0-Dh5nDLopcWZotLw77NEoJyADNJiq6cwY0jMM02y8aacLs6fe2_ynweFjZJVVevKON-32826v-EFoayyThU3-42YEUY9pCScU_n73yRNSOlTk5W6iPtrDkQ3a6_BvOxRbSYi3E6QEY0ZuIQF0'
+```
diff --git a/src/node_modules/chance/docs/mobile/apple_token.md b/src/node_modules/chance/docs/mobile/apple_token.md
new file mode 100644
index 0000000..fa8a2f3
--- /dev/null
+++ b/src/node_modules/chance/docs/mobile/apple_token.md
@@ -0,0 +1,13 @@
+# apple_token
+
+```js
+// usage
+chance.apple_token()
+```
+
+Return a random Apple Push Token
+
+```js
+chance.apple_token()
+=> 'b50edac575bfba07dd019b28b2af7189a3ddda17c806ef14a9abbfd00533f67e'
+```
diff --git a/src/node_modules/chance/docs/mobile/bb_pin.md b/src/node_modules/chance/docs/mobile/bb_pin.md
new file mode 100644
index 0000000..bd06926
--- /dev/null
+++ b/src/node_modules/chance/docs/mobile/bb_pin.md
@@ -0,0 +1,13 @@
+# bb_pin
+
+```js
+// usage
+chance.bb_pin()
+```
+
+Return a random BlackBerry Device PIN
+
+```js
+chance.bb_pin()
+=> '985de771'
+```
diff --git a/src/node_modules/chance/docs/mobile/wp7_anid.md b/src/node_modules/chance/docs/mobile/wp7_anid.md
new file mode 100644
index 0000000..f9d6afe
--- /dev/null
+++ b/src/node_modules/chance/docs/mobile/wp7_anid.md
@@ -0,0 +1,13 @@
+# wp7_anid
+
+```js
+// usage
+chance.wp7_anid()
+```
+
+Return a random Windows Phone 7 ANID
+
+```js
+chance.wp7_anid()
+=> 'A=3FC2491A0E0C5AB7824B2F60DCE4DB02&E=4e7&W=6'
+```
diff --git a/src/node_modules/chance/docs/mobile/wp8_anid2.md b/src/node_modules/chance/docs/mobile/wp8_anid2.md
new file mode 100644
index 0000000..154935f
--- /dev/null
+++ b/src/node_modules/chance/docs/mobile/wp8_anid2.md
@@ -0,0 +1,13 @@
+# wp8_anid2
+
+```js
+// usage
+chance.wp8_anid2()
+```
+
+Return a random Windows Phone 8 ANID2
+
+```js
+chance.wp8_anid2()
+=> 'OGI5ODk0MmNkZGI2OGE3YzAwODE1Y2NiYTc4MzEzZjM='
+```
diff --git a/src/node_modules/chance/docs/music/note.md b/src/node_modules/chance/docs/music/note.md
new file mode 100644
index 0000000..69447f3
--- /dev/null
+++ b/src/node_modules/chance/docs/music/note.md
@@ -0,0 +1,33 @@
+# note
+
+```js
+// usage
+chance.note();
+chance.note({ notes: 'flatkey' });
+```
+
+Return a note. 🎵
+
+```js
+chance.note();
+=> 'B'
+
+chance.note();
+=> 'E♭'
+```
+
+Options
+flatKey - chromatic scale with flat notes (default)
+sharpKey - chromatic scale with sharp notes
+flats - just flat notes
+sharps - just sharp notes
+naturals - just natural notes
+all - naturals, sharps and flats
+
+```js
+chance.note({notes: 'flats' });
+=> 'A'
+
+chance.note({notes: 'sharps' });
+=> 'F♯'
+```
diff --git a/src/node_modules/chance/docs/music/tempo.md b/src/node_modules/chance/docs/music/tempo.md
new file mode 100644
index 0000000..8e0cc27
--- /dev/null
+++ b/src/node_modules/chance/docs/music/tempo.md
@@ -0,0 +1,24 @@
+# tempo
+
+```js
+// usage
+chance.tempo(); //default between 40 to 320
+chance.tempo({ min: 60, max: 120 });
+```
+
+Return a tempo. 🎵
+
+```js
+chance.tempo();
+=> 58
+
+chance.tempo();
+=> 281
+
+chance.tempo({ max: 80 });
+=> 45
+
+chance.tempo({ min: 120 });
+=> 172
+
+``` \ No newline at end of file
diff --git a/src/node_modules/chance/docs/person/aadhar.md b/src/node_modules/chance/docs/person/aadhar.md
new file mode 100644
index 0000000..54a816d
--- /dev/null
+++ b/src/node_modules/chance/docs/person/aadhar.md
@@ -0,0 +1,31 @@
+# aadhar
+
+_Aadhar_ (English: Foundation) is a 12-digit unique identity number that can be obtained by residents of India, based on their biometric and demographic data.
+
+```js
+// usage
+chance.aadhar()
+chance.aadhar({ onlyLastFour: true }) // false by default
+chance.aadhar({ separatedByWhiteSpace: false }) // true by default
+```
+
+Generate a random aadhar.
+
+```js
+chance.aadhar();
+=> '8506 7820 9696'
+```
+
+Optionally provide option of getting only the last four
+
+```js
+chance.aadhar({ onlyLastFour: true });
+=> '1851'
+```
+
+Optionally specify dashes be removed
+
+```js
+chance.aadhar({ separatedByWhiteSpace: false });
+'873300307032'
+```
diff --git a/src/node_modules/chance/docs/person/age.md b/src/node_modules/chance/docs/person/age.md
new file mode 100644
index 0000000..4a51b7d
--- /dev/null
+++ b/src/node_modules/chance/docs/person/age.md
@@ -0,0 +1,25 @@
+# age
+
+```js
+// usage
+chance.age()
+chance.age({ type: 'child' })
+```
+
+Generate a random age
+
+```js
+chance.age();
+=> 45
+```
+
+Default range is between 1 and 120
+
+Optionally specify one of a handful of enumerated age types:
+
+```js
+chance.age({type: 'child'});
+=> 9
+```
+
+Allowed types are: `child`, `teen`, `adult`, `senior`
diff --git a/src/node_modules/chance/docs/person/birthday.md b/src/node_modules/chance/docs/person/birthday.md
new file mode 100644
index 0000000..a7f4ca9
--- /dev/null
+++ b/src/node_modules/chance/docs/person/birthday.md
@@ -0,0 +1,55 @@
+# birthday
+
+```js
+// usage
+chance.birthday()
+chance.birthday({ string: true })
+chance.birthday({ type: 'child' })
+```
+
+Generate a random birthday
+
+```js
+chance.birthday();
+=> Fri Aug 16 1985 00:00:00 GMT-0400 (EDT)
+```
+
+By default, returns an actual JavaScript [Date][Date] object.
+
+Optionally specify it be returned as a string.
+
+```js
+chance.birthday({string: true});
+=> '4/1/1968'
+```
+
+By default returns in MM/DD/YYYY format. Can specify DD/MM/YYYY as follows:
+
+```js
+chance.birthday({string: true, american: false});
+=> '28/6/1993'
+```
+
+For more complex date formats, use the [Moment][Moment] library.
+
+Can also specify the type, same types as with [age](#age).
+
+```js
+chance.birthday({type: 'child'});
+=> Sat Sep 08 2001 00:00:00 GMT-0400 (EDT)
+```
+
+You can also compose with `chance.year` for interesting combinations. For example, let's say we want to get the birthdays of some renaissance artists (born between 1450 and 1500). We can generate a year and then get a birthday from that year:
+
+```js
+var year = chance.year({ min: 1450, max: 1500 });
+chance.birthday({ year: year });
+=> Wed Aug 27 1484 11:24:14 GMT-0400 (EDT)
+
+// Could be simplified down to one line
+chance.birthday({ year: chance.year({ min: 1450, max: 1500 }) });
+=> Fri Nov 26 1469 09:17:13 GMT-0500 (EST)
+```
+
+[Date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
+[Moment]: http://momentjs.com
diff --git a/src/node_modules/chance/docs/person/cf.md b/src/node_modules/chance/docs/person/cf.md
new file mode 100644
index 0000000..8569584
--- /dev/null
+++ b/src/node_modules/chance/docs/person/cf.md
@@ -0,0 +1,23 @@
+# cf
+
+```js
+// usage
+chance.cf()
+```
+Generate a random Italian social security number (Codice Fiscale).
+
+```js
+chance.cf();
+=> 'BRSMRT87S49A988X'
+```
+
+Optionally specify any or all components: first name, last name, gender, birth date, place of birth (using ISTAT geocodes for Italian cities).
+
+```js
+chance.cf({first: 'Sergio', last: 'Leone'});
+=> 'LNESRG93P28F067V'
+
+chance.cf({first: 'Sophia', last: 'Loren', gender: 'Female', birthday: new Date(1934,8,20), city: 'h501'});
+
+=> 'LRNSPH34P60H501G'
+```
diff --git a/src/node_modules/chance/docs/person/cpf.md b/src/node_modules/chance/docs/person/cpf.md
new file mode 100644
index 0000000..5459616
--- /dev/null
+++ b/src/node_modules/chance/docs/person/cpf.md
@@ -0,0 +1,13 @@
+# cpf
+
+```js
+// usage
+chance.cpf()
+```
+
+Generate a random Brazilian tax id.
+
+```js
+chance.cpf();
+=> '607.116.899-62'
+```
diff --git a/src/node_modules/chance/docs/person/first.md b/src/node_modules/chance/docs/person/first.md
new file mode 100644
index 0000000..cd92644
--- /dev/null
+++ b/src/node_modules/chance/docs/person/first.md
@@ -0,0 +1,31 @@
+# first
+
+```js
+// usage
+chance.first()
+chance.first({ nationality: 'us' })
+```
+
+Generate a random first name
+
+```js
+Chance.first();
+=> 'Leila'
+```
+
+Optionally specify a gender to limit first names to that gender
+
+```js
+Chance.first({ gender: "female" });
+=> 'Emma'
+```
+
+Optionally specify a nationality to limit first names to those most common of that nationality
+
+```js
+Chance.first({ nationality: "it" });
+=> 'Alberto'
+```
+
+Note, currently support for nationality is limited to: `'us', 'it'`.
+
diff --git a/src/node_modules/chance/docs/person/gender.md b/src/node_modules/chance/docs/person/gender.md
new file mode 100644
index 0000000..d41766b
--- /dev/null
+++ b/src/node_modules/chance/docs/person/gender.md
@@ -0,0 +1,21 @@
+# gender
+
+```js
+// usage
+chance.gender()
+```
+
+Generate a random gender
+
+```js
+ Chance.gender();
+ => 'Female'
+```
+
+Extra genders can be provided using the `extraGenders` key in the optional options argument:
+
+```js
+ Chance.gender({
+ extraGenders: ['Agender', 'Genderqueer', 'Trans', 'Pangender']
+ });
+```
diff --git a/src/node_modules/chance/docs/person/last.md b/src/node_modules/chance/docs/person/last.md
new file mode 100644
index 0000000..304e1c5
--- /dev/null
+++ b/src/node_modules/chance/docs/person/last.md
@@ -0,0 +1,23 @@
+# last
+
+```js
+// usage
+chance.last()
+chance.last({ nationality: 'en' })
+```
+
+Generate a random last name
+
+```js
+Chance.last();
+=> 'Mago'
+```
+
+Optionally specify a nationality to limit first names to those most common of that nationality
+
+```js
+Chance.last({ nationality: 'it' });
+=> 'Giovannini'
+```
+
+Note, currently support for nationality is limited to: `'en', 'it', 'nl', 'uk', 'de', 'jp', 'es', 'fr'`.
diff --git a/src/node_modules/chance/docs/person/name.md b/src/node_modules/chance/docs/person/name.md
new file mode 100644
index 0000000..46ae9e9
--- /dev/null
+++ b/src/node_modules/chance/docs/person/name.md
@@ -0,0 +1,63 @@
+# name
+
+```js
+// usage
+chance.name()
+chance.name({ middle: true })
+chance.name({ middle_initial: true })
+chance.name({ prefix: true })
+chance.name({ nationality: 'en' })
+```
+
+Generate a random name
+
+```js
+ chance.name();
+ => 'Dafi Vatemi'
+```
+
+Optionally include the middle name
+
+```js
+ chance.name({ middle: true });
+ => 'Nelgatwu Powuku Heup'
+```
+
+
+Optionally include the middle initial
+
+```js
+ chance.name({ middle_initial: true });
+ => 'Ezme I Iza'
+```
+
+Optionally include the prefix
+
+```js
+ chance.name({ prefix: true });
+ => 'Doctor Suosat Am'
+```
+
+Optionally include the suffix
+
+```js
+ chance.name({ suffix: true });
+ => 'Fanny Baker Esq.'
+```
+
+Optionally specify a gender
+
+```js
+ chance.name({ gender: 'male' });
+ => "Patrick Copeland"
+```
+
+Optionally specify a nationality
+
+```js
+ chance.name({ nationality: 'it' });
+ => "Roberta Mazzetti"
+```
+
+Note, currently support for nationality is limited to: `'en', 'it'`.
+
diff --git a/src/node_modules/chance/docs/person/prefix.md b/src/node_modules/chance/docs/person/prefix.md
new file mode 100644
index 0000000..0f5c502
--- /dev/null
+++ b/src/node_modules/chance/docs/person/prefix.md
@@ -0,0 +1,35 @@
+# prefix
+
+```js
+// usage
+chance.prefix()
+chance.prefix({ full: true })
+```
+
+Generate a random name prefix
+
+```js
+chance.prefix();
+=> 'Mrs.'
+```
+
+By default, returns the shorter version.
+
+Optionally get back the full version.
+
+```js
+chance.prefix({ full: true });
+=> 'Mister'
+```
+
+Optionally specify a gender. Valid options are `male`, `female`, or `all` (the default).
+
+```js
+chance.prefix({ gender: "male" });
+=> 'Mr.'
+
+chance.prefix({ gender: "female" });
+=> 'Miss'
+```
+
+*To maintain legacy support, this also responds to chance.name_prefix().*
diff --git a/src/node_modules/chance/docs/person/ssn.md b/src/node_modules/chance/docs/person/ssn.md
new file mode 100644
index 0000000..c3f1f88
--- /dev/null
+++ b/src/node_modules/chance/docs/person/ssn.md
@@ -0,0 +1,29 @@
+# ssn
+
+```js
+// usage
+chance.ssn()
+chance.ssn({ ssnFour: true })
+chance.ssn({ dashes: false })
+```
+
+Generate a random social security number.
+
+```js
+chance.ssn();
+=> '411-90-0070'
+```
+
+Optionally provide option of getting only the last four
+
+```js
+chance.ssn({ ssnFour: true });
+=> '2938'
+```
+
+Optionally specify dashes be removed
+
+```js
+chance.ssn({ dashes: false });
+=> '293839295'
+```
diff --git a/src/node_modules/chance/docs/person/suffix.md b/src/node_modules/chance/docs/person/suffix.md
new file mode 100644
index 0000000..1055e0c
--- /dev/null
+++ b/src/node_modules/chance/docs/person/suffix.md
@@ -0,0 +1,25 @@
+# suffix
+
+```js
+// usage
+chance.suffix()
+chance.suffix({ full: true })
+```
+
+Generate a random name suffix
+
+```js
+chance.suffix();
+=> 'Sr.'
+```
+
+By default, returns the shorter version.
+
+Optionally get back the full version.
+
+```js
+chance.suffix({ full: true });
+=> 'Juris Doctor'
+```
+
+*To maintain legacy support, this also responds to chance.name_suffix().*
diff --git a/src/node_modules/chance/docs/text/paragraph.md b/src/node_modules/chance/docs/text/paragraph.md
new file mode 100644
index 0000000..9140a86
--- /dev/null
+++ b/src/node_modules/chance/docs/text/paragraph.md
@@ -0,0 +1,39 @@
+# paragraph
+
+```js
+// usage
+chance.paragraph()
+chance.paragraph({ sentences: 1 })
+chance.paragraph({ linebreak: true })
+```
+
+Return a random paragraph generated from sentences populated by semi-pronounceable
+random (nonsense) words.
+
+```js
+ chance.paragraph();
+ => 'Lel fi huepe jupu akse zej ire vesik kojvulom zon is biwuwkef pa. Uv hokivej voh ebu numdogi akolo hik uwlez ta vacev ofdaimi acunetum suvet uhdab ir soglazo ju pafbeb. Pub cezeh fuc kebamnul he ok luumoabi rawkig me fov pin zup biv risugra. Ralpunad apkomgib alnirciw akel wa lus wahfum burog buol vecotihe abadahoj ugolo wovki ucojal fec.'
+```
+
+Default is a paragraph with a random number of sentences from 3 to 7.
+
+Optionally specify the number of sentences in the paragraph.
+
+```js
+ chance.paragraph({ sentences: 1 });
+ => 'Idefeulo foc omoemowa wahteze liv juvde puguprof epehuji upuga zige odfe igo sit pilamhul oto ukurecef.'
+```
+
+Optionally specify if each sentence in the paragraph should start a new line.
+
+```js
+ chance.paragraph({ linebreak: true });
+ => `
+ Moku kazkubib adi apo bebiw movarne rab tusa vura nok ji iv otukib dewut.
+ Tiwlo orojel vuhhet emluliv loha ma rulical fokuv re dob fabup bit.
+ Veza ermethit osgues dohjeci pezlal su ibi cib zerezci bode ca hopmub gigwosut culhoca nubu.
+ `
+```
+
+
+
diff --git a/src/node_modules/chance/docs/text/sentence.md b/src/node_modules/chance/docs/text/sentence.md
new file mode 100644
index 0000000..0d5b447
--- /dev/null
+++ b/src/node_modules/chance/docs/text/sentence.md
@@ -0,0 +1,28 @@
+# sentence
+
+```js
+// usage
+chance.sentence()
+chance.sentence({ words: 5 })
+```
+
+Return a random sentence populated by semi-pronounceable random (nonsense) words.
+
+```js
+ chance.sentence();
+ => 'Witpevze mappos isoletu fo res bi geow pofin mu rupoho revzi utva ne.'
+```
+
+The sentence starts with a capital letter, and ends with a period.
+
+Default is a sentence with a random number of words from 12 to 18.
+
+*This length is chosen as the default as it works out to the average English
+sentence is in that range.*
+
+Optionally specify the number of words in the sentence.
+
+```js
+ chance.sentence({ words: 5 });
+ => 'Waddik jeasmov cakgilta ficub up.'
+```
diff --git a/src/node_modules/chance/docs/text/syllable.md b/src/node_modules/chance/docs/text/syllable.md
new file mode 100644
index 0000000..ac7fd33
--- /dev/null
+++ b/src/node_modules/chance/docs/text/syllable.md
@@ -0,0 +1,18 @@
+# syllable
+
+```js
+// usage
+chance.syllable()
+```
+
+Return a semi-speakable syllable, 2 or 3 letters
+
+```js
+chance.syllable();
+=> 'fop'
+```
+
+The syllable is returned in all lower case.
+
+A syllable generally alternates between vowel and consonant and is used as the
+core building block for a word.
diff --git a/src/node_modules/chance/docs/text/word.md b/src/node_modules/chance/docs/text/word.md
new file mode 100644
index 0000000..89bab8e
--- /dev/null
+++ b/src/node_modules/chance/docs/text/word.md
@@ -0,0 +1,54 @@
+# word
+
+```js
+// usage
+chance.word()
+chance.word({ syllables: 3 })
+chance.word({ length: 5 })
+```
+
+Return a semi-pronounceable random (nonsense) word.
+
+```js
+ chance.word();
+ => 'bappada'
+```
+
+The word is returned in all lower case.
+
+Default is a word with a random number of syllables from 1 to 3.
+
+<p class="pullquote">This length is chosen as it works out to the average word length of ~5-6 chars
+which seems about right.</p>
+
+Can optionally specify a number of syllables which the word will have.
+
+Note these are not syllables in the strict language definition of the word, but
+syllables as we've defined here which is 2 or 3 characters, mostly alternating
+between vowel and consanant. This is the about the best we can do with purely
+random generation.
+
+```js
+ chance.word({ syllables: 3 });
+ => 'tavnamgi'
+```
+
+Can optionally specify a length and the word will obey that bounding.
+
+```js
+ chance.word({ length: 5 });
+ => 'ralve'
+```
+
+In this case these 2 options are mutually exclusive, that is they cannot be
+combined as they often make no sense. It wouldn't be possible to have a word
+with 7 syllables and a length of 5 or a length of 30 but 2 syllables.
+
+Therefore, if both are specified, an Exception will be thrown so the Developer
+can handle their broken case.
+
+```js
+ chance.word({ length: 5, syllables: 20 });
+ => new RangeError("Chance: Cannot specify both syllables AND length.");
+```
+
diff --git a/src/node_modules/chance/docs/thing/animal.md b/src/node_modules/chance/docs/thing/animal.md
new file mode 100644
index 0000000..de7f9c0
--- /dev/null
+++ b/src/node_modules/chance/docs/thing/animal.md
@@ -0,0 +1,25 @@
+# animal
+
+```js
+// usage
+chance.animal()
+chance.animal({type: 'zoo'})
+```
+
+Generate a random animal
+
+```js
+chance.animal();
+=> 'Cobra'
+```
+
+Default is any type of animal.
+
+Optionally specify a specific type of animal
+
+```js
+chance.animal({type: 'zoo'});
+=> 'Lion'
+```
+
+Allowed types are: `ocean`, `desert`, `grassland`, `forest`, `farm`, `pet`, and `zoo`
diff --git a/src/node_modules/chance/docs/time/ampm.md b/src/node_modules/chance/docs/time/ampm.md
new file mode 100644
index 0000000..5f38aa7
--- /dev/null
+++ b/src/node_modules/chance/docs/time/ampm.md
@@ -0,0 +1,13 @@
+# ampm
+
+```js
+// usage
+chance.ampm()
+```
+
+Return am or pm. Very simple.
+
+```js
+chance.ampm();
+=> 'am'
+```
diff --git a/src/node_modules/chance/docs/time/date.md b/src/node_modules/chance/docs/time/date.md
new file mode 100644
index 0000000..53ae5ca
--- /dev/null
+++ b/src/node_modules/chance/docs/time/date.md
@@ -0,0 +1,67 @@
+# date
+
+```js
+// usage
+chance.date()
+chance.date({string: true})
+chance.date({string: true, american: false})
+chance.date({year: 1983})
+```
+
+Generate a random date
+
+```js
+chance.date();
+=> Sat Apr 09 2072 00:00:00 GMT-0400 (EDT)
+```
+
+By default, returns an actual [Date][Date] object
+
+Can optionally specify that a date be returned as a string
+
+```js
+chance.date({string: true});
+=> "5/27/2078"
+```
+
+This will return a date string of the format MM/DD/YYYY.
+
+Now of course MM/DD/YYYY is the "American" date method, but it's the default
+because there isn't much support for internationalization here yet. Further,
+it's the format used by [Facebook][FB] and other services for birthdays and
+other non-Date object dates.
+
+However, we support returning dates in DD/MM/YYYY format as well when requesting
+a date by a string and passing `american: false`.
+
+```js
+chance.date({string: true, american: false});
+=> "13/2/2017"
+```
+
+If you want richer control over date format, strongly suggest using the
+[Moment][Moment] library. Our formatting is very minimalist, and it's out of our
+core competency to offer dates in a myriad of formats.
+
+Can optionally specify defaults for any of day, month, or year.
+
+```js
+chance.date({year: 1983});
+=> Wed May 04 1983 00:00:00 GMT-0400 (EDT)
+
+chance.date({month: 0});
+=> Tue Jan 18 2084 00:00:00 GMT-0500 (EST)
+
+chance.date({day: 21});
+=> Sun Oct 21 2103 00:00:00 GMT-0400 (EDT)
+```
+
+A random date is generated, but the default you specify is kept constant.
+
+Note, month is 0-indexed. This is a carryover from the core JavaScript
+[Date][Date] object which we use internally to generate the date. We
+considered
+
+[Date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
+[FB]: https://developers.facebook.com/docs/reference/api/user/
+[Moment]: http://momentjs.com
diff --git a/src/node_modules/chance/docs/time/hammertime.md b/src/node_modules/chance/docs/time/hammertime.md
new file mode 100644
index 0000000..75b0985
--- /dev/null
+++ b/src/node_modules/chance/docs/time/hammertime.md
@@ -0,0 +1,25 @@
+# hammertime
+
+```js
+// usage
+chance.hammertime()
+```
+
+<p class="pullquote" data-pullquote='Stop. Hammertime.' markdown="1"></p>
+
+Generate a random hammertime.
+
+```js
+chance.hammertime();
+=> 2273327300317
+```
+
+Hammertime is the name given to a [Unix time](http://en.wikipedia.org/wiki/Unix_time) with
+milliseconds. Which is the same as saying the number of milliseconds since 1970. It has
+finer granularity than a normal Unix timestamp and thus is often used in realtime
+applications.
+
+According to startup lore, Hammertime was coined by a startup whose founder had an
+interesting interaction with M.C. Hammer. There was no name given to "Unix time with
+milliseconds" and while brainstorming ideas (because Unix time with milliseconds is
+a confusing mouthful), someone suggested Hammertime and it stuck.
diff --git a/src/node_modules/chance/docs/time/hour.md b/src/node_modules/chance/docs/time/hour.md
new file mode 100644
index 0000000..02e06d0
--- /dev/null
+++ b/src/node_modules/chance/docs/time/hour.md
@@ -0,0 +1,27 @@
+# hour
+
+```js
+// usage
+chance.hour()
+chance.hour({twentyfour: true})
+```
+
+Generate a random hour
+
+```js
+chance.hour();
+=> 9
+```
+
+By default, returns an hour from 1 to 12 for a standard [12-hour clock][12h].
+
+Can optionally specify a full twenty-four.
+
+```js
+chance.hour({twentyfour: true});
+=> 21
+```
+
+This will return an hour from 1 to 24.
+
+[12h]: https://en.wikipedia.org/wiki/12-hour_clock
diff --git a/src/node_modules/chance/docs/time/millisecond.md b/src/node_modules/chance/docs/time/millisecond.md
new file mode 100644
index 0000000..6751985
--- /dev/null
+++ b/src/node_modules/chance/docs/time/millisecond.md
@@ -0,0 +1,15 @@
+# millisecond
+
+```js
+// usage
+chance.millisecond()
+```
+
+Generate a random millisecond
+
+```js
+chance.millisecond();
+=> 729
+```
+
+By default, returns a millisecond from 0 to 999. Idea is for generating a clock time.
diff --git a/src/node_modules/chance/docs/time/minute.md b/src/node_modules/chance/docs/time/minute.md
new file mode 100644
index 0000000..e42f8cb
--- /dev/null
+++ b/src/node_modules/chance/docs/time/minute.md
@@ -0,0 +1,15 @@
+# minute
+
+```js
+// usage
+chance.minute()
+```
+
+Generate a random minute
+
+```js
+chance.minute();
+=> 35
+```
+
+By default, returns a minute from 0 to 59. Idea is for generating a clock time.
diff --git a/src/node_modules/chance/docs/time/month.md b/src/node_modules/chance/docs/time/month.md
new file mode 100644
index 0000000..83bffd5
--- /dev/null
+++ b/src/node_modules/chance/docs/time/month.md
@@ -0,0 +1,23 @@
+# month
+
+```js
+// usage
+chance.month()
+```
+
+Generate a random month.
+
+```js
+chance.month();
+=> 'January'
+```
+
+By default, returns just the full name.
+
+Optionally specify raw to get the whole month object consisting of name,
+short_name, and numeric.
+
+```js
+chance.month({raw: true});
+=> {name: 'October', short_name: 'Oct', numeric: '10'}
+```
diff --git a/src/node_modules/chance/docs/time/second.md b/src/node_modules/chance/docs/time/second.md
new file mode 100644
index 0000000..00c565e
--- /dev/null
+++ b/src/node_modules/chance/docs/time/second.md
@@ -0,0 +1,15 @@
+# second
+
+```js
+// usage
+chance.second()
+```
+
+Generate a random second
+
+```js
+chance.second();
+=> 19
+```
+
+By default, returns a second from 0 to 59. Idea is for generating a clock time.
diff --git a/src/node_modules/chance/docs/time/timestamp.md b/src/node_modules/chance/docs/time/timestamp.md
new file mode 100644
index 0000000..400a2ee
--- /dev/null
+++ b/src/node_modules/chance/docs/time/timestamp.md
@@ -0,0 +1,14 @@
+# timestamp
+
+```js
+// usage
+chance.timestamp()
+```
+
+Generate a random timestamp. This is a standard Unix time, so a random number of
+seconds since January 1, 1970.
+
+```js
+chance.timestamp();
+=> 576556683
+```
diff --git a/src/node_modules/chance/docs/time/timezone.md b/src/node_modules/chance/docs/time/timezone.md
new file mode 100644
index 0000000..5d9247e
--- /dev/null
+++ b/src/node_modules/chance/docs/time/timezone.md
@@ -0,0 +1,20 @@
+# timezone
+
+```js
+// usage
+chance.timezone()
+```
+
+Return a random timezone
+
+```js
+chance.timezone();
+=> {
+"name": "India Standard Time",
+"abbr": "IST",
+"offset": 5.5,
+"isdst": false,
+"text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
+"utc": ["Asia/Calcutta"]
+}
+```
diff --git a/src/node_modules/chance/docs/time/weekday.md b/src/node_modules/chance/docs/time/weekday.md
new file mode 100644
index 0000000..05f5484
--- /dev/null
+++ b/src/node_modules/chance/docs/time/weekday.md
@@ -0,0 +1,16 @@
+# weekday
+
+```js
+// usage
+chance.weekday()
+chance.weekday({weekday_only: true})
+```
+
+Return a weekday
+
+```js
+chance.weekday();
+=> 'Tuesday'
+```
+
+By default, weekday_only is false. If set to true it will never return Saturday or Sunday.
diff --git a/src/node_modules/chance/docs/time/year.md b/src/node_modules/chance/docs/time/year.md
new file mode 100644
index 0000000..4ef4527
--- /dev/null
+++ b/src/node_modules/chance/docs/time/year.md
@@ -0,0 +1,31 @@
+# year
+
+```js
+// usage
+chance.year()
+chance.year({min: 1900, max: 2100})
+```
+
+Generate a random year
+
+```js
+chance.year();
+=> '2053'
+```
+
+By default, min is the current year and max is 100 years greater than min.
+
+This is returned as a string. If for some reason you need it numeric, just
+parse it:
+
+```js
+parseInt(chance.year());
+=> 2042
+```
+
+Optionally specify min, max, or both to limit the range.
+
+```js
+chance.year({min: 1900, max: 2100});
+=> '1983'
+```
diff --git a/src/node_modules/chance/docs/usage/bower.md b/src/node_modules/chance/docs/usage/bower.md
new file mode 100644
index 0000000..41b85d4
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/bower.md
@@ -0,0 +1,19 @@
+# bower
+
+Chance can be easily installed with [Bower](https://bower.io)
+
+```bash
+bower install chance
+```
+
+then in the HTML of your app:
+
+```html
+<!-- Load Chance -->
+<script type="text/javascript" src="bower_components/chance/chance.js"></script>
+<script>
+ // Use Chance
+ alert(chance.string());
+</script>
+```
+
diff --git a/src/node_modules/chance/docs/usage/browser.md b/src/node_modules/chance/docs/usage/browser.md
new file mode 100644
index 0000000..54c772c
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/browser.md
@@ -0,0 +1,58 @@
+# browser
+
+#### Easy
+
+**Chance** instantiates itself onto the window. This means that in the simplest
+case you can just include the script tag then use an instance of **Chance**
+immediately.
+
+```html
+<script src="chance.js"></script>
+<script>
+ console.log(chance.bool());
+</script>
+```
+
+The above snippet would result in either true or false being logged to your
+console. Note how the instance is lowercase *chance*. Uppercase *Chance* is the
+constructor which will create a new instance of **Chance**.
+
+#### Intermediate
+
+You can also ignore the global instantiation of **Chance** and create your own.
+This allows you to create multiple instances if you'd like. For convenience, we
+also bind **Chance** to window so it's accessible globally in the browser at
+*window.Chance* or just *Chance*.
+
+```html
+<script src="chance.js"></script>
+<script>
+ var my_chance = new Chance();
+ console.log(my_chance.bool());
+</script>
+```
+
+
+#### Advanced
+
+If you create your own instance of **Chance**, you can provide your own seed if
+you would like to be repeatable or if you'd like a more truly random seed. In
+the below example, I am doing an AJAX call to hit [Random.org][random] to
+retrieve a *true* random number which I use to seed Chance.
+
+```html
+<script src="http://chancejs.com/chance.min.js"></script>
+<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
+<script>
+ var mySeed;
+ $.get("https://www.random.org/integers/", {num: "1", col: "1", min: "1", max: "1000000000", base: "10", format: "plain", rnd: "new"}, function(randNum) {
+ mySeed = randNum;
+
+ // Instantiate Chance with this truly random number as the seed
+ var my_seeded_chance = new Chance(mySeed);
+ console.log(my_seeded_chance.natural());
+ });
+</script>
+```
+
+[random]: http://www.random.org
diff --git a/src/node_modules/chance/docs/usage/cli.md b/src/node_modules/chance/docs/usage/cli.md
new file mode 100644
index 0000000..7f67262
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/cli.md
@@ -0,0 +1,19 @@
+# cli
+
+To use Chance from the command line, install `chance-cli` globally with:
+
+```bash
+npm install -g chance-cli
+```
+
+Then invoke any generator by name followed by options, like so:
+
+```bash
+$ chance name --prefix true
+Dr. Georgia Sanchez
+
+$ chance latitude --min 12.34 --max 56.78
+22.01836
+```
+
+More details in the [chance-cli README](https://github.com/chancejs/chance-cli)
diff --git a/src/node_modules/chance/docs/usage/function.md b/src/node_modules/chance/docs/usage/function.md
new file mode 100644
index 0000000..a79ccde
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/function.md
@@ -0,0 +1,22 @@
+# function
+
+Instead of providing a seed, which will be used to seed our [Mersenne Twister](https://en.wikipedia.org/wiki/Mersenne_twister),
+you can also specify an arbitrary function to generate random numbers which the
+rest of the library will utilize when generating everything else.
+
+A rather simple example, simply using Math.random() instead of our Mersenne Twister
+
+```js
+// Use Math.random() instead of our Mersenne Twister
+var chance = new Chance(Math.random);
+
+chance.address()
+=> '131 Asmun Pike'
+chance.address()
+=> '261 Pawnaf Highway'
+```
+
+Chance will appear to work just the same, but have a different underlying random
+generator.
+
+This function should return any number between 0 and 1.
diff --git a/src/node_modules/chance/docs/usage/node.md b/src/node_modules/chance/docs/usage/node.md
new file mode 100644
index 0000000..914fe87
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/node.md
@@ -0,0 +1,31 @@
+# node
+
+It can also be used in [Node.js](http://nodejs.org)
+
+```bash
+npm install chance
+```
+
+then in your app
+
+```js
+// Load Chance
+var Chance = require('chance');
+
+// Instantiate Chance so it can be used
+var chance = new Chance();
+
+// Use Chance here.
+var my_random_string = chance.string();
+```
+
+As of version 0.5.5, the following is also offered as a convenience for getting
+an instance of Chance
+
+```js
+// Load and instantiate Chance
+var chance = require('chance').Chance();
+
+// Use Chance here.
+var my_random_string = chance.string();
+```
diff --git a/src/node_modules/chance/docs/usage/requirejs.md b/src/node_modules/chance/docs/usage/requirejs.md
new file mode 100644
index 0000000..212e53c
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/requirejs.md
@@ -0,0 +1,13 @@
+# requirejs
+
+Load Chance with <a href="http://requirejs.org">RequireJS</a>
+
+```js
+ require(['Chance'], function(Chance) {
+ // Instantiate
+ var chance = new Chance();
+
+ // Then use it:
+ var my_random_integer = chance.integer();
+ });
+```
diff --git a/src/node_modules/chance/docs/usage/seed.md b/src/node_modules/chance/docs/usage/seed.md
new file mode 100644
index 0000000..737a91d
--- /dev/null
+++ b/src/node_modules/chance/docs/usage/seed.md
@@ -0,0 +1,49 @@
+# seed
+
+You can also instantiate your own instance of Chance with a known seed. This is
+useful for creating repeatable results.
+
+```js
+var chance1 = new Chance(12345);
+var chance2 = new Chance(12345);
+
+// These yield the same values, in sequence
+console.log(chance1.random());
+console.log(chance2.random());
+```
+
+Since both copies of Chance had the same seed, they will both generate the same
+random number sequence each time they're called.
+
+This allows for repeatability, if desired.
+
+This is possible because **Chance** is built atop a [Mersenne Twister][mersenne],
+a pseudo-random number generator which produces repeatable results given the same seed.
+
+Optionally provide the seed as a string.
+
+```js
+var chance1 = new Chance("foo");
+var chance2 = new Chance("bar");
+
+// These will be different
+console.log(chance1.random());
+console.log(chance2.random());
+```
+
+Optionally provide multiple arguments as the seed.
+
+```js
+var chance1 = new Chance("hold", "me", "closer");
+var chance2 = new Chance("tony", "danza");
+var chance3 = new Chance("hold", "me", "closer");
+
+// These will be different
+console.log(chance1.random());
+console.log(chance2.random());
+
+// This will be the same as the value from chance1 above
+console.log(chance3.random());
+```
+
+[mersenne]: http://en.wikipedia.org/wiki/Mersenne_twister
diff --git a/src/node_modules/chance/docs/web/avatar.md b/src/node_modules/chance/docs/web/avatar.md
new file mode 100644
index 0000000..8feaff0
--- /dev/null
+++ b/src/node_modules/chance/docs/web/avatar.md
@@ -0,0 +1,42 @@
+# avatar
+
+```js
+// usage
+chance.avatar()
+chance.avatar({protocol: 'https'})
+chance.avatar({fileExtension: 'jpg'})
+chance.avatar({email: 'mail@victorquinn.com'})
+```
+
+Return a URL to a random avatar from Gravatar.
+
+```js
+chance.avatar()
+=> '//www.gravatar.com/avatar/41f84bab4a852971eb1d26a287acb763'
+```
+
+By default, a url is returned without a protocol. Specify one to get a random
+url but with a known protocol
+
+```js
+chance.avatar({protocol: 'https'})
+=> 'https://www.gravatar.com/avatar/f40260c4058cc904b7db652c26099966'
+```
+
+Optionally specify a file extension to get one of a known type
+
+```js
+chance.avatar({fileExtension: 'jpg'})
+=> '//www.gravatar.com/avatar/76697df5874c854e3cc8fde1200b4298.jpg'
+```
+
+You can also use it with a known email address to just get that gravatar.
+
+However, note this, of course, no longer makes it random, just more of a helper
+function:
+
+```js
+chance.avatar({email: 'mail@victorquinn.com'})
+=> 'www.gravatar.com/avatar/8595c2591b0bca22e736813af33fa7c3'
+```
+
diff --git a/src/node_modules/chance/docs/web/color.md b/src/node_modules/chance/docs/web/color.md
new file mode 100644
index 0000000..462e843
--- /dev/null
+++ b/src/node_modules/chance/docs/web/color.md
@@ -0,0 +1,48 @@
+# color
+
+```js
+// usage
+chance.color()
+chance.color({format: 'hex'})
+chance.color({grayscale: true})
+chance.color({casing: 'upper'})
+```
+
+Return a random color.
+
+```js
+chance.color()
+=> '#79c157'
+```
+
+Colors have four base types: `hex`, `shorthex`, `rgb`, `0x`
+
+These are the kinds usable in HTML or CSS. The type can optionally be specified
+
+```js
+chance.color({format: 'hex'})
+=> '#d67118'
+
+chance.color({format: 'shorthex'})
+=> '#60f'
+
+chance.color({format: 'rgb'})
+=> 'rgb(110,52,164)'
+
+chance.color({format: '0x'})
+=> '0x67ae0b'
+```
+
+Can optionally specify that only grayscale colors be generated
+
+```js
+chance.color({grayscale: true})
+=> '#e2e2e2'
+```
+
+Optionally specify casing to get only uppercase letters in the color
+
+```js
+chance.color({casing: 'upper'})
+=> '#29CFA7'
+```
diff --git a/src/node_modules/chance/docs/web/company.md b/src/node_modules/chance/docs/web/company.md
new file mode 100644
index 0000000..73f1bfb
--- /dev/null
+++ b/src/node_modules/chance/docs/web/company.md
@@ -0,0 +1,13 @@
+# company
+
+```js
+// usage
+chance.company()
+```
+
+Return a random company name.
+
+```js
+chance.company()
+=> 'Caremark Rx Inc'
+```
diff --git a/src/node_modules/chance/docs/web/domain.md b/src/node_modules/chance/docs/web/domain.md
new file mode 100644
index 0000000..92aa11a
--- /dev/null
+++ b/src/node_modules/chance/docs/web/domain.md
@@ -0,0 +1,22 @@
+# domain
+
+```js
+// usage
+chance.domain()
+chance.domain({tld: 'com'})
+```
+
+Return a random domain with a random [tld](#tld).
+
+```js
+chance.domain()
+=> 'onaro.net'
+```
+
+Optionally specify a tld and the domain will be random but the tld will not.
+
+```js
+chance.domain({tld: 'ie'})
+=> 'gotaujo.ie'
+```
+
diff --git a/src/node_modules/chance/docs/web/email.md b/src/node_modules/chance/docs/web/email.md
new file mode 100644
index 0000000..2d91d54
--- /dev/null
+++ b/src/node_modules/chance/docs/web/email.md
@@ -0,0 +1,21 @@
+# email
+
+```js
+// usage
+chance.email()
+chance.email({domain: "example.com"})
+```
+
+Return a random email with a random domain.
+
+```js
+chance.email()
+=> 'kawip@piklojzob.gov'
+```
+
+Optionally specify a domain and the email will be random but the domain will not.
+
+```js
+chance.email({domain: 'example.com'})
+=> 'giigjom@example.com'
+```
diff --git a/src/node_modules/chance/docs/web/fbid.md b/src/node_modules/chance/docs/web/fbid.md
new file mode 100644
index 0000000..b872517
--- /dev/null
+++ b/src/node_modules/chance/docs/web/fbid.md
@@ -0,0 +1,13 @@
+# fbid
+
+```js
+// usage
+chance.fbid()
+```
+
+Return a random Facebook id, aka fbid.
+
+```js
+chance.fbid()
+=> "1000039460258605"
+```
diff --git a/src/node_modules/chance/docs/web/google_analytics.md b/src/node_modules/chance/docs/web/google_analytics.md
new file mode 100644
index 0000000..54562c6
--- /dev/null
+++ b/src/node_modules/chance/docs/web/google_analytics.md
@@ -0,0 +1,13 @@
+# google_analytics
+
+```js
+// usage
+chance.google_analytics()
+```
+
+Return a random [Google Analytics](https://support.google.com/analytics/answer/1032385?hl=en) tracking code. Takes the form `'UA-123456-01'`
+
+```js
+chance.google_analytics()
+=> 'UA-384555-17'
+```
diff --git a/src/node_modules/chance/docs/web/hashtag.md b/src/node_modules/chance/docs/web/hashtag.md
new file mode 100644
index 0000000..50958e0
--- /dev/null
+++ b/src/node_modules/chance/docs/web/hashtag.md
@@ -0,0 +1,13 @@
+# hashtag
+
+```js
+// usage
+chance.hashtag()
+```
+
+Return a random hashtag. This is a string of the form '#thisisahashtag'.
+
+```js
+chance.hashtag()
+=> '#dichumwa'
+```
diff --git a/src/node_modules/chance/docs/web/ip.md b/src/node_modules/chance/docs/web/ip.md
new file mode 100644
index 0000000..d902422
--- /dev/null
+++ b/src/node_modules/chance/docs/web/ip.md
@@ -0,0 +1,14 @@
+# ip
+
+```js
+// usage
+chance.ip()
+```
+
+Return a random IP Address.
+
+```js
+chance.ip()
+=> '153.208.102.234'
+```
+
diff --git a/src/node_modules/chance/docs/web/ipv6.md b/src/node_modules/chance/docs/web/ipv6.md
new file mode 100644
index 0000000..b13cdab
--- /dev/null
+++ b/src/node_modules/chance/docs/web/ipv6.md
@@ -0,0 +1,14 @@
+# ipv6
+
+```js
+// usage
+chance.ipv6()
+```
+
+Return a random IPv6 Address.
+
+```js
+chance.ipv6()
+=> 'db2f:6123:f99e:00f7:a76e:7f68:9f91:bb08'
+```
+
diff --git a/src/node_modules/chance/docs/web/klout.md b/src/node_modules/chance/docs/web/klout.md
new file mode 100644
index 0000000..016031c
--- /dev/null
+++ b/src/node_modules/chance/docs/web/klout.md
@@ -0,0 +1,13 @@
+# klout
+
+```js
+// usage
+chance.klout()
+```
+
+Return a random [Klout](http://klout.com) score. Range 1-99.
+
+```js
+chance.klout()
+=> 21
+```
diff --git a/src/node_modules/chance/docs/web/profession.md b/src/node_modules/chance/docs/web/profession.md
new file mode 100644
index 0000000..a1bea16
--- /dev/null
+++ b/src/node_modules/chance/docs/web/profession.md
@@ -0,0 +1,21 @@
+# profession
+
+```js
+// usage
+chance.profession()
+chance.profession({rank: true})
+```
+
+Return a random profession. Rank is false by default.
+
+```js
+chance.profession()
+=> 'Software Test Engineer'
+```
+
+Optionally set rank as true get rank with profession.
+
+```js
+chance.profession({rank: true})
+=> 'Junior Supply Chain Director'
+```
diff --git a/src/node_modules/chance/docs/web/tld.md b/src/node_modules/chance/docs/web/tld.md
new file mode 100644
index 0000000..4d63fb4
--- /dev/null
+++ b/src/node_modules/chance/docs/web/tld.md
@@ -0,0 +1,16 @@
+# tld
+
+```js
+// usage
+chance.tld()
+```
+
+Return a random tld ([Top Level Domain][tld]) from the set:
+
+```js
+['com', 'org', 'edu', 'gov', 'uk', 'net', 'io']
+```
+
+Note, these do not start with a period.
+
+[tld]: https://en.wikipedia.org/wiki/Top-level_domain
diff --git a/src/node_modules/chance/docs/web/twitter.md b/src/node_modules/chance/docs/web/twitter.md
new file mode 100644
index 0000000..24d66e9
--- /dev/null
+++ b/src/node_modules/chance/docs/web/twitter.md
@@ -0,0 +1,13 @@
+# twitter
+
+```js
+// usage
+chance.twitter()
+```
+
+Return a random twitter handle.
+
+```js
+chance.twitter()
+=> "@guspejani"
+```
diff --git a/src/node_modules/chance/docs/web/url.md b/src/node_modules/chance/docs/web/url.md
new file mode 100644
index 0000000..cb93848
--- /dev/null
+++ b/src/node_modules/chance/docs/web/url.md
@@ -0,0 +1,53 @@
+# url
+
+```js
+// usage
+chance.url()
+chance.url({protocol: 'ftp'})
+chance.url({domain: 'www.socialradar.com'})
+chance.url({domain_prefix: 'docs'})
+chance.url({path: 'images'})
+chance.url({extensions: ['gif', 'jpg', 'png']})
+```
+
+Return a random url.
+
+```js
+chance.url()
+=> 'http://vanogsi.io/pateliivi'
+```
+
+Optionally specify a protocol and the url will be random but the protocol will not.
+
+```js
+chance.url({protocol: 'ftp'})
+=> 'ftp://mibfu.nr/kardate'
+```
+
+Optionally specify a domain and the url will be random but the domain will not.
+
+```js
+chance.url({domain: 'www.socialradar.com'})
+=> 'http://www.socialradar.com/hob'
+```
+
+Optionally specify a domain prefix and domain will be random, and domain prefix will not.
+
+```js
+chance.url({domain_prefix: 'docs'})
+=> 'http://docs.tuos.ni/itecabup'
+```
+
+Optionally specify a path and it will be obeyed.
+
+```js
+chance.url({path: 'images'})
+=> 'http://tainvoz.net/images'
+```
+
+Optionally specify an array of extensions and one will be picked at random.
+
+```js
+chance.url({extensions: ['gif', 'jpg', 'png']})
+=> 'http://vagjiup.gov/udmopke.png'
+```
diff --git a/src/node_modules/chance/gulpfile.js b/src/node_modules/chance/gulpfile.js
new file mode 100644
index 0000000..2095126
--- /dev/null
+++ b/src/node_modules/chance/gulpfile.js
@@ -0,0 +1,49 @@
+const gulp = require('gulp')
+const ava = require('gulp-ava')
+const eslint = require('gulp-eslint')
+const rename = require('gulp-rename')
+const sourcemaps = require('gulp-sourcemaps')
+const uglify = require('gulp-uglify')
+const pump = require('pump')
+
+gulp.task('lint', () => gulp.src(['**/*.js', '!docs/**', '!node_modules/**', '!dist/**', '!test/helpers/**/*.js'])
+ .pipe(eslint({
+ parser: 'babel-eslint',
+ rules: {
+ // quotes: ['error', 'single'],
+ 'curly': 'error',
+ 'eqeqeq': 'error',
+ 'new-parens': 'error',
+ 'no-cond-assign': 'error',
+ 'no-console': 'error',
+ 'no-debugger': 'error',
+ 'no-empty': 'error',
+ 'no-fallthrough': 'error',
+ 'no-trailing-spaces': 'error',
+ 'no-mixed-spaces-and-tabs': 'error',
+ }
+ }))
+ .pipe(eslint.format())
+ .pipe(eslint.failAfterError()))
+
+gulp.task('test', () => gulp.src('test/**/*.js')
+ .pipe(ava({ verbose: true })))
+
+gulp.task('watch', () => {
+ gulp.watch(['chance.js', 'gulpfile.js', 'test/**/*.js'], ['lint', 'test'])
+})
+
+gulp.task('watch-lint', () => {
+ gulp.watch(['chance.js', 'gulpfile.js', 'test/**/*.js'], ['lint'])
+})
+
+gulp.task('build', (cb) => {
+ pump([ gulp.src('chance.js'), sourcemaps.init(),
+ rename('chance.min.js'), uglify(), sourcemaps.write('.'),
+ gulp.dest('dist'),
+ ], cb)
+})
+
+gulp.task('travis', gulp.series('lint', 'test'))
+
+gulp.task('default', gulp.series('watch', 'lint', 'test'))
diff --git a/src/node_modules/chance/package.json b/src/node_modules/chance/package.json
new file mode 100644
index 0000000..0fc4571
--- /dev/null
+++ b/src/node_modules/chance/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "chance",
+ "main": "./chance.js",
+ "version": "1.1.7",
+ "description": "Chance - Utility library to generate anything random",
+ "homepage": "http://chancejs.com",
+ "author": "Victor Quinn <mail@victorquinn.com>",
+ "bugs": {
+ "url": "https://github.com/chancejs/chancejs/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/chancejs/chancejs.git"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "ava": "^0.19.1",
+ "babel-eslint": "^7.2.3",
+ "chai": "^3.5.0",
+ "coveralls": "^2.11.2",
+ "dirty-chai": "^1.2.2",
+ "docpress": "0.7.1",
+ "eslint": "^6.3.0",
+ "git-update-ghpages": "1.3.0",
+ "gulp": "^4.0.0",
+ "gulp-ava": "^0.17.1",
+ "gulp-eslint": "^3.0.1",
+ "gulp-jshint": "^2.0.4",
+ "gulp-rename": "^1.2.2",
+ "gulp-sourcemaps": "^2.6.1",
+ "gulp-uglify": "^3.0.0",
+ "jshint-stylish": "^2.2.1",
+ "lodash": "^4.17.4",
+ "nyc": "^10.3.2",
+ "pump": "^1.0.2"
+ },
+ "scripts": {
+ "coverage": "nyc npm test && nyc report --reporter=text-lcov --report-dir=./coverage > ./coverage/lcov.info",
+ "docs": "docpress build",
+ "docs:publish": "git-update-ghpages -e",
+ "lint": "eslint --ignore-path .gitignore chance.js",
+ "test": "ava"
+ },
+ "keywords": [
+ "chance",
+ "random",
+ "generator",
+ "test",
+ "mersenne",
+ "name",
+ "address",
+ "dice"
+ ],
+ "jam": {
+ "main": "chance.js"
+ },
+ "github": "https://github.com/chancejs/chancejs",
+ "maintainers": [
+ {
+ "name": "Victor Quinn",
+ "email": "mail@victorquinn.com",
+ "web": "https://www.victorquinn.com"
+ }
+ ],
+ "spm": {
+ "main": "chance.js",
+ "ignore": [
+ "test"
+ ]
+ },
+ "docpress": {
+ "scripts": [
+ "chance.js",
+ "analytics.js",
+ "https://platform.twitter.com/widgets.js"
+ ],
+ "github": "chancejs/chancejs",
+ "css": [
+ "docs/chance.css"
+ ]
+ }
+}
diff --git a/src/node_modules/chance/test/helpers/phoneNumber.min.js b/src/node_modules/chance/test/helpers/phoneNumber.min.js
new file mode 100644
index 0000000..be03356
--- /dev/null
+++ b/src/node_modules/chance/test/helpers/phoneNumber.min.js
@@ -0,0 +1,6 @@
+/**
+ * Phone number validator/formatter (UK numbers).
+ * Author: Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/
+ * Date: 21/02/14
+ **/
+!function(a){var b=["011# ### ####","01#1 ### ####","013873 #####","015242 #####","015394 #####","015395 #####","015396 #####","016973 #####","016974 #####","016977 ####","016977 #####","017683 #####","017684 #####","017687 #####","019467 #####","01### #####","01### ######","02# #### ####","03## ### ####","05### ######","0500 ######","07### ######","08## ### ###","08## ### ####","09## ### ####"],c=function(){var a=[];return b.forEach(function(b){var c="^"+b.split(" ").map(function(a){return a.split("").every(function(a){return"#"===a})?"\\d{"+a.length+"}":a.split("").map(function(a){return"#"===a?"\\d":a}).join("")}).join(" ")+"$";a.push({regex:new RegExp(c),mask:b})}),a};a._patterns=c(),a.isValid=function(a){return this._patterns.some(function(b){return b.regex.test(a)})},a.format=function(a,b){var c=this._patterns.map(function(a){return a});for(c.reverse(),b=void 0===b?" ":b;0!==c.length;){for(var d=c.pop(),e=a.replace(/[()\[\]\-_A-Za-z ]/gi,"").split(""),f=d.mask.split(""),g=0;g<f.length;g++)" "===f[g]&&e.splice(g,0," ");if(e=e.join(""),d.regex.test(e))return e.replace(/ /g,b)}return!1}}("undefined"==typeof exports?this.phoneNumber={}:exports); \ No newline at end of file
diff --git a/src/node_modules/chance/test/test.address.js b/src/node_modules/chance/test/test.address.js
new file mode 100644
index 0000000..7e65c61
--- /dev/null
+++ b/src/node_modules/chance/test/test.address.js
@@ -0,0 +1,740 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+import phoneNumber from './helpers/phoneNumber.min.js'
+
+const chance = new Chance()
+
+// chance.address()
+test('address() returns a string', t => {
+ t.true(_.isString(chance.address()))
+})
+
+test('address() starts with a number', t => {
+ _.times(1000, () => t.true(/[0-9]+.+/.test(chance.address())))
+})
+
+test('address() can take a short_suffix arg and obey it', t => {
+ _.times(1000, () => {
+ let address = chance.address({ short_suffix: true })
+ t.true(address.split(' ')[2].length < 5)
+ })
+})
+
+// chance.altitude()
+test('altitude() looks right', t => {
+ t.is(typeof chance.altitude(), 'number')
+})
+
+test('altitude() is in the right range', t => {
+ _.times(1000, () => {
+ let altitude = chance.altitude()
+ t.true(altitude > 0)
+ t.true(altitude < 8848)
+ })
+})
+
+test('altitude() will accept a min and obey it', t => {
+ _.times(1000, () => {
+ let min = chance.floating({ min: 0, max: 8848 })
+ let altitude = chance.altitude({ min: min })
+ t.true(altitude > min)
+ t.true(altitude < 8848)
+ })
+})
+
+test('altitude() will accept a max and obey it', t => {
+ _.times(1000, () => {
+ let max = chance.floating({ min: 0, max: 8848 })
+ let altitude = chance.altitude({ max: max })
+ t.true(altitude > 0)
+ t.true(altitude < max)
+ })
+})
+
+// chance.areacode()
+test('areacode() looks right', t => {
+ _.times(1000, () => {
+ let areacode = chance.areacode()
+ t.true(_.isString(areacode))
+ t.true(/^\(([2-9][0-8][0-9])\)$/.test(areacode))
+ })
+})
+
+test('areacode() can take parens', t => {
+ _.times(1000, () => {
+ let areacode = chance.areacode({ parens: false })
+ t.true(_.isString(areacode))
+ t.true(/^([2-9][0-8][0-9])$/.test(areacode))
+ })
+})
+
+// chance.city()
+test('city() looks right', t => {
+ _.times(1000, () => {
+ let city = chance.city()
+ t.true(_.isString(city))
+ t.true(/[a-zA-Z]+/.test(city))
+ })
+})
+
+// chance.coordinates()
+test('coordinates() looks right', t => {
+ _.times(1000, () => {
+ let coordinates = chance.coordinates()
+ t.true(_.isString(coordinates))
+ t.is(coordinates.split(',').length, 2)
+ })
+})
+
+test('coordinates() returns coordinates in DD format as default', t => {
+ _.times(1000, () => {
+ const CHARS_NOT_TO_CONTAIN = ['°', '’', '”']
+
+ let coordinates = chance.coordinates()
+ let [ latitude, longitude ] = coordinates.split(',')
+
+ t.true(_.isString(coordinates))
+ t.is(coordinates.split(',').length, 2)
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !latitude.includes(char)))
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !longitude.includes(char)))
+ })
+})
+
+test('coordinates() will obey DD format', t => {
+ _.times(1000, () => {
+ const CHARS_NOT_TO_CONTAIN = ['°', '’', '”']
+
+ let coordinates = chance.coordinates({format: 'dd'})
+ let [ latitude, longitude ] = coordinates.split(',')
+
+ t.true(_.isString(coordinates))
+ t.is(coordinates.split(',').length, 2)
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !latitude.includes(char)))
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !longitude.includes(char)))
+ })
+})
+
+test('coordinates() will obey DDM format', t => {
+ _.times(1000, () => {
+ const CHARS_TO_CONTAIN = ['°']
+ const CHARS_NOT_TO_CONTAIN = ['’', '”']
+
+ let coordinates = chance.coordinates({format: 'ddm'})
+ let [ latitude, longitude ] = coordinates.split(',')
+
+ t.true(_.isString(coordinates))
+ t.is(coordinates.split(',').length, 2)
+ t.true(CHARS_TO_CONTAIN.every(char => latitude.includes(char)))
+ t.true(CHARS_TO_CONTAIN.every(char => longitude.includes(char)))
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !latitude.includes(char)))
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !longitude.includes(char)))
+ })
+})
+
+test('coordinates() will obey DMS format', t => {
+ _.times(1000, () => {
+ const CHARS_TO_CONTAIN = ['°', '’', '”']
+
+ let coordinates = chance.coordinates({format: 'dms'})
+ let [ latitude, longitude ] = coordinates.split(',')
+
+ t.true(_.isString(coordinates))
+ t.is(coordinates.split(',').length, 2)
+ t.true(CHARS_TO_CONTAIN.every(char => latitude.includes(char)))
+ t.true(CHARS_TO_CONTAIN.every(char => longitude.includes(char)))
+ })
+})
+
+// chance.counties()
+test('counties() returns an array of counties', t => {
+ t.true(_.isArray(chance.counties()))
+})
+
+test('counties() returns a (long) county name', t => {
+ _.times(1000, () => t.true(chance.counties({ full: true }).length > 2))
+})
+
+test('counties() can return a random (long) county name', t => {
+ _.times(1000, () => {
+ t.true(chance.counties({ full: true, country: 'uk' }).length > 2)
+ })
+})
+
+// chance.countries()
+test('countries() returns an array of countries', t => {
+ t.true(_.isArray(chance.countries()))
+})
+
+// chance.country()
+test('country() returns a random (short) country name', t => {
+ _.times(1000, () => {
+ t.is(chance.country().length, 2)
+ })
+})
+
+test('country() returns a random (long) country name', t => {
+ _.times(1000, () => {
+ t.true(chance.country({ full: true }).length > 2)
+ })
+})
+
+// chance.county()
+test('county() returns a random county name', t => {
+ _.times(1000, () => {
+ t.true(_.isString(chance.county()))
+ })
+})
+
+test('country() returns a random (long) country name', t => {
+ _.times(1000, () => {
+ t.true(chance.country({ full: true }).length > 2)
+ })
+})
+
+// chance.depth()
+test('depth() looks right', t => {
+ t.is(typeof chance.depth(), 'number')
+})
+
+test('depth() is in the right range', t => {
+ _.times(1000, () => {
+ let depth = chance.depth()
+ t.true(depth > -10994)
+ t.true(depth < 0)
+ })
+})
+
+test('depth() will accept a min and obey it', t => {
+ _.times(1000, () => {
+ let min = chance.floating({ min: -10994, max: 0 })
+ let depth = chance.depth({ min: min })
+ t.true(depth > min)
+ t.true(depth < 0)
+ })
+})
+
+test('depth() will accept a max and obey it', t => {
+ _.times(1000, () => {
+ let max = chance.floating({ min: -10994, max: 0 })
+ let depth = chance.depth({ max: max })
+ t.true(depth > -10994)
+ t.true(depth < max)
+ })
+})
+
+// chance.geohash
+test('geohash() looks right', t => {
+ let geohash = chance.geohash()
+ t.true(_.isString(geohash))
+ t.is(geohash.length, 7)
+})
+
+test('geohash() will accept a length and obey it', t => {
+ _.times(1000, () => {
+ let length = chance.d10()
+ let geohash = chance.geohash({ length: length })
+ t.is(geohash.length, length)
+ })
+})
+
+// chance.latitude()
+test('latitude() looks right', t => {
+ t.is(typeof chance.latitude(), 'number')
+})
+
+test('latitude() is in the right range', t => {
+ _.times(1000, () => {
+ let latitude = chance.latitude()
+ t.true(latitude >= -90)
+ t.true(latitude <= 90)
+ })
+})
+
+test('latitude() will accept a min and obey it', t => {
+ _.times(1000, () => {
+ let min = chance.floating({ min: -90, max: 90 })
+ let latitude = chance.latitude({ min: min })
+ t.true(latitude >= min)
+ t.true(latitude <= 90)
+ })
+})
+
+test('latitude() will accept a max and obey it', t => {
+ _.times(1000, () => {
+ let max = chance.floating({ min: -90, max: 90 })
+ let latitude = chance.latitude({ max: max })
+ t.true(latitude >= -90)
+ t.true(latitude <= max)
+ })
+})
+
+test('latitude() returns latitude in DD format as default', t => {
+ _.times(1000, () => {
+ const CHARS_NOT_TO_CONTAIN = ['°', '’', '”']
+
+ let latitude = chance.latitude()
+
+ t.is(typeof latitude, 'number')
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !latitude.toString().includes(char)))
+ })
+})
+
+test('latitude() will obey DD format', t => {
+ _.times(1000, () => {
+ const CHARS_NOT_TO_CONTAIN = ['°', '’', '”']
+
+ let latitude = chance.latitude({format: 'dd'})
+
+ t.is(typeof latitude, 'number')
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !latitude.toString().includes(char)))
+ })
+})
+
+test('latitude() will obey DDM format', t => {
+ _.times(1000, () => {
+ const CHARS_TO_CONTAIN = ['°']
+ const CHARS_NOT_TO_CONTAIN = ['’', '”']
+
+ let latitude = chance.latitude({format: 'ddm'})
+
+ t.true(_.isString(latitude))
+ t.true(CHARS_TO_CONTAIN.every(char => latitude.includes(char)))
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !latitude.includes(char)))
+ })
+})
+
+test('latitude() will obey DMS format', t => {
+ _.times(1000, () => {
+ const CHARS_TO_CONTAIN = ['°', '’', '”']
+
+ let latitude = chance.latitude({format: 'dms'})
+
+ t.true(_.isString(latitude))
+ t.true(CHARS_TO_CONTAIN.every(char => latitude.includes(char)))
+ })
+})
+
+// chance.longitude()
+test('longitude() looks right', t => {
+ t.is(typeof chance.longitude(), 'number')
+})
+
+test('longitude() is in the right range', t => {
+ _.times(1000, () => {
+ let longitude = chance.longitude()
+ t.true(longitude >= -180)
+ t.true(longitude <= 180)
+ })
+})
+
+test('longitude() will accept a min and obey it', t => {
+ _.times(1000, () => {
+ let min = chance.floating({ min: -180, max: 180 })
+ let longitude = chance.longitude({ min: min })
+ t.true(longitude >= min)
+ t.true(longitude <= 180)
+ })
+})
+
+test('longitude() will accept a max and obey it', t => {
+ _.times(1000, () => {
+ let max = chance.floating({ min: -180, max: 180 })
+ let longitude = chance.longitude({ max: max })
+ t.true(longitude >= -180)
+ t.true(longitude <= max)
+ })
+})
+
+test('longitude() returns longitude in DD format as default', t => {
+ _.times(1000, () => {
+ const CHARS_NOT_TO_CONTAIN = ['°', '’', '”']
+
+ let longitude = chance.longitude()
+
+ t.is(typeof longitude, 'number')
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !longitude.toString().includes(char)))
+ })
+})
+
+test('longitude() will obey DD format', t => {
+ _.times(1000, () => {
+ const CHARS_NOT_TO_CONTAIN = ['°', '’', '”']
+
+ let longitude = chance.longitude({format: 'dd'})
+
+ t.is(typeof longitude, 'number')
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !longitude.toString().includes(char)))
+ })
+})
+
+test('longitude() will obey DDM format', t => {
+ _.times(1000, () => {
+ const CHARS_TO_CONTAIN = ['°']
+ const CHARS_NOT_TO_CONTAIN = ['’', '”']
+
+ let longitude = chance.longitude({format: 'ddm'})
+
+ t.true(_.isString(longitude))
+ t.true(CHARS_TO_CONTAIN.every(char => longitude.includes(char)))
+ t.true(CHARS_NOT_TO_CONTAIN.every(char => !longitude.includes(char)))
+ })
+})
+
+test('longitude() will obey DMS format', t => {
+ _.times(1000, () => {
+ const CHARS_TO_CONTAIN = ['°', '’', '”']
+
+ let longitude = chance.longitude({format: 'dms'})
+
+ t.true(_.isString(longitude))
+ t.true(CHARS_TO_CONTAIN.every(char => longitude.includes(char)))
+ })
+})
+
+// chance.phone()
+test('phone() returns a string', t => {
+ t.true(_.isString(chance.phone()))
+})
+
+test('phone() looks like an actual phone number', t => {
+ t.true(/^\(([2-9][0-8][0-9])\)?[\-. ]?([2-9][0-9]{2,2})[\-. ]?([0-9]{4,4})$/.test(chance.phone()))
+})
+
+test('phone() obeys formatted option', t => {
+ _.times(1000, () => {
+ let phone = chance.phone({ formatted: false })
+ t.true(_.isString(phone))
+ t.true(/^[2-9][0-8]\d[2-9]\d{6,6}$/.test(phone))
+ })
+})
+
+test('phone() obeys formatted option and parens option', t => {
+ _.times(1000, () => {
+ let phone = chance.phone({ formatted: false, parens: true })
+ t.true(_.isString(phone))
+ t.true(/^[2-9][0-8]\d[2-9]\d{6,6}$/.test(phone))
+ })
+})
+
+test('phone() with uk option works', t => {
+ t.true(_.isString(chance.phone({ country: 'uk' })))
+})
+
+test('phone() with uk option works and mobile option', t => {
+ t.true(_.isString(chance.phone({ country: 'uk', mobile: true })))
+})
+
+test('phone() with uk country looks right', t => {
+ t.true(phoneNumber.isValid(chance.phone({ country: 'uk' })))
+})
+
+test('phone() with uk country unformatted looks right', t => {
+ t.true(phoneNumber.isValid(phoneNumber.format(chance.phone({
+ country: 'uk',
+ formatted: false
+ }))))
+})
+
+test('phone() with uk country and mobile option looks right', t => {
+ _.times(1000, () => {
+ t.true(phoneNumber.isValid(chance.phone({
+ country: 'uk',
+ mobile: true
+ })))
+ })
+})
+
+test('phone() with uk country and mobile option unformatted looks right', t => {
+ _.times(1000, () => {
+ t.true(phoneNumber.isValid(phoneNumber.format(chance.phone({
+ country: 'uk',
+ mobile: true,
+ formatted: false
+ }))))
+ })
+})
+
+test('phone() with fr country works', t => {
+ t.true(_.isString(chance.phone({ country: 'fr' })))
+})
+
+test('phone() with fr country works with mobile option', t => {
+ t.true(_.isString(chance.phone({ country: 'fr', mobile: true })))
+})
+
+test('phone() with fr country looks right', t => {
+ _.times(1000, () => {
+ t.true(/0[123459] .. .. .. ../.test(chance.phone({ country: 'fr' })))
+ })
+})
+
+test('phone() with fr country looks right unformatted', t => {
+ _.times(1000, () => {
+ t.true(/0........./.test(chance.phone({
+ country: 'fr',
+ formatted: false
+ })))
+ })
+})
+
+test('phone() with fr country on mobile looks right', t => {
+ _.times(1000, () => {
+ t.true(/0[67] .. .. .. ../.test(chance.phone({
+ country: 'fr',
+ mobile: true
+ })))
+ })
+})
+
+test('phone() with fr country on mobile, unformatted looks right', t => {
+ _.times(1000, () => {
+ t.true(/0[67]......../.test(chance.phone({
+ country: 'fr',
+ mobile: true,
+ formatted: false
+ })))
+ })
+})
+
+test('phone() with br country option works', t => {
+ t.true(_.isString(chance.phone({ country: 'br' })))
+})
+
+test('phone() with br country and mobile option works', t => {
+ t.true(_.isString(chance.phone({ country: 'br', mobile: true })))
+})
+
+test('phone() with br country and formatted false option return a correct format', t => {
+ t.true(/([0-9]{2})([2-5]{1})([0-9]{3})([0-9]{4})/.test(chance.phone({
+ country: 'br',
+ mobile: false,
+ formatted: false
+ })))
+})
+
+test('phone() with br country, formatted false and mobile option return a correct format', t => {
+ t.true(/([0-9]{2})\9([0-9]{4})([0-9]{4})/.test(chance.phone({
+ country: 'br',
+ mobile: true,
+ formatted: false
+ })))
+})
+
+test('phone() with br country and formatted option apply the correct mask', t => {
+ t.true(/\(([0-9]{2})\) ([2-5]{1})([0-9]{3})\-([0-9]{4})/.test(chance.phone({
+ country: 'br',
+ mobile: false,
+ formatted: true
+ })))
+})
+
+test('phone() with br country, formatted and mobile option apply the correct mask', t => {
+ t.true(/\(([0-9]{2})\) 9([0-9]{4})\-([0-9]{4})/.test(chance.phone({
+ country: 'br',
+ mobile: true,
+ formatted: true
+ })))
+})
+
+// chance.postal()
+test('postal() returns a valid basic postal code', t => {
+ _.times(1000, () => {
+ let postal = chance.postal()
+ t.is(postal.length, 7)
+ postal.split('').map((char) => {
+ t.is(char.toUpperCase(), char)
+ })
+ })
+})
+
+test('postcode() returns a valid basic postcode', t => {
+ _.times(10, () => {
+ let postcode = chance.postcode();
+ t.regex(postcode, /^[A-Z]{1,2}\d[A-Z\d]? \d[A-Z]{2}$/);
+ })
+})
+
+// chance.province()
+test('province() returns a random (short) province name', t => {
+ _.times(1000, () => t.true(chance.province().length < 3))
+})
+
+test('province() can return a long random province name', t => {
+ _.times(1000, () => t.true(chance.province({ full: true }).length > 2))
+})
+
+test('province() can return a random long "it" province', t => {
+ _.times(1000, () => {
+ t.true(chance.province({country: 'it', full: true }).length > 2)
+ })
+})
+
+// chance.provinces()
+test('provinces() returns an array of provinces', t => {
+ t.true(_.isArray(chance.provinces()))
+})
+
+test('provinces() supports internationalization', t => {
+ t.not(chance.provinces(), chance.provinces({ country: 'it' }))
+})
+
+// chance.state()
+test('state() returns a random (short) state name', t => {
+ _.times(1000, () => t.true(chance.state().length < 3))
+})
+
+test('state() can take a country and return a state', t => {
+ _.times(1000, () => t.true(chance.state({ country: 'it' }).length === 3))
+})
+
+test('state() can return full state name', t => {
+ _.times(1000, () => {
+ t.true(chance.state({
+ full: true
+ }).length > 2)
+ })
+})
+
+test('state() with country returns a long state name', t => {
+ _.times(1000, () => {
+ t.true(chance.state({
+ country: 'it',
+ full: true
+ }).length > 2)
+ })
+ _.times(1000, () => {
+ t.true(chance.state({
+ country: 'uk',
+ full: true
+ }).length > 2)
+ })
+})
+
+// chance.states()
+test('states() returns an array of states', t => {
+ t.true(_.isArray(chance.states()))
+})
+
+test('states() returns all 50 states and DC', t => {
+ t.is(chance.states().length, 51)
+})
+
+test('states() with territories returns 50 US states, DC, and 7 US territories', t => {
+ t.is(chance.states({
+ territories: true
+ }).length, 58)
+})
+
+test('states() without us states and dc returns 7 US territories', t => {
+ t.is(chance.states({
+ territories: true,
+ us_states_and_dc: false
+ }).length, 7)
+})
+
+test('states() with armed forces returns 50 states, DC, and 3 armed forces military states', t => {
+ t.is(chance.states({
+ armed_forces: true
+ }).length, 54)
+})
+
+test('states() with armed forces without states returns 3 armed forces states', t => {
+ t.is(chance.states({
+ armed_forces: true,
+ us_states_and_dc: false
+ }).length, 3)
+})
+
+test('states() with all options returns 61 items', t => {
+ t.is(chance.states({
+ territories: true,
+ armed_forces: true
+ }).length, 61)
+})
+
+test('states() without states returns 7 territories and 3 armed forces states', t => {
+ t.is(chance.states({
+ territories: true,
+ armed_forces: true,
+ us_states_and_dc: false
+ }).length, 10)
+})
+
+test('states() with country of "it" returns 20 regions', t => {
+ t.is(chance.states({
+ country: 'it'
+ }).length, 20)
+})
+
+test('states() with country of "uk" returns 129 UK counties', t => {
+ t.is(chance.states({
+ country: 'uk'
+ }).length, 129)
+})
+
+test('states() with country of "mx" returns 32 MX states', t => {
+ t.is(chance.states({
+ country: 'mx'
+ }).length, 32)
+})
+
+// chance.street()
+test('street() works', t => {
+ _.times(100, () => t.is(typeof chance.street(), 'string'))
+})
+
+test('street() works with it country', t => {
+ _.times(100, () => t.is(typeof chance.street({ country: 'it' }), 'string'))
+})
+
+// chance.street_suffix()
+test('street_suffix() returns a single suffix', t => {
+ _.times(1000, () => {
+ let suffix = chance.street_suffix()
+ t.is(typeof suffix, 'object')
+ t.is(typeof suffix.name, 'string')
+ t.is(typeof suffix.abbreviation, 'string')
+ })
+})
+
+// chance.street_suffixes()
+test('street_suffixes() returns the suffix array', t => {
+ let suffixes = chance.street_suffixes()
+ t.true(_.isArray(suffixes))
+ suffixes.map((suffix) => {
+ t.truthy(suffix.name)
+ t.truthy(suffix.abbreviation)
+ })
+})
+
+test('street_suffixes() are short', t => {
+ let suffixes = chance.street_suffixes()
+ suffixes.map((suffix) => {
+ t.true(suffix.abbreviation.length < 5)
+ })
+})
+
+test('street_suffixes() are longish', t => {
+ let suffixes = chance.street_suffixes()
+ suffixes.map((suffix) => {
+ t.true(suffix.name.length > 2)
+ })
+})
+
+// chance.zip()
+test('zip() returns a valid basic zip code', t => {
+ _.times(1000, () => {
+ let zip = chance.zip()
+ t.is(zip.length, 5)
+ t.true(/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(zip))
+ })
+})
+
+test('zip() returns a valid zip+4 code', t => {
+ _.times(1000, () => {
+ let zip = chance.zip({ plusfour: true })
+ t.is(zip.length, 10)
+ t.true(/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(zip))
+ })
+})
diff --git a/src/node_modules/chance/test/test.animal.js b/src/node_modules/chance/test/test.animal.js
new file mode 100644
index 0000000..7ad45e6
--- /dev/null
+++ b/src/node_modules/chance/test/test.animal.js
@@ -0,0 +1,40 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+const timeout = (seconds) => {
+ new Promise((resolve, reject) => {
+ setTimeout(() => resolve(), seconds)
+ })
+}
+
+//chance.animal()
+
+test('returns an animal', t => {
+ _.times(1000, () => {
+ let animal = chance.animal({
+ type: "desert"
+ })
+ t.true(_.isString(animal))
+ t.true(animal.length >= 2)
+ })
+})
+
+test('returns an animal even if type is not specified', t => {
+ _.times(1000, () => {
+ let animal = chance.animal()
+ t.true(_.isString(animal))
+ t.true(animal.length >= 2)
+ })
+})
+
+test('throws an error if the type is not part of the animals object', t => {
+ _.times(1000, () => {
+ const fn = () => chance.animal({
+ type: "banana"
+ })
+ t.throws(fn, "Please pick from desert, ocean, grassland, forest, zoo, pets, farm.")
+ })
+})
diff --git a/src/node_modules/chance/test/test.basic.js b/src/node_modules/chance/test/test.basic.js
new file mode 100644
index 0000000..c7f1069
--- /dev/null
+++ b/src/node_modules/chance/test/test.basic.js
@@ -0,0 +1,560 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+const timeout = (seconds) => {
+ new Promise((resolve, reject) => {
+ setTimeout(() => resolve(), seconds)
+ })
+}
+
+test('bool() returns a random boolean', t => {
+ let bool = chance.bool()
+ t.is(typeof bool, 'boolean')
+})
+
+test('bool() is within the bounds of what we would call random', t => {
+ let trueCount = 0;
+ _.times(1000, () => {
+ if (chance.bool()) {
+ trueCount++
+ }
+ })
+
+ // The probability of this test failing is approximately 4.09e-86.
+ // So, in theory, it could give a false negative, but the sun will
+ // probably die long before that happens.
+
+ t.true((trueCount > 200) && (trueCount < 800))
+})
+
+test('bool() takes and obeys likelihood', t => {
+ let trueCount = 0
+ _.times(1000, () => {
+ if (chance.bool({ likelihood: 30 })) {
+ trueCount++
+ }
+ })
+
+ // Expect it to average around 300
+ t.true((trueCount > 200) && (trueCount < 400))
+
+ trueCount = 0
+ _.times(1000, () => {
+ if (chance.bool({ likelihood: 99 })) {
+ trueCount++
+ }
+ })
+
+ // Expect it to average at 990
+ t.true(trueCount > 900)
+})
+
+test('bool() throws an error if likelihood < 0 or > 100', t => {
+ const fn1 = () => chance.bool({likelihood: -23})
+ t.throws(fn1, RangeError)
+ const fn2 = () => chance.bool({likelihood: 7933})
+ t.throws(fn2, RangeError)
+})
+
+test('Chance() null works', async t => {
+ t.plan(1)
+
+ let chance1 = Chance(null)
+ // Wait 5 ms before creating chance2 else sometimes they happen on the same
+ // tick and end up with the same seed!
+ await timeout(5)
+ let chance2 = Chance(null)
+ t.not(chance1.random(), chance2.random())
+})
+
+test('Chance() does return differing results if differing seeds provided', t => {
+ let chance1 = new Chance(12345)
+ let chance2 = new Chance(54321)
+ t.not(chance1.random(), chance2.random())
+})
+
+test('Chance() does not return repeatable results if no seed provided', async t => {
+ t.plan(1000)
+ let chance1 = new Chance()
+ await timeout(5)
+ let chance2 = new Chance()
+ _.times(1000, () => {
+ t.not(chance1.random(), chance2.random())
+ })
+})
+
+test('Chance() returns repeatable results if seed provided on the Chance object', t => {
+ let seed = new Date().getTime()
+ let chance1 = new Chance(seed)
+ let chance2 = new Chance(seed)
+
+ _.times(1000, () => {
+ t.is(chance1.random(), chance2.random())
+ })
+})
+
+test('Chance() returns repeatable results if a string is provided as a seed', t => {
+ let seed = "foo"
+ let chance1 = new Chance(seed)
+ let chance2 = new Chance(seed)
+
+ _.times(1000, () => {
+ t.is(chance1.random(), chance2.random())
+ })
+})
+
+test('Chance() returns different results if two different strings are provided', t => {
+ let chance1 = new Chance("foo")
+ let chance2 = new Chance("baz")
+
+ _.times(1000, () => {
+ t.not(chance1.random(), chance2.random())
+ })
+})
+
+test('Chance() returns different results if two different strings are provided redux', t => {
+ // Credit to @dan-tilley for noticing this flaw in the old seed
+ let chance1 = new Chance("abe")
+ let chance2 = new Chance("acc")
+
+ _.times(1000, () => {
+ t.not(chance1.random(), chance2.random())
+ })
+})
+
+test('Chance() returns different results if multiple arguments are provided', t => {
+ let seed = new Date().getTime()
+ let chance1 = new Chance(seed, "foo")
+ let chance2 = new Chance(seed, "bar")
+
+ _.times(1000, () => {
+ t.not(chance1.random(), chance2.random())
+ })
+})
+
+test('Chance() will take an arbitrary function for the seed and use it', t => {
+ let chance = new Chance(() => 123)
+
+ _.times(1000, () => {
+ t.is(chance.random(), 123)
+ })
+})
+
+test('character() returns a character', t => {
+ let char = chance.character()
+ t.is(typeof char, 'string')
+ t.is(char.length, 1)
+})
+
+test('character() pulls only from pool, when specified', t => {
+ _.times(1000, () => {
+ let char = chance.character({ pool: 'abcde' })
+ t.true(/[abcde]/.test(char))
+ })
+})
+
+test('character() allows only alpha', t => {
+ _.times(1000, () => {
+ let char = chance.character({ alpha: true })
+ t.true(/[a-zA-Z]/.test(char))
+ })
+})
+
+test('character() allows only alphanumeric', t => {
+ _.times(1000, () => {
+ let char = chance.character({ alpha: true, numeric: true })
+ t.true(/[a-zA-Z0-9]/.test(char))
+ })
+})
+
+test('character() obeys upper case', t => {
+ _.times(1000, () => {
+ let char = chance.character({ alpha: true, casing: 'upper' })
+ t.true(/[A-Z]/.test(char))
+ })
+})
+
+test('character() obeys lower case', t => {
+ _.times(1000, () => {
+ let char = chance.character({ alpha: true, casing: 'lower' })
+ t.true(/[a-z]/.test(char))
+ })
+})
+
+test('floating() returns a random floating', t => {
+ t.is(typeof chance.floating(), 'number')
+})
+
+test('floating() can take both a max and min and obey them both', t => {
+ _.times(1000, () => {
+ let floating = chance.floating({ min: 90, max: 100 })
+ t.true(floating > 89)
+ t.true(floating < 101)
+ })
+})
+
+test('floating() will not take fixed + min that would be out of range', t => {
+ const fn = () => chance.floating({ fixed: 13, min: -9007199254740992 })
+ t.throws(fn, "Chance: Min specified is out of range with fixed. Min should be, at least, -900.7199254740992")
+})
+
+test('floating() will not take fixed + max that would be out of range', t => {
+ const fn = () => chance.floating({ fixed: 13, max: 9007199254740992 })
+ t.throws(fn, "Chance: Max specified is out of range with fixed. Max should be, at most, 900.7199254740992")
+})
+
+test('floating() obeys the fixed parameter, when present', t => {
+ _.times(1000, () => {
+ let floating = chance.floating({ fixed: 4 })
+ let decimals = floating.toString().split('.')[1] ? floating.toString().split('.')[1] : ''
+ t.true(decimals.length < 5)
+ })
+})
+
+test('floating() can take fixed and obey it', t => {
+ _.times(1000, () => {
+ let floating = chance.floating({ fixed: 3 })
+ let parsed = parseFloat(floating.toFixed(3))
+ t.is(floating, parsed)
+ })
+})
+
+test('floating() will not take both fixed and precision', t => {
+ const fn = () => chance.floating({fixed: 2, precision: 8})
+ t.throws(fn, 'Chance: Cannot specify both fixed and precision.')
+})
+
+test('get() works as expected', t => {
+ let data = chance.get('lastNames')
+ t.true(typeof data === 'object')
+})
+
+test('hex() works as expected', t => {
+ _.times(1000, () => {
+ t.true(/[0-9a-f]/.test(chance.hex()))
+ })
+})
+
+test('hex() can take Upper and obey it', t => {
+ _.times(1000, () => {
+ t.true(/[0-9A-F]/.test(chance.hex({ casing: 'upper' })))
+ })
+})
+
+test('integer() returns a random integer', t => {
+ t.is(typeof chance.integer(), 'number')
+})
+
+test('integer() is sometimes negative, sometimes positive', t => {
+ let positiveCount = 0
+ _.times(1000, () => {
+ if (chance.integer() > 0) {
+ positiveCount++
+ }
+ })
+
+ // Note: In very extreme circumstances this test may fail as, by its
+ // nature it's random. But it's a low enough percentage that I'm
+ // willing to accept it.
+ t.true((positiveCount > 200) && (positiveCount < 800))
+})
+
+test('integer() can take a zero min and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.integer({ min: 0 }) > 0)
+ })
+})
+
+test('integer() can take a negative min and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.integer({ min: -25 }) > -26)
+ })
+})
+
+test('integer() can take a negative min and max and obey both', t => {
+ _.times(1000, () => {
+ let integer = chance.integer({ min: -25, max: -1 })
+ t.true((integer > -26) && integer < 0)
+ })
+})
+
+test('integer() can take a min with absolute value less than max and return in range above', t => {
+ let count = 0
+ _.times(1000, () => {
+ // With a range this large we'd expect most values to be
+ // greater than 1 if this works correctly.
+ if (Math.abs(chance.integer({ min: -1, max: 1000000 })) < 2) {
+ count++
+ }
+ })
+ t.true(count < 900)
+})
+
+test('integer() throws an error when min > max', t => {
+ const fn = () => chance.integer({ min: 1000, max: 500 })
+ t.throws(fn, 'Chance: Min cannot be greater than Max.')
+})
+
+test('letter() returns a letter', t => {
+ _.times(1000, () => {
+ let letter = chance.letter()
+ t.is(typeof letter, 'string')
+ t.is(letter.length, 1)
+ t.true(letter.match(/[a-z]/) !== null)
+ })
+})
+
+test('letter() can take upper case', t => {
+ _.times(1000, () => {
+ let letter = chance.letter({ casing: 'upper' })
+ t.is(typeof letter, 'string')
+ t.is(letter.length, 1)
+ t.true(letter.match(/[A-Z]/) !== null)
+ })
+})
+
+test('natural() returns a random natural', t => {
+ t.is(typeof chance.natural(), 'number')
+})
+
+test('natural() throws an error if min < 0', t => {
+ const fn = () => chance.natural({ min: -23 })
+ t.throws(fn, 'Chance: Min cannot be less than zero.')
+})
+
+test('natural() is always positive or zero', t => {
+ let positiveCount = 0
+ _.times(1000, () => {
+ if (chance.natural() >= 0) {
+ positiveCount++
+ }
+ })
+ t.is(positiveCount, 1000)
+})
+
+test('natural() can take just a min and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.natural({ min: 9007199254740991 }) > 9007199254740990)
+ })
+})
+
+test('natural() can take just a max and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.natural({ max: 100 }) < 101)
+ })
+})
+
+test('natural() can take both a max and min and obey them both', t => {
+ _.times(1000, () => {
+ let natural = chance.natural({ min: 90, max: 100 })
+ t.true(natural > 89)
+ t.true(natural < 101)
+ })
+})
+
+test('natural() works with both bounds 0', t => {
+ _.times(1000, () => {
+ t.is(chance.natural({ min: 0, max: 0 }), 0)
+ })
+})
+
+test('natural() respects numerals', t => {
+ _.times(1000, () => {
+ let natural = chance.natural({ numerals: 2 })
+ t.true(natural <= 99)
+ t.true(natural >= 10)
+ })
+})
+
+test('natural() works with excluded numbers', t => {
+ _.times(1000, () => {
+ let natural = chance.natural({ min: 1, max: 5, exclude: [1, 3] })
+ t.true(natural <= 5)
+ t.true(natural >= 1)
+ t.true(natural !== 1)
+ t.true(natural !== 3)
+ })
+})
+
+test('natural() works within empty exclude option', t => {
+ _.times(1000, () => {
+ let natural = chance.natural({ min: 1, max: 5, exclude: [] })
+ t.true(natural <= 5)
+ t.true(natural >= 1)
+ })
+})
+
+test('natural() throws an error if exclude is not an array', t => {
+ const fn = () => chance.natural({ min: 1, max: 5, exclude: "foo" })
+ t.throws(fn, 'Chance: exclude must be an array.')
+})
+
+test('natural() throws an error if exclude is not an array', t => {
+ const fn = () => chance.natural({ min: 1, max: 5, exclude: ["puppies", 1] })
+ t.throws(fn, 'Chance: exclude must be numbers.')
+})
+
+test('natural() throws an error if min > max', t => {
+ const fn = () => chance.natural({ min: 1000, max: 500 })
+ t.throws(fn, 'Chance: Min cannot be greater than Max.')
+})
+
+test('natural() throws an error if numerals is less than 1', t => {
+ const fn = () => chance.natural({ numerals: 0 })
+ t.throws(fn, 'Chance: Numerals cannot be less than one.')
+})
+
+test('prime() returns a number', t => {
+ t.is(typeof chance.prime(), 'number')
+})
+
+test('prime() throws an error if min < 0', t => {
+ const fn = () => chance.prime({ min: -23 })
+ t.throws(fn, 'Chance: Min cannot be less than zero.')
+})
+
+test('prime() throws an error if min > max', t => {
+ const fn = () => chance.prime({ min: 1000, max: 500 })
+ t.throws(fn, 'Chance: Min cannot be greater than Max.')
+})
+
+test('prime() is always positive and odd (or 2)', t => {
+ let positiveCount = 0
+ _.times(1000, () => {
+ const prime = chance.prime()
+ if (prime > 0 && (prime % 2 === 1 || prime === 2)) {
+ positiveCount++
+ }
+ })
+ t.is(positiveCount, 1000)
+})
+
+test('prime() can take just a min and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.prime({ min: 5000 }) >= 5000)
+ })
+})
+
+test('prime() can take just a max and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.prime({ max: 20000 }) <= 20000)
+ })
+})
+
+test('prime() can take both a max and min and obey them both', t => {
+ _.times(1000, () => {
+ const prime = chance.prime({ min: 90, max: 100 })
+ t.true(prime >= 90)
+ t.true(prime <= 100)
+ })
+})
+
+test('set() works as expected', t => {
+ let cData = { lastNames: ['customName', 'testLast'] }
+ chance.set(cData)
+ let data = chance.get('lastNames')
+ t.true(_.isArray(data))
+ t.is(data.length, 2)
+})
+
+test('string() returns a string', t => {
+ t.is(typeof chance.string(), 'string')
+})
+
+test('string() obeys length, when specified', t => {
+ _.times(1000, () => {
+ let length = chance.natural({ min: 1, max: 25 })
+ t.is(chance.string({ length: length }).length, length)
+ })
+})
+
+test('string() throws error if length < 0', t => {
+ const fn = () => chance.string({ length: -23 })
+ t.throws(fn, 'Chance: Length cannot be less than zero.')
+})
+
+test('string() returns only letters with alpha', t => {
+ _.times(1000, () => {
+ let str = chance.string({ alpha: true })
+ t.true(/[a-zA-Z]+/.test(str))
+ })
+})
+
+test('string() obeys upper case', t => {
+ _.times(1000, () => {
+ let str = chance.string({ alpha: true, casing: 'upper' })
+ t.true(/[A-Z]+/.test(str))
+ })
+})
+
+test('string() obeys lower case', t => {
+ _.times(1000, () => {
+ let str = chance.string({ alpha: true, casing: 'lower' })
+ t.true(/[a-z]+/.test(str))
+ })
+})
+
+test('string() obeys symbol', t => {
+ _.times(1000, () => {
+ let str = chance.string({ symbols: true })
+ t.true(/[\!\@\#\$\%\^\&\*\(\)\[\]]+/.test(str))
+ })
+})
+
+test('string() can take just a min and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.string({ min: 6 }).length >= 6)
+ })
+})
+
+test('string() can take just a max and obey it', t => {
+ _.times(1000, () => {
+ t.true(chance.string({ max: 20 }).length <= 20)
+ })
+})
+
+test('falsy() should return a falsy value', t => {
+ _.times(1000, () => {
+ const value = chance.falsy()
+ t.falsy(value)
+ })
+})
+
+test('falsy() should return a falsy value using a pool data', t => {
+ _.times(1000, () => {
+ const value = chance.falsy({pool: [null, undefined]})
+ t.falsy(value)
+ })
+})
+
+test('template() returns alpha numeric substituted', t => {
+ _.times(1000, () => {
+ let str = chance.template('ID-{Aa}-{##}')
+ t.regex(str, /^ID-[A-Z][a-z]-[0-9][0-9]$/)
+ })
+})
+
+test('template() rejects unknown tokens', t => {
+ t.throws(() => chance.template('{Aa-}'), 'Invalid replacement character: "-".')
+ t.throws(() => chance.template('{Aa{}'), 'Invalid replacement character: "{".')
+ t.throws(() => chance.template('{Aab}'), 'Invalid replacement character: "b".')
+})
+
+test('template() allows escape sequnce', t => {
+ t.is(chance.template('\\\\ID-\\{Aa\\}'), '\\ID-{Aa}')
+})
+
+test('template() rejects invalid escape sequnce', t => {
+ t.throws(() => chance.template('ID-\\Aa'), 'Invalid escape sequence: "\\A".')
+})
+
+test('template() cannot be undefined', t => {
+ t.throws(() => chance.template(), 'Template string is required')
+})
+
+test('template() cannot be empty', t => {
+ t.throws(() => chance.template(''), 'Template string is required')
+})
diff --git a/src/node_modules/chance/test/test.buffer.js b/src/node_modules/chance/test/test.buffer.js
new file mode 100644
index 0000000..04b7802
--- /dev/null
+++ b/src/node_modules/chance/test/test.buffer.js
@@ -0,0 +1,31 @@
+import test from "ava";
+import Chance from "../chance.js";
+import _ from "lodash";
+
+const chance = new Chance();
+
+// chance.buffer()
+test("buffer() returns a random buffer", t => {
+ _.times(1000, () => {
+ let buffer = chance.buffer();
+ t.true(_.isBuffer(buffer));
+ let len = buffer.byteLength;
+ t.true(len >= 5);
+ t.true(len <= 20);
+ });
+});
+
+// chance.buffer()
+test("buffer() will obey bounds", t => {
+ _.times(1000, () => {
+ let buffer = chance.buffer({ length: 12 });
+ t.true(_.isBuffer(buffer));
+ t.is(buffer.byteLength, 12);
+ });
+});
+
+// chance.buffer()
+test("buffer() throws if length < 0", t => {
+ const fn = () => chance.buffer({ length: -3 });
+ t.throws(fn, "Chance: Length cannot be less than zero.");
+});
diff --git a/src/node_modules/chance/test/test.company.js b/src/node_modules/chance/test/test.company.js
new file mode 100644
index 0000000..ab88a5f
--- /dev/null
+++ b/src/node_modules/chance/test/test.company.js
@@ -0,0 +1,15 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+test('cnpj() returns a random valid taxpayer number for Brazil companies (CNPJ)', t => {
+ _.times(1000, () => {
+ let cnpj = chance.cnpj()
+ t.true(_.isString(cnpj))
+ t.true(/^\d{2}.\d{3}.\d{3}\/\d{4}-\d{2}$/m.test(cnpj))
+ t.is(cnpj.length, 18)
+ })
+})
+
diff --git a/src/node_modules/chance/test/test.file.js b/src/node_modules/chance/test/test.file.js
new file mode 100644
index 0000000..4b0bf61
--- /dev/null
+++ b/src/node_modules/chance/test/test.file.js
@@ -0,0 +1,116 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+const fileExtensions = {
+ "raster": [ "bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw",
+ "tiff" ],
+ "vector": [ "3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d",
+ "egt", "eps", "fs", "odg", "svg", "xar" ],
+ "3d": [ "3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob",
+ "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d" ],
+ "document": [ "doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv",
+ "rtf", "tex", "xhtml", "xps" ]
+}
+
+// chance.file()
+test('file() returns random file length with random extension', t => {
+ _.times(1000, () => {
+ let file = chance.file()
+ t.true(_.isString(file))
+ t.is(file.split('.').length, 2)
+ })
+})
+
+test('file() returns error if wrong fileType provided', t => {
+ _.times(1000, () => {
+ const fn = () => chance.file({ fileType: 'not_specified' })
+ t.throws(fn, 'Chance: Expect file type value to be \'raster\', \'vector\', \'3d\' or \'document\'')
+ })
+})
+
+test('file() does not return error if legit fileType provided', t => {
+ _.times(1000, () => {
+ const fn = () => chance.file({ fileType: 'raster' })
+ t.notThrows(fn)
+ })
+})
+
+test('file() returns filename with specific extension type', t => {
+ _.times(1000, () => {
+ let file = chance.file({ fileType: 'raster' })
+ t.true(_.isString(file))
+ let extension = file.split('.')[1]
+ t.true(fileExtensions['raster'].indexOf(extension) !== -1)
+ })
+})
+
+test('file() returns filename with specific extension', t => {
+ _.times(1000, () => {
+ let file = chance.file({ extension: 'doc' })
+ let extension = file.split('.')[1]
+ t.is(extension, 'doc')
+ })
+})
+
+test('file() can take a length and obey it', t => {
+ _.times(1000, () => {
+ let length = chance.d10()
+ let file = chance.file({ length: length })
+ let filename = file.split('.')[0]
+ t.is(filename.length, length)
+ })
+})
+
+test('file() can take a pool of extensions and obey them', t => {
+ _.times(1000, () => {
+ let extensions = [ 'bmp', '3dv', '3dmf', 'doc' ]
+ let file = chance.file({ extensions: extensions })
+ let extension = file.split('.')[1]
+ t.true(extensions.indexOf(extension) !== -1)
+ })
+})
+
+test('file() can take pool of extensions by object collection and obey them', t => {
+ const objectExtensionCollection = {
+ "one": [ "extension_one_1", "extension_one_2", "extension_one_3" ],
+ "two": [ "extension_two_1", "extension_two_2", "extension_two_3" ],
+ "three": [ "extension_three_1", "extension_three_2", "extension_three_3" ]
+ }
+
+ _.times(1000, () => {
+ let file = chance.file({ extensions: objectExtensionCollection })
+ let extension = file.split('.')[1]
+ let extensionCount = 0
+ for (let key in objectExtensionCollection) {
+ let collection = objectExtensionCollection[key]
+ collection.map((ext) => {
+ if (ext === extension) {
+ extensionCount++
+ }
+ })
+ }
+ t.is(extensionCount, 1)
+ })
+})
+
+test('file() throws if bad extensions option provided', t => {
+ const fn = () => chance.file({ extensions: 10 })
+ t.throws(fn, 'Chance: Extensions must be an Array or Object')
+})
+
+test('file() does not throw if good extensions option provided as array', t => {
+ _.times(1000, () => {
+ const fn = () => chance.file({ extensions: fileExtensions.document })
+ t.notThrows(fn)
+ })
+})
+
+test('file() does not throw if good extensions option provided as object', t => {
+ _.times(1000, () => {
+ const fn = () => chance.file({ extensions: fileExtensions })
+ t.notThrows(fn)
+ })
+})
diff --git a/src/node_modules/chance/test/test.finance.js b/src/node_modules/chance/test/test.finance.js
new file mode 100644
index 0000000..0b6e20a
--- /dev/null
+++ b/src/node_modules/chance/test/test.finance.js
@@ -0,0 +1,220 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.cc()
+test('cc() passes the luhn algorithm', t => {
+ _.times(1000, () => {
+ let number = chance.cc()
+ t.true(chance.luhn_check(number))
+ })
+})
+
+test('cc() can take a type arg and obey it', t => {
+ _.times(1000, () => {
+ let type = chance.cc_type({ raw: true })
+ let number = chance.cc({ type: type.name })
+ t.is(number.length, type.length)
+ })
+})
+
+test('cc() can take a short_name type arg and obey it', t => {
+ _.times(1000, () => {
+ let type = chance.cc_type({ raw: true })
+ let number = chance.cc({ type: type.short_name })
+ t.is(number.length, type.length)
+ })
+})
+
+// chance.cc_type()
+test('cc_type() returns a random credit card type', t => {
+ _.times(1000, () => {
+ t.true(_.isString(chance.cc_type()))
+ })
+})
+
+test('cc_type() can take a raw arg and obey it', t => {
+ _.times(1000, () => {
+ let type = chance.cc_type({ raw: true })
+ t.truthy(type.name)
+ t.truthy(type.short_name)
+ t.truthy(type.prefix)
+ t.truthy(type.length)
+ })
+})
+
+test('cc_type() can take a name arg and obey it', t => {
+ _.times(1000, () => {
+ let type = chance.cc_type({ name: 'Visa', raw: true })
+ t.is(type.name, 'Visa')
+ })
+})
+
+test('cc_type() with bogus type throws', t => {
+ const fn = () => chance.cc_type({ name: 'potato' })
+ t.throws(fn, 'Chance: Credit card type \'potato\' is not supported')
+})
+
+// chance.cc_types()
+test('cc_types() returns an array of credit card types', t => {
+ t.true(_.isArray(chance.cc_types()))
+})
+
+// chance.currency()
+test('currency() returns a currency', t => {
+ _.times(1000, () => {
+ let currency = chance.currency()
+ t.true(_.isObject(currency))
+ t.truthy(currency.code)
+ t.is(currency.code.length, 3)
+ t.truthy(currency.name)
+ })
+})
+
+// chance.currency_pair()
+test('currency_pair() returns a currency pair', t => {
+ _.times(1000, () => {
+ let currency_pair = chance.currency_pair()
+ t.true(_.isArray(currency_pair))
+ t.is(currency_pair.length, 2)
+ t.not(currency_pair[0].code, currency_pair[1].code)
+ })
+})
+
+test('currency_pair() can return string version', t => {
+ _.times(1000, () => {
+ let currency_pair = chance.currency_pair(true)
+ t.true(_.isString(currency_pair))
+ t.is(currency_pair.length, 7)
+ t.true(/^[A-Z][A-Z][A-Z]+\/[A-Z][A-Z][A-Z]$/.test(currency_pair))
+ })
+})
+
+// chance.dollar()
+test('dollar() returns a proper dollar amount', t => {
+ let dollar = chance.dollar()
+ t.true(/\$[0-9]+\.[0-9]+/.test(dollar))
+ let dollarFloat = parseFloat(dollar.substring(1, dollar.length))
+ t.true(dollarFloat < 10001)
+})
+
+test('dollar() obeys min and max, if provided', t => {
+ _.times(1000, () => {
+ let dollar = chance.dollar({ max: 20 })
+ let dollarFloat = parseFloat(dollar.substring(1, dollar.length))
+ t.true(dollarFloat <= 20)
+ })
+
+ _.times(1000, () => {
+ let dollar = chance.dollar({ min: 20 })
+ let dollarFloat = parseFloat(dollar.substring(1, dollar.length))
+ t.true(dollarFloat >= 20)
+ })
+})
+
+test('dollar() can take negative min and max', t => {
+ _.times(1000, () => {
+ let dollar = chance.dollar({ min: -200, max: -1 })
+ t.is(dollar.charAt(0), '-')
+ let dollarFloat = parseFloat(dollar.substring(2, dollar.length))
+ // This is necessary because we strip the - when parsing
+ dollarFloat *= -1
+ t.true(dollarFloat <= -1)
+ t.true(dollarFloat >= -200)
+ })
+})
+
+// chance.euro()
+test('euro() returns a proper euro amount', t => {
+ let euro = chance.euro()
+ t.true(/[0-9]+,?\.?[0-9]+?€/.test(euro))
+ let euroFloat = parseFloat(euro.substring(euro.length, -1))
+ t.true(euroFloat < 10001)
+})
+
+// chance.exp()
+test('exp() looks correct', t => {
+ _.times(1000, () => {
+ let exp = chance.exp()
+ t.true(_.isString(exp))
+ t.is(exp.length, 7)
+ t.true(/([0-9]{2})\/([0-9]{4})/.test(exp))
+ })
+})
+
+test('exp() will respect object argument', t => {
+ _.times(1000, () => {
+ let exp = chance.exp({ raw: true })
+ t.true(_.isObject(exp))
+ t.truthy(exp.month)
+ t.true(_.isString(exp.month))
+ t.truthy(exp.year)
+ t.true(_.isString(exp.year))
+ })
+})
+
+test('exp() returs a valid credit card expiration (in a future date)', t => {
+ _.times(1000, () => {
+ let exp = chance.exp({ raw: true })
+ let now = new Date()
+ let nowMonth = now.getMonth() + 1
+ let nowYear = now.getFullYear()
+ let expMonth = parseInt(exp.month, 10)
+ let expYear = parseInt(exp.year, 10)
+
+ t.true(expYear >= nowYear)
+ if (expYear === nowYear) {
+ t.true(expMonth >= nowMonth)
+ }
+ })
+})
+
+// chance.exp_month()
+test('exp_month() returns a numeric month with leading 0', t => {
+ _.times(1000, () => {
+ let month = chance.exp_month()
+ t.true(_.isString(month))
+ t.is(month.length, 2)
+ })
+})
+
+// chance.exp_year()
+test('exp_year() returns an expiration year', t => {
+ _.times(1000, () => {
+ let year = chance.exp_year()
+ t.true(_.isString(year))
+ let parsedYear = parseInt(year, 10)
+ let curYear = new Date().getFullYear()
+ t.true(parsedYear >= curYear)
+ t.true(parsedYear <= curYear + 10)
+ })
+})
+
+test('exp_month() will return a future month if requested', t => {
+ _.times(1000, () => {
+ let nowMonth = new Date().getMonth() + 1
+ let expMonth = parseInt(chance.exp_month({ future: true }), 10)
+ if (nowMonth !== 12) {
+ t.true(expMonth > nowMonth)
+ } else {
+ t.true(expMonth >= 1)
+ t.true(expMonth <= 12)
+ }
+ })
+})
+
+// chance.luhn_check()
+test('luhn_check() properly checks if number passes the Luhn algorithm', t => {
+ t.true(chance.luhn_check(49927398716))
+ t.true(chance.luhn_check(1234567812345670))
+ t.false(chance.luhn_check(49927398717))
+ t.false(chance.luhn_check(1234567812345678))
+})
+
+test('iban() returns an iban', t => {
+ let iban = chance.iban()
+ t.true(_.isString(iban))
+ t.true(/^[A-Z]{2}[0-9]{2}[A-Z0-9]{4}[0-9]{1,26}$/.test(iban))
+})
diff --git a/src/node_modules/chance/test/test.helpers.js b/src/node_modules/chance/test/test.helpers.js
new file mode 100644
index 0000000..171bcc2
--- /dev/null
+++ b/src/node_modules/chance/test/test.helpers.js
@@ -0,0 +1,433 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.capitalize()
+test('capitalize() works as expected', t => {
+ _.times(1000, () => {
+ let word = chance.capitalize(chance.word())
+ t.true(_.isString(word))
+ t.true(/[A-Z]/.test(word))
+ })
+})
+
+// chance.n()
+test('n() gives an array of n terms for the given function', t => {
+ let arr = chance.n(chance.email, 25, { domain: 'example.com' })
+ t.true(_.isArray(arr))
+ t.is(arr.length, 25)
+ arr.map((email) => {
+ t.true(/example\.com$/.test(email))
+ })
+})
+
+test('n() gives an array of 1 when n not given', t => {
+ let arr = chance.n(chance.email)
+ t.true(_.isArray(arr))
+ t.is(arr.length, 1)
+})
+
+test('n() throws when first argument is not a function', t => {
+ let testFns = [
+ () => chance.n(chance.character({ pool: 'abcde' }), 10),
+ () => chance.n('foo', 10),
+ () => chance.n({}, 10),
+ () => chance.n(null, 10),
+ () => chance.n(undefined, 10),
+ () => chance.n(21, 10),
+ ]
+ testFns.map((fn) => {
+ t.throws(fn, 'Chance: The first argument must be a function.')
+ })
+})
+
+test('n() gives an empty array when n is set to 0', t => {
+ let arr = chance.n(chance.email, 0)
+ t.true(_.isArray(arr))
+ t.is(arr.length, 0)
+})
+
+// chance.pick()
+test('pick() returns a single element when called without a count argument', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pick(arr)
+ t.is(picked.length, 1)
+ })
+})
+
+test('pick() returns a multiple elements when called with a count argument', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pick(arr, 3)
+ t.is(picked.length, 3)
+ })
+})
+
+test('pick() does not destroy the original array', t => {
+ let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
+ _.times(1000, () => {
+ let cloned = _.clone(arr)
+ let picked = chance.pick(cloned, 3)
+ t.is(cloned.length, 6)
+ t.deepEqual(arr, cloned)
+ })
+})
+
+test('pick() throws if zero elements in array', t => {
+ const fn = () => chance.pick([])
+ t.throws(fn, 'Chance: Cannot pick() from an empty array')
+})
+
+// chance.pickone()
+test('pickone() returns a single element', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickone(arr)
+ t.is(picked.length, 1)
+ t.false(_.isArray(picked))
+ })
+})
+
+test('pickone() throws if zero elements in array', t => {
+ const fn = () => chance.pickone([])
+ t.throws(fn, 'Chance: Cannot pickone() from an empty array')
+})
+
+// chance.pickset()
+test('pickset() returns empty array when count 0', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickset(arr, 0)
+ t.is(picked.length, 0)
+ t.true(_.isArray(picked))
+ })
+})
+
+test('pickset() throws if zero elements in array', t => {
+ const fn = () => chance.pickset([])
+ t.throws(fn, 'Chance: Cannot pickset() from an empty array')
+})
+
+test('pickset() returns single element array if no count provided', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickset(arr)
+ t.is(picked.length, 1)
+ t.true(_.isArray(picked))
+ })
+})
+
+test('pickset() throws if count is not positive number', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ const fn = () => chance.pickset(arr, -1)
+ t.throws(fn, 'Chance: Count must be a positive number')
+})
+
+test('pickset() returns single element array when called with count of 1', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickset(arr, 1)
+ t.is(picked.length, 1)
+ t.true(_.isArray(picked))
+ })
+})
+
+test('pickset() returns multiple elements when called with count > 1', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickset(arr, 3)
+ t.is(picked.length, 3)
+ t.true(_.isArray(picked))
+ })
+})
+
+test('pickset() returns no more values than the size of the array', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickset(arr, 5)
+ t.is(picked.length, 4)
+ })
+})
+
+test('pickset() does not destroy the original array', t => {
+ let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
+ _.times(1000, () => {
+ let cloned = _.clone(arr)
+ let picked = chance.pickset(cloned, 3)
+ t.is(cloned.length, 6)
+ t.deepEqual(arr, cloned)
+ })
+})
+
+test('pickset() returns unique values', t => {
+ let arr = ['a', 'b', 'c', 'd']
+ _.times(1000, () => {
+ let picked = chance.pickset(arr, 4)
+ t.not(picked.indexOf('a'), -1)
+ t.not(picked.indexOf('b'), -1)
+ t.not(picked.indexOf('c'), -1)
+ t.not(picked.indexOf('d'), -1)
+ })
+})
+
+// chance.shuffle()
+test('shuffle() returns an array of the same size', t => {
+ let arr = ['a', 'b', 'c', 'd', 'e']
+ _.times(1000, () => {
+ let shuffled = chance.shuffle(_.clone(arr))
+ t.is(shuffled.length, 5)
+ t.not(shuffled.indexOf('a'), -1)
+ })
+})
+
+test('shuffle() returns a well shuffled array', t => {
+ // See http://vq.io/1lEhbim checking it isn't doing that!
+ let arr = ['a', 'b', 'c', 'd', 'e'];
+ let positions = {
+ a: [0, 0, 0, 0, 0],
+ b: [0, 0, 0, 0, 0],
+ c: [0, 0, 0, 0, 0],
+ d: [0, 0, 0, 0, 0],
+ e: [0, 0, 0, 0, 0]
+ };
+
+ let shuffled = _.clone(arr)
+ _.times(10000, () => {
+ shuffled = chance.shuffle(shuffled)
+ shuffled.map((item, index) => {
+ // Accumulate the position of the item each time
+ positions[item][index]++
+ })
+ })
+
+ Object.keys(positions).map((index) => {
+ let position = positions[index]
+ position.map((item) => {
+ // This should be around 20% give or take a bit since there are
+ // 5 elements and they should be evenly distributed
+ t.true(item >= 1800)
+ t.true(item <= 2200)
+ })
+ })
+})
+
+test('shuffle() does not destroy original array', t => {
+ let arr = ['a', 'b', 'c', 'd', 'e']
+ _.times(1000, () => {
+ let cloned = _.clone(arr)
+ let shuffled = chance.shuffle(cloned)
+ t.is(shuffled.length, 5)
+ t.deepEqual(arr, cloned)
+ })
+})
+
+// chance.unique()
+test('unique() gives a unique array of the selected function', t => {
+ _.times(500, () => {
+ let arr = chance.unique(chance.character, 25, { pool: "abcdefghijklmnopqrstuvwxyz" })
+ t.true(_.isArray(arr))
+ t.is(_.uniq(arr).length, 25)
+ })
+})
+
+test('unique() works properly with options', t => {
+ _.times(500, () => {
+ let arr = chance.unique(chance.date, 20, { year: 2016 })
+ t.true(_.isArray(arr))
+ t.is(_.uniq(arr).length, 20)
+ })
+})
+
+test('unique() throws when num is likely out of range', t => {
+ const fn = () => chance.unique(chance.character, 10, { pool: 'abcde' })
+ t.throws(fn, 'Chance: num is likely too large for sample set')
+})
+
+test('unique() throws when first argument is not a function', t => {
+ const fn = () => chance.unique(chance.character({ pool: 'abcde' }), 10)
+ t.throws(fn, 'Chance: The first argument must be a function.')
+})
+
+test('unique() will take a custom comparator for comparing complex objects', t => {
+ const comparator = (arr, val) => {
+ // If this is the first element, we know it doesn't exist
+ if (arr.length === 0) {
+ return false
+ } else {
+ // If a match has been found, short circuit check and just return
+ return arr.reduce((acc, item) => acc ? acc : item.name === val.name, false)
+ }
+ }
+ let arr = chance.unique(chance.currency, 25, { comparator: comparator })
+ t.is(_.uniq(arr).length, 25)
+})
+
+test('unique() works without a third argument', t => {
+ _.times(200, () => {
+ t.true(_.isArray(chance.unique(chance.character, 10)))
+ })
+})
+
+// chance.weighted()
+test('weighted() returns an element', t => {
+ _.times(1000, () => {
+ let picked = chance.weighted(['a', 'b', 'c', 'd'], [1, 1, 1, 1])
+ t.true(_.isString(picked))
+ t.is(picked.length, 1)
+ })
+})
+
+test('weighted() works with just 2 items', t => {
+ // Use Math.random as the random function rather than our Mersenne twister
+ // just tospeed things up here because this test takes awhile to gather
+ // enough data to have a large enough sample size to adequately test. This
+ // increases speed by a few orders of magnitude at the cost of
+ // repeatability (which we aren't using here)
+ let chance = new Chance(Math.random)
+ var picked = { a: 0, b: 0 }
+
+ // This makes it a tad slow, but we need a large enough sample size to
+ // adequately test
+ _.times(50000, () => {
+ picked[chance.weighted(['a', 'b'], [1, 100])]++
+ })
+
+ // This range is somewhat arbitrary, but good enough to test our constraints
+ let ratio = picked.b / picked.a
+ t.true(ratio > 80)
+ t.true(ratio < 120)
+})
+
+test('weighted() works with trim', t => {
+ _.times(1000, () => {
+ let picked = chance.weighted(['a', 'b', 'c', 'd'], [1, 1, 1, 1], true)
+ t.true(_.isString(picked))
+ t.is(picked.length, 1)
+ })
+})
+
+test('weighted() throws error if called with an array of weights different from options', t => {
+ const fn = () => chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3])
+ t.throws(fn, 'Chance: Length of array and weights must match')
+})
+
+test('weighted() does not throw error if called with good weights', t => {
+ const fn = () => chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4])
+ t.notThrows(fn)
+})
+
+test('weighted() throws error if weights invalid', t => {
+ const fn = () => chance.weighted(['a', 'b', 'c', 'd'], [0, 0, 0, 0])
+ t.throws(fn, 'Chance: No valid entries in array weights')
+})
+
+test('weighted() throws error if called with an array of weights different from options 2', t => {
+ const fn = () => chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4, 5])
+ t.throws(fn, 'Chance: Length of array and weights must match')
+})
+
+test('weighted() throws error if weights contains NaN', t => {
+ const fn = () => chance.weighted(['a', 'b', 'c', 'd'], [1, NaN, 1, 1])
+ t.throws(fn, 'Chance: All weights must be numbers')
+})
+
+test('weighted() returns results properly weighted', t => {
+ // Use Math.random as the random function rather than our Mersenne twister
+ // just tospeed things up here because this test takes awhile to gather
+ // enough data to have a large enough sample size to adequately test. This
+ // increases speed by a few orders of magnitude at the cost of
+ // repeatability (which we aren't using here)
+ let chance = new Chance(Math.random)
+ let picked = { a: 0, b: 0, c: 0, d: 0 }
+ _.times(50000, () => {
+ picked[chance.weighted(['a', 'b', 'c', 'd'], [1, 100, 100, 1])]++
+ })
+
+ // This range is somewhat arbitrary, but good enough to test our constraints
+ let baRatio = picked.b / picked.a
+ t.true(baRatio > 60)
+ t.true(baRatio < 140)
+
+ let cdRatio = picked.c / picked.d
+ t.true(cdRatio > 60)
+ t.true(cdRatio < 140)
+
+ let cbRatio = (picked.c / picked.b) * 100
+ t.true(cbRatio > 50)
+ t.true(cbRatio < 150)
+})
+
+test('weighted() works with fractional weights', t => {
+ // Use Math.random as the random function rather than our Mersenne twister
+ // just tospeed things up here because this test takes awhile to gather
+ // enough data to have a large enough sample size to adequately test. This
+ // increases speed by a few orders of magnitude at the cost of
+ // repeatability (which we aren't using here)
+ let chance = new Chance(Math.random)
+ let picked = { a: 0, b: 0, c: 0, d: 0 }
+ _.times(50000, () => {
+ picked[chance.weighted(['a', 'b', 'c', 'd'], [0.001, 0.1, 0.1, 0.001])]++
+ })
+
+ // This range is somewhat arbitrary, but good enough to test our constraints
+ let baRatio = picked.b / picked.a
+ t.true(baRatio > 60)
+ t.true(baRatio < 140)
+
+ let cdRatio = picked.c / picked.d
+ t.true(cdRatio > 60)
+ t.true(cdRatio < 140)
+
+ let cbRatio = (picked.c / picked.b) * 100
+ t.true(cbRatio > 50)
+ t.true(cbRatio < 150)
+})
+
+test('weighted() works with weight of 0', t => {
+ _.times(1000, () => {
+ let picked = chance.weighted(['a', 'b', 'c'], [1, 0, 1])
+ t.true(_.isString(picked))
+ t.true(picked !== 'b')
+ })
+})
+
+test('weighted() works with negative weight', t => {
+ _.times(1000, () => {
+ let picked = chance.weighted(['a', 'b', 'c'], [1, -2, 1])
+ t.true(_.isString(picked))
+ t.true(picked !== 'b')
+ })
+})
+
+// chance.pad()
+test('pad() always returns same number when width same as length of number', t => {
+ _.times(1000, () => {
+ let num = chance.natural({ min: 10000, max: 99999 })
+ let padded = chance.pad(num, 5)
+ t.true(_.isString(padded))
+ t.is(padded.length, 5)
+ })
+})
+
+test('pad() will pad smaller number to the right width', t => {
+ _.times(1000, () => {
+ let num = chance.natural({ max: 99999 })
+ let padded = chance.pad(num, 10)
+ t.true(_.isString(padded))
+ t.is(padded.length, 10)
+ t.not(padded.indexOf('00000'), -1)
+ })
+})
+
+test('pad() can take a pad e.lement', t => {
+ _.times(1000, () => {
+ let num = chance.natural({ max: 99999 })
+ let padded = chance.pad(num, 10, 'V')
+ t.true(_.isString(padded))
+ t.is(padded.length, 10)
+ t.not(padded.indexOf('VVVVV'), -1)
+ })
+})
diff --git a/src/node_modules/chance/test/test.misc.js b/src/node_modules/chance/test/test.misc.js
new file mode 100644
index 0000000..9ec3748
--- /dev/null
+++ b/src/node_modules/chance/test/test.misc.js
@@ -0,0 +1,298 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.coin()
+test('coin() returns a coin', t => {
+ _.times(1000, () => {
+ t.true(/(heads|tails)/.test(chance.coin()))
+ })
+})
+
+// chance.d4()
+test('d4() returns a properly bounded d4', t => {
+ _.times(1000, () => {
+ let die = chance.d4()
+ t.true(die >= 1)
+ t.true(die <= 4)
+ })
+})
+
+// chance.d6()
+test('d6() returns a properly bounded d6', t => {
+ _.times(1000, () => {
+ let die = chance.d6()
+ t.true(die >= 1)
+ t.true(die <= 6)
+ })
+})
+
+// chance.d8()
+test('d8() returns a properly bounded d8', t => {
+ _.times(1000, () => {
+ let die = chance.d8()
+ t.true(die >= 1)
+ t.true(die <= 8)
+ })
+})
+
+// chance.d10()
+test('d10() returns a properly bounded d10', t => {
+ _.times(1000, () => {
+ let die = chance.d10()
+ t.true(die >= 1)
+ t.true(die <= 10)
+ })
+})
+
+// chance.d12()
+test('d12() returns a properly bounded d12', t => {
+ _.times(1000, () => {
+ let die = chance.d12()
+ t.true(die >= 1)
+ t.true(die <= 12)
+ })
+})
+
+// chance.d20()
+test('d20() returns a properly bounded d20', t => {
+ _.times(1000, () => {
+ let die = chance.d20()
+ t.true(die >= 1)
+ t.true(die <= 20)
+ })
+})
+
+// chance.d30()
+test('d30() returns a properly bounded d30', t => {
+ _.times(1000, () => {
+ let die = chance.d30()
+ t.true(die >= 1)
+ t.true(die <= 30)
+ })
+})
+
+// chance.d100()
+test('d100() returns a properly bounded d100', t => {
+ _.times(1000, () => {
+ let die = chance.d100()
+ t.true(die >= 1)
+ t.true(die <= 100)
+ })
+})
+
+
+// chance.emotion()
+test('emotion() returns a random emotion', t => {
+ _.times(1000, () => {
+ let emotion = chance.emotion()
+ t.true(_.isString(emotion))
+ t.true(emotion.length >= 2)
+ t.true(emotion.length <= 30)
+ })
+})
+
+// chance.guid()
+test('guid() returns a proper guid', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){8}(-([0-9a-fA-F]){4}){3}-([0-9a-fA-F]){12}/.test(chance.guid()))
+ })
+})
+
+test('guid() returns a proper version 1 guid', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-1([0-9a-fA-F]){3}-([ab89])([0-9a-fA-F]){3}-([0-9a-fA-F]){12}/.test(chance.guid({ version: 1 })))
+ })
+})
+
+test('guid() returns a proper version 2 guid', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-2([0-9a-fA-F]){3}-([ab89])([0-9a-fA-F]){3}-([0-9a-fA-F]){12}/.test(chance.guid({ version: 2 })))
+ })
+})
+
+test('guid() returns a proper version 3 guid', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-3([0-9a-fA-F]){3}-([ab89])([0-9a-fA-F]){3}-([0-9a-fA-F]){12}/.test(chance.guid({ version: 3 })))
+ })
+})
+
+test('guid() returns a proper version 4 guid', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-4([0-9a-fA-F]){3}-([ab89])([0-9a-fA-F]){3}-([0-9a-fA-F]){12}/.test(chance.guid({ version: 4 })))
+ })
+})
+
+test('guid() returns a proper version 5 guid', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-5([0-9a-fA-F]){3}-([ab89])([0-9a-fA-F]){3}-([0-9a-fA-F]){12}/.test(chance.guid({ version: 5 })))
+ })
+})
+
+// chance.hash()
+test('hash() returns a proper hash', t => {
+ _.times(1000, () => {
+ let hash = chance.hash()
+ t.true(/([0-9a-f]){40}/.test(hash))
+ t.is(hash.length, 40)
+ })
+})
+
+test('hash() obeys length, if supplied', t => {
+ _.times(1000, () => {
+ let length = chance.natural({ min: 1, max: 64 })
+ let hash = chance.hash({ length: length })
+ t.is(hash.length, length)
+ })
+})
+
+// chance.mac_address()
+test('mac_address() returns a proper mac address', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}/.test(chance.mac_address()))
+ })
+})
+
+test('mac_address() returns a proper colon separated mac address', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}:([0-9a-fA-F]){2}/.test(chance.mac_address({ separator: ':' })))
+ })
+})
+
+test('mac_address() returns a proper hyphen separated mac address', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){2}-([0-9a-fA-F]){2}-([0-9a-fA-F]){2}-([0-9a-fA-F]){2}-([0-9a-fA-F]){2}-([0-9a-fA-F]){2}/.test(chance.mac_address({ separator: '-' })))
+ })
+})
+
+test('mac_address() returns a proper network version mac address', t => {
+ _.times(1000, () => {
+ t.true(/([0-9a-fA-F]){4}.([0-9a-fA-F]){4}.([0-9a-fA-F]){4}/.test(chance.mac_address({ networkVersion: true })))
+ })
+})
+
+// chance.mixin()
+test('mixin() works with a simple function', t => {
+ chance.mixin({
+ user: () => {
+ return {
+ first: chance.first(),
+ last: chance.last(),
+ email: chance.email()
+ }
+ }
+ })
+ t.truthy(chance.user)
+ _.times(1000, () => {
+ let user = chance.user()
+ t.truthy(user)
+ t.truthy(user.first)
+ t.true(_.isString(user.last))
+ t.true(_.isString(user.email))
+ })
+})
+
+test('mixin() multiple work, we can call previously defined mixins', t => {
+ chance.mixin({
+ user: () => {
+ return {
+ first: chance.first(),
+ last: chance.last(),
+ email: chance.email()
+ }
+ },
+ social_user: () => {
+ let user = chance.user()
+ user.network = chance.pick(['facebook', 'twitter'])
+ return user
+ }
+ })
+ t.truthy(chance.user)
+ t.truthy(chance.social_user)
+ _.times(1000, () => {
+ let social_user = chance.social_user()
+ t.truthy(social_user)
+ t.truthy(social_user.first)
+ t.truthy(social_user.network)
+ t.true(social_user.network === 'facebook' ||
+ social_user.network === 'twitter')
+ })
+})
+
+// chance.radio()
+test('radio() works as expected', t => {
+ _.times(1000, () => {
+ let radio = chance.radio()
+ t.true(_.isString(radio))
+ t.is(radio.length, 4)
+ t.true(/^[KW][A-Z][A-Z][A-Z]/.test(radio))
+ })
+})
+
+test('radio() accepts east', t => {
+ _.times(1000, () => {
+ let radio = chance.radio({ side: 'east' })
+ t.true(_.isString(radio))
+ t.is(radio.length, 4)
+ t.true(/^[W][A-Z][A-Z][A-Z]/.test(radio))
+ })
+})
+
+test('radio() accepts west', t => {
+ _.times(1000, () => {
+ let radio = chance.radio({ side: 'west' })
+ t.true(_.isString(radio))
+ t.is(radio.length, 4)
+ t.true(/^[K][A-Z][A-Z][A-Z]/.test(radio))
+ })
+})
+
+// chance.rpg()
+test('rpg() appears to work as expected', t => {
+ _.times(1000, () => {
+ let dice = chance.rpg('5d20')
+ t.true(_.isArray(dice))
+ t.is(dice.length, 5)
+ dice.map((die) => {
+ t.true(die >= 1)
+ t.true(die <= 20)
+ })
+ })
+})
+
+test('rpg() without a die roll throws an error', t => {
+ t.throws(() => chance.rpg(), 'Chance: A type of die roll must be included')
+})
+
+test('rpg() throws errors where it should', t => {
+ const errorFns = [
+ () => chance.rpg('3'),
+ () => chance.rpg('hd23'),
+ () => chance.rpg('3d23d2'),
+ () => chance.rpg('d20')
+ ]
+ errorFns.map((fn) => {
+ t.throws(fn, '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')
+ })
+})
+
+test('rpg() will take and obey a sum', t => {
+ _.times(1000, () => {
+ let rpg = chance.rpg('4d20', { sum: true })
+ t.true(_.isNumber(rpg))
+ t.true(rpg >= 4)
+ t.true(rpg <= 80)
+ })
+})
+
+// chance.tv()
+test('tv() works as expected', t => {
+ _.times(1000, () => {
+ let tv = chance.tv()
+ t.true(_.isString(tv))
+ t.is(tv.length, 4)
+ t.true(/^[KW][A-Z][A-Z][A-Z]/.test(tv))
+ })
+})
diff --git a/src/node_modules/chance/test/test.mobile.js b/src/node_modules/chance/test/test.mobile.js
new file mode 100644
index 0000000..5361d80
--- /dev/null
+++ b/src/node_modules/chance/test/test.mobile.js
@@ -0,0 +1,29 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.android_id()
+test('android_id() returns a proper android id', t => {
+ _.times(1000, () => t.true(/APA91([0-9a-zA-Z-_]){178}/.test(chance.android_id())))
+})
+
+// chance.apple_token()
+test('apple_token() returns a proper apple push token', t => {
+ _.times(1000, () => t.true(/([0-9a-fA-F]){64}/.test(chance.apple_token())))
+})
+
+// chance.wp8_anid2()
+test('wp8_anid2() returns a proper windows phone 8 anid2', t => {
+ _.times(1000, () => t.true(/^([0-9a-zA-Z]){43}=$/.test(chance.wp8_anid2())))
+})
+
+// chance.wp7_anid()
+test('wp7_anid() returns a proper windows phone 7 anid', t => {
+ _.times(1000, () => t.true(/^A=[0-9A-F]{32}&E=[0-9a-f]{3}&W=\d$/.test(chance.wp7_anid())))
+})
+
+test('bb_pin() returns a proper blackberry pin', t => {
+ _.times(1000, () => t.true(/([0-9a-f]){8}/.test(chance.bb_pin())))
+})
diff --git a/src/node_modules/chance/test/test.music.js b/src/node_modules/chance/test/test.music.js
new file mode 100644
index 0000000..2910796
--- /dev/null
+++ b/src/node_modules/chance/test/test.music.js
@@ -0,0 +1,52 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.note()
+test('note() returns a valid note', t => {
+ _.times(1000, () => {
+ let note = chance.note()
+ t.true(_.isString(note))
+ t.true(note.length <= 2)
+ })
+})
+
+// chance.midi_note()
+test('midi_note() returns a valid midi note between 0 and 127', t => {
+ _.times(1000, () => {
+ let midi_note = chance.midi_note()
+ t.true(_.isNumber(midi_note))
+ t.true(midi_note >= 0)
+ t.true(midi_note <= 127)
+ })
+})
+
+// chance.chord_quality()
+test('chord_quality() returns a valid chord quality', t => {
+ _.times(1000, () => {
+ let chord_quality = chance.chord_quality()
+ t.true(_.isString(chord_quality))
+ t.true(chord_quality.length <= 4)
+ })
+})
+
+// chance.chord()
+test('chord() returns a valid chord', t => {
+ _.times(1000, () => {
+ let chord = chance.chord()
+ t.true(_.isString(chord))
+ t.true(chord.length <= 6)
+ })
+})
+
+// chance.tempo()
+test('tempo() returns a valid tempo between 40 and 320', t => {
+ _.times(1000, () => {
+ let tempo = chance.tempo()
+ t.true(_.isNumber(tempo))
+ t.true(tempo >= 40)
+ t.true(tempo <= 320)
+ })
+}) \ No newline at end of file
diff --git a/src/node_modules/chance/test/test.normal.js b/src/node_modules/chance/test/test.normal.js
new file mode 100644
index 0000000..14b37d2
--- /dev/null
+++ b/src/node_modules/chance/test/test.normal.js
@@ -0,0 +1,114 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+// Helper methods
+const mean = (arr) => arr.reduce((a, b) => a + b)/arr.length
+const stddev = (arr) => {
+ var testMean = mean(arr)
+ var deviation = arr.map((item) => (item - testMean) * (item - testMean))
+ return Math.sqrt(deviation.reduce((a, b) => a + b )/arr.length)
+}
+
+const pool = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
+
+const chance = new Chance()
+
+test('normal() works as expected with no parameters and returns a number', t => {
+ _.times(1000, () => {
+ let norm = chance.normal()
+ t.is(typeof norm, 'number')
+ })
+})
+
+test('normal() returns values fairly close to the expected standard deviation and mean', t => {
+ let testStddev = 1
+ let testMean = 0
+ let group = chance.n(chance.normal, 10000)
+
+ t.true(Math.abs(mean(group) - testMean) < testStddev)
+ t.true(Math.abs(stddev(group) - testStddev) < testStddev * 0.05)
+})
+
+test('normal() works as expected with a pool of custom values provided', t => {
+ let testStddev = 0.0000000001
+ let testMean = 2
+
+ _.times(1000, () => {
+ let norm = chance.normal({ mean: testMean, dev: testStddev, pool: pool })
+ t.true(pool.indexOf(norm) !== -1)
+ })
+})
+
+test('normal() recalculates and returns a value even if the normal() results in indexes outside the bounds of the pool', t => {
+ let testStddev = 1.5
+ let testMean = 3
+
+ _.times(1000, () => {
+ let norm = chance.normal({ mean: testMean, dev: testStddev, pool: pool })
+ t.true(pool.indexOf(norm) !== -1)
+ })
+})
+
+test('normal() can be used with other chance functions', t => {
+ let testStddev = 1
+ let testMean = 3
+ let group = chance.n(chance.normal, 1000, { mean: testMean, dev: testStddev, pool: pool })
+
+ t.true(group.length === 1000)
+ t.true(pool.indexOf(group[0]) !== -1)
+ t.true(pool.indexOf(group[999]) !== -1)
+})
+
+test('normal() should produce a correctly distributed group of pool items', t => {
+ let testStddev = 2
+ let testMean = 6
+ let group = chance.n(chance.normal, 10000, { mean: testMean, dev: testStddev, pool: pool })
+ let counts = _.countBy(group)
+
+ t.true(counts.Sunday > counts.Saturday)
+ t.true(counts.Saturday > counts.Friday)
+ t.true(counts.Friday > counts.Thursday)
+ t.true(counts.Thursday > counts.Wednesday)
+ t.true(counts.Wednesday > counts.Tuesday)
+ t.true(counts.Tuesday > counts.Monday)
+})
+
+test('normal() should throw an error quickly if the user has provided bad pool', t => {
+ let testStddev = 5
+ let testMean = 200
+ const fn = () => chance.normal({ mean: testMean, dev: testStddev, pool: pool })
+ t.throws(fn, 'Chance: Your pool is too small for the given mean and standard deviation. Please adjust.')
+})
+
+test('normal() should throw an error if called with non-number mean', t => {
+ let testStddev = 5
+ let testMean = []
+ const fn = () => chance.normal({ mean: testMean, dev: testStddev, pool: pool })
+ t.throws(fn, 'Chance: Mean (mean) must be a number')
+})
+
+test('normal() should throw an error if called with non-number stddev', t => {
+ let testStddev = []
+ let testMean = 5
+ const fn = () => chance.normal({ mean: testMean, dev: testStddev, pool: pool })
+ t.throws(fn, 'Chance: Standard deviation (dev) must be a number')
+})
+
+test('normal() should throw an error if the pool provided is not an array', t => {
+ const fn = () => chance.normal({ pool: 'not an array' })
+ t.throws(fn, 'Chance: The pool option must be a valid array.')
+})
+
+test('normal() should work with objects', t => {
+ let testStddev = 1
+ let testMean = 1
+ let group = chance.n(chance.normal, 50, { mean: testMean, dev: testStddev, pool: [
+ { a: 1, b: 10},
+ { a: 2, b: 20},
+ { a: 3, b: 30}
+ ]})
+
+ t.true(group.length === 50)
+ t.truthy(group[0]['a'])
+})
diff --git a/src/node_modules/chance/test/test.person.js b/src/node_modules/chance/test/test.person.js
new file mode 100644
index 0000000..0408bc9
--- /dev/null
+++ b/src/node_modules/chance/test/test.person.js
@@ -0,0 +1,447 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// age constants
+const CHILD_AGE_MIN = 0
+const CHILD_AGE_MAX = 12
+const TEEN_AGE_MIN = 13
+const TEEN_AGE_MAX = 19
+const ADULT_AGE_MIN = 18
+const ADULT_AGE_MAX = 65
+const SENIOR_AGE_MIN = 65
+const SENIOR_AGE_MAX = 100
+const AGE_MIN = 0
+const AGE_MAX = 100
+
+const currentYear = new Date().getFullYear()
+
+// chance.age()
+test('age() returns a random age within expected bounds', t => {
+ _.times(1000, () => {
+ let age = chance.age()
+ t.true(_.isNumber(age))
+ t.true(age >= ADULT_AGE_MIN)
+ t.true(age <= ADULT_AGE_MAX)
+ })
+})
+
+test('age() returns a random age within expected bounds for all', t => {
+ _.times(1000, () => {
+ let age = chance.age({ type: 'all' })
+ t.true(_.isNumber(age))
+ t.true(age >= AGE_MIN)
+ t.true(age <= AGE_MAX)
+ })
+})
+
+test('age() returns a proper age for a child', t => {
+ _.times(1000, () => {
+ let age = chance.age({ type: 'child' })
+ t.true(_.isNumber(age))
+ t.true(age >= CHILD_AGE_MIN)
+ t.true(age <= CHILD_AGE_MAX)
+ })
+})
+
+test('age() returns a proper age for a teen', t => {
+ _.times(1000, () => {
+ let age = chance.age({ type: 'teen' })
+ t.true(_.isNumber(age))
+ t.true(age >= TEEN_AGE_MIN)
+ t.true(age <= TEEN_AGE_MAX)
+ })
+})
+
+test('age() returns a proper age for an adult', t => {
+ _.times(1000, () => {
+ let age = chance.age({ type: 'adult' })
+ t.true(_.isNumber(age))
+ t.true(age >= ADULT_AGE_MIN)
+ t.true(age <= ADULT_AGE_MAX)
+ })
+})
+
+test('age() returns a proper age for a senior', t => {
+ _.times(1000, () => {
+ let age = chance.age({ type: 'senior' })
+ t.true(_.isNumber(age))
+ t.true(age >= SENIOR_AGE_MIN)
+ t.true(age <= SENIOR_AGE_MAX)
+ })
+})
+
+// chance.birthday()
+test('birthday() works as expected', t => {
+ _.times(1000, () => {
+ let birthday = chance.birthday()
+ t.true(_.isDate(birthday))
+ let year = birthday.getFullYear()
+ let curYear = new Date().getFullYear()
+ t.true(year > (curYear - AGE_MAX))
+ t.true(year < curYear)
+ })
+})
+
+test('birthday() can have a string returned', t => {
+ _.times(1000, () => {
+ let birthday = chance.birthday({ string: true })
+ t.true(_.isString(birthday))
+ t.false(_.isDate(birthday))
+ t.true(/^[0-9][0-9]?\/[0-9][0-9]?\/[0-9]{4}/m.test(birthday))
+ })
+})
+
+test('birthday() can have a year specified', t => {
+ _.times(1000, () => {
+ t.is(chance.birthday({ year: 1983 }).getFullYear(), 1983)
+ })
+})
+
+test('birthday() can have an age range specified for an adult', t => {
+ _.times(1000, () => {
+ let birthday = chance.birthday({ type: 'adult' })
+ let min = new Date().setFullYear(currentYear - ADULT_AGE_MAX - 1)
+ let max = new Date().setFullYear(currentYear - ADULT_AGE_MIN)
+ t.true(birthday.getTime() >= min)
+ t.true(birthday.getTime() <= max)
+ })
+})
+
+test('birthday() can have an age range specified for a teen', t => {
+ _.times(1000, () => {
+ let birthday = chance.birthday({ type: 'teen' })
+ let min = new Date().setFullYear(currentYear - TEEN_AGE_MAX - 1)
+ let max = new Date().setFullYear(currentYear - TEEN_AGE_MIN)
+ t.true(birthday.getTime() >= min)
+ t.true(birthday.getTime() <= max)
+ })
+})
+
+test('birthday() can have an age range specified for a child', t => {
+ _.times(1000, () => {
+ let birthday = chance.birthday({ type: 'child' })
+ let min = new Date().setFullYear(currentYear - CHILD_AGE_MAX - 1)
+ let max = new Date().setFullYear(currentYear - CHILD_AGE_MIN)
+ t.true(birthday.getTime() >= min)
+ t.true(birthday.getTime() <= max)
+ })
+})
+
+test('birthday() can have an age range specified for a senior', t => {
+ _.times(1000, () => {
+ let birthday = chance.birthday({ type: 'senior' })
+ let min = new Date().setFullYear(currentYear - SENIOR_AGE_MAX - 1)
+ let max = new Date().setFullYear(currentYear - SENIOR_AGE_MIN)
+ t.true(birthday.getTime() >= min)
+ t.true(birthday.getTime() <= max)
+ })
+})
+
+// chance.cnpj()
+test('cnpj() returns a random cnpj', t => {
+ _.times(1000, () => {
+ let hidn = chance.HIDN()
+ t.true(_.isString(hidn))
+ })
+})
+
+// chance.company()
+test('company() returns a random company', t => {
+ _.times(1000, () => {
+ let company = chance.company()
+ t.true(_.isString(company))
+ t.true(company.length > 4)
+ })
+})
+
+// chance.cpf()
+test('cpf() returns a random valid taxpayer number for Brazil citizens (CPF)', t => {
+ _.times(1000, () => {
+ let cpf = chance.cpf()
+ t.true(_.isString(cpf))
+ t.true(/^\d{3}.\d{3}.\d{3}-\d{2}$/m.test(cpf))
+ t.is(cpf.length, 14)
+ })
+})
+
+// chance.first()
+test('first() returns a random first name', t => {
+ _.times(1000, () => {
+ let first = chance.first()
+ t.true(_.isString(first))
+ t.true(first.length >= 2)
+ t.true(first.length <= 20)
+ t.is(first.split(' ').length, 1)
+ })
+})
+
+// chance.gender()
+test('gender() returns a random gender', t => {
+ _.times(1000, () => t.true(/(Male|Female)/.test(chance.gender())))
+})
+
+test('gender() can take extra genders', t => {
+ _.times(1000, () => {
+ let gender = chance.gender({ extraGenders: ['Unknown', 'Transgender'] })
+ t.true(/(Male|Female|Unknown|Transgender)/.test(gender))
+ })
+})
+
+// chance.HIDN()
+test('HIDN() returns a random HIDN', t => {
+ _.times(1000, () => {
+ let hidn = chance.HIDN()
+ t.true(_.isString(hidn))
+ t.true(/^\d{6}[A-Z]{2}$/m.test(hidn))
+ t.is(hidn.length, 8)
+ })
+})
+
+// chance.israelId()
+test('israelId() returns a valid Isreal id', t => {
+ let id = chance.israelId()
+ t.true(_.isString(id))
+ t.is(id.length, 9)
+ let acc = 0
+ for (let i = 0; i < 8; i++) {
+ let thisDigit = id[i] * ( i / 2 === parseInt(i/2, 10) ? 1 : 2)
+ thisDigit = chance.pad(thisDigit, 2)
+ thisDigit = parseInt(thisDigit[0], 10) + parseInt(thisDigit[1], 10)
+ acc += thisDigit
+ }
+ let lastDigit = (10 - parseInt(acc.toString().slice(-1), 10).toString().slice(-1)).toString().slice(-1)
+ t.is(id[8], lastDigit)
+})
+
+// chance.last()
+test('last() returns a random last name', t => {
+ _.times(1000, () => {
+ let last = chance.last()
+ t.true(_.isString(last))
+ t.true(last.length >= 2)
+ t.true(last.length <= 20)
+ t.true(last.split(' ').length <= 3)
+ })
+})
+
+// chance.name()
+test('name() returns a random name', t => {
+ _.times(1000, () => {
+ let name = chance.name()
+ t.true(_.isString(name))
+ t.true(name.length >= 2)
+ t.true(name.length <= 30)
+ t.is(name.split(' ').length, 2)
+ t.true(/[a-zA-Z]+\ [a-zA-Z]+/.test(name))
+ })
+})
+
+test('name() can have the middle name specified', t => {
+ _.times(1000, () => {
+ let name = chance.name({ middle: true })
+ t.true(_.isString(name))
+ t.is(name.split(' ').length, 3)
+ t.true(/[a-zA-Z]+\ [a-zA-Z]+\ [a-zA-Z]+/.test(name))
+ })
+})
+
+test('name() can have the middle initial specified', t => {
+ _.times(1000, () => {
+ let name = chance.name({ middle_initial: true })
+ t.true(_.isString(name))
+ t.is(name.split(' ').length, 3)
+ t.true(/[a-zA-Z]+\ [a-zA-Z]\.\ [a-zA-Z]+/.test(name))
+ })
+})
+
+test('name() can have the prefix specified', t => {
+ _.times(1000, () => {
+ let name = chance.name({ prefix: true })
+ t.true(_.isString(name))
+ t.is(name.split(' ').length, 3)
+ t.true(/[a-zA-Z]{2,4}\.? [a-zA-Z]+\ [a-zA-Z]+/.test(name))
+ })
+})
+
+test('name() can have the suffix specified', t => {
+ _.times(1000, () => {
+ let name = chance.name({ suffix: true })
+ t.true(_.isString(name))
+ t.is(name.split(' ').length, 3)
+ t.true(/[a-zA-Z]+\ [a-zA-Z]+\ [a-zA-Z\.]+/.test(name))
+ })
+})
+
+// chance.name_prefix()
+test('name_prefix() returns a random prefix', t => {
+ _.times(1000, () => {
+ let prefix = chance.name_prefix()
+ t.true(_.isString(prefix))
+ t.true(prefix.length < 5)
+ })
+})
+
+test('name_prefix() returns a correctly gendered prefix', t => {
+ _.times(1000, () => {
+ let prefix = chance.name_prefix({ gender: 'female' })
+ t.not(prefix, 'Mr.')
+ prefix = chance.name_prefix({ gender: 'male' })
+ t.not(prefix, 'Mrs.')
+ t.not(prefix, 'Miss')
+ })
+})
+
+test('name_prefix() can return a full prefix', t => {
+ _.times(1000, () => {
+ let prefix = chance.name_prefix({ full: true })
+ t.true(_.isString(prefix))
+ t.true(prefix.length > 3)
+ })
+})
+
+// chance.name_suffix()
+test('name_suffix() returns a random suffix', t => {
+ _.times(1000, () => {
+ let suffix = chance.name_suffix()
+ t.true(_.isString(suffix))
+ t.true(suffix.length < 7)
+ })
+})
+
+test('name_suffix() can return a full suffix', t => {
+ _.times(1000, () => {
+ let suffix = chance.name_suffix({ full: true })
+ t.true(_.isString(suffix))
+ t.true(suffix.length > 5)
+ })
+})
+
+// chance.nationality()
+test('nationality() returns a nationality that looks right', t => {
+ _.times(1000, () => {
+ let nationality = chance.nationality()
+ t.true(_.isString(nationality))
+ t.true(nationality.length > 3)
+ t.true(nationality.length < 26)
+ })
+})
+
+// chance.profession()
+test('profession() returns a random profession', t => {
+ _.times(1000, () => {
+ let profession = chance.profession()
+ t.true(_.isString(profession))
+ t.true(profession.length > 3)
+ })
+})
+
+test('profession() returns a ranked profession', t => {
+ _.times(1000, () => {
+ let profession = chance.profession({ rank: true })
+ t.true(_.isString(profession))
+ t.true(profession.split(' ').length > 1)
+ t.true(/(Apprentice|Junior|Senior|Lead)/.test(profession.split(' ')[0]))
+ })
+})
+
+// chance.ssn()
+test('ssn() returns a random social security number', t => {
+ _.times(1000, () => {
+ let ssn = chance.ssn()
+ t.true(_.isString(ssn))
+ t.true(/^\d{3}-\d{2}-\d{4}$/m.test(ssn))
+ t.is(ssn.length, 11)
+ })
+})
+
+test('ssn() can return just the last 4', t => {
+ _.times(1000, () => {
+ let ssn = chance.ssn({ ssnFour: true })
+ t.true(_.isString(ssn))
+ t.true(/^\d{4}$/m.test(ssn))
+ t.is(ssn.length, 4)
+ })
+})
+
+// chance.aadhar()
+test('aadhar() returns a random aadhar number with whitespace as separator', t => {
+ _.times(1000, () => {
+ let aadhar = chance.aadhar()
+ t.true(_.isString(aadhar))
+ t.true(/^\d{4}\s\d{4}\s\d{4}$/m.test(aadhar))
+ t.is(aadhar.length, 14)
+ })
+})
+
+// chance.aadhar({separatedByWhiteSpace : false})
+test('aadhar() returns a random aadhar number with no separator', t => {
+ _.times(1000, () => {
+ let aadhar = chance.aadhar({separatedByWhiteSpace : false})
+ t.true(_.isString(aadhar))
+ t.true(/^\d{12}$/m.test(aadhar))
+ t.is(aadhar.length, 12)
+ })
+})
+
+// chance.aadhar({onlyLastFour : true})
+test('aadhar() can return just the last 4', t => {
+ _.times(1000, () => {
+ let aadhar = chance.aadhar({ onlyLastFour: true })
+ t.true(_.isString(aadhar))
+ t.true(/^\d{4}$/m.test(aadhar))
+ t.is(aadhar.length, 4)
+ })
+})
+
+// chance.suffix()
+test('suffix() returns a random suffix', t => {
+ _.times(1000, () => {
+ let suffix = chance.suffix()
+ t.true(_.isString(suffix))
+ t.true(suffix.length < 7)
+ })
+})
+
+test('suffix() returns a full random suffix', t => {
+ _.times(1000, () => {
+ let suffix = chance.suffix({ full: true })
+ t.true(_.isString(suffix))
+ t.true(suffix.length > 5)
+ })
+})
+
+// chance.mrz()
+test('mrz() should return a valid passport number', t => {
+ let sample = "P<GBRFOLKS<<JOANNE<<<<<<<<<<<<<<<<<<<<<<<<<<2321126135GBR6902069F1601013<<<<<<<<<<<<<<02"
+ let mrz = chance.mrz({
+ first: 'Joanne',
+ last: 'Folks',
+ gender: 'F',
+ dob: '690206',
+ expiry: '160101',
+ passportNumber: '232112613',
+ })
+ t.is(sample, mrz)
+
+ sample = "P<GBRKELLY<<LIDA<<<<<<<<<<<<<<<<<<<<<<<<<<<<3071365913GBR6606068F2003131<<<<<<<<<<<<<<04"
+ mrz = chance.mrz({
+ first: 'Lida',
+ last: 'Kelly',
+ gender: 'F',
+ dob: '660606',
+ expiry: '200313',
+ passportNumber: '307136591',
+ })
+ t.is(sample, mrz)
+})
+
+test('mrz() should return a valid random passport number when not given any inputs', t => {
+ let mrz = chance.mrz()
+ t.true(_.isString(mrz))
+ t.is(mrz.substr(0, 5), 'P<GBR')
+ t.is(mrz.length, 88)
+ t.true(/^[A-Z0-9<]{9}[0-9]{1}[A-Z]{3}[0-9]{7}[A-Z]{1}[0-9]{7}[A-Z0-9<]{14}[0-9]{2}$/.test(mrz.substr(44)))
+})
diff --git a/src/node_modules/chance/test/test.regional.js b/src/node_modules/chance/test/test.regional.js
new file mode 100644
index 0000000..2fd7aee
--- /dev/null
+++ b/src/node_modules/chance/test/test.regional.js
@@ -0,0 +1,116 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.cf()
+test('cf() returns a valid random cf', t => {
+ _.times(1000, () => {
+ let cf = chance.cf()
+ t.true(_.isString(cf))
+ t.is(cf.length, 16)
+ t.true(/[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]/.test(cf))
+ })
+})
+
+test('cf() returns a consistent cf', t => {
+ let testCases = [{
+ item: {
+ first: 'Aldo',
+ last: 'Fabrizi',
+ gender: 'Male',
+ birthday: new Date(1905,10,1),
+ city: 'h501'
+ },
+ cf: 'FBRLDA05S01H501A'
+ }, {
+ item: {
+ first: 'Sophia',
+ last: 'Loren',
+ gender: 'Female',
+ birthday: new Date(1934,8,20),
+ city: 'h501'
+ },
+ cf: 'LRNSPH34P60H501G'
+ }, {
+ item: {
+ first: 'Claudia',
+ last: 'Cardinale',
+ gender: 'Female',
+ birthday: new Date(1938,3,15),
+ city: 'z352'
+ },
+ cf: 'CRDCLD38D55Z352Q'
+ }, {
+ item: {
+ first: 'Sergio',
+ last: 'Leone',
+ gender: 'Male',
+ birthday: new Date(1929,0,3),
+ city: 'h501'
+ },
+ cf: 'LNESRG29A03H501W'
+ }, {
+ item: {
+ first: 'Claudio',
+ last: 'Marchisio',
+ gender: 'Male',
+ birthday: new Date(1986,0,19),
+ city: 'l219'
+ },
+ cf: 'MRCCLD86A19L219F'
+ }, {
+ item: {
+ first: 'Eu',
+ last: 'Ho',
+ gender: 'Male',
+ birthday: new Date(2012,3,12),
+ city: 'z210'
+ },
+ cf: 'HOXEUX12D12Z210Q'
+ }];
+
+ testCases.map((test) => {
+ t.is(chance.cf(test.item), test.cf)
+ })
+})
+
+// chance.pl_nip()
+test('pl_nip() returns a valid NIP number', t => {
+ _.times(1000, () => {
+ let nip = chance.pl_nip()
+ t.true(_.isString(nip))
+ t.is(nip.length, 10)
+ })
+})
+
+// chance.pl_pesel()
+test('pl_pesel() returns a valid PESEL number', t => {
+ _.times(1000, () => {
+ let pesel = chance.pl_pesel()
+ t.true(_.isString(pesel))
+ t.is(pesel.length, 11)
+ })
+})
+
+// chance.pl_regon()
+test('pl_regon() returns a valid REGON number', t => {
+ _.times(1000, () => {
+ let regon = chance.pl_regon()
+ t.true(_.isString(regon))
+ t.is(regon.length, 9)
+ })
+})
+
+// chance.vat()
+test('vat() returns a valid italian vat number', t => {
+ _.times(1000, () => {
+ let vat = chance.vat({ country: 'it' })
+ t.true(_.isString(vat))
+ t.is(vat.length, 11)
+ let first = vat.charAt(0)
+ t.true(first === '0' || first === '1')
+ t.true(chance.luhn_check(vat))
+ })
+})
diff --git a/src/node_modules/chance/test/test.text.js b/src/node_modules/chance/test/test.text.js
new file mode 100644
index 0000000..0bbd644
--- /dev/null
+++ b/src/node_modules/chance/test/test.text.js
@@ -0,0 +1,123 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.sentence()
+test('sentence() returns a random sentence', t => {
+ _.times(1000, () => {
+ let sentence = chance.sentence()
+ t.true(_.isString(sentence))
+ let len = sentence.split(' ').length
+ t.true(len > 11)
+ t.true(len < 19)
+ })
+})
+
+test('sentence() will obey bounds', t => {
+ _.times(1000, () => {
+ let sentence = chance.sentence({ words: 5 })
+ t.true(_.isString(sentence))
+ t.is(sentence.split(' ').length, 5)
+ t.true(/[a-zA-Z]+ [a-zA-Z]+ [a-zA-Z]+ [a-zA-Z]+ [a-zA-Z]+.?/m.test(sentence))
+ })
+})
+
+// chance.syllable()
+test('syllable() returns a random syllable', t => {
+ _.times(1000, () => {
+ let syllable = chance.syllable()
+ t.true(_.isString(syllable))
+ t.true(syllable.length > 1)
+ t.true(syllable.length < 4)
+ })
+})
+
+test('syllable() obeys the capitalize option', t => {
+ _.times(1000, () => {
+ let syllable = chance.syllable({ capitalize: true })
+ t.true(_.isString(syllable))
+ t.true(syllable.length > 1)
+ t.true(syllable.length < 4)
+ t.true(/[A-Z]+/.test(syllable))
+ })
+})
+
+// chance.word()
+test('word() returns a random word', t => {
+ _.times(1000, () => {
+ let word = chance.word()
+ t.true(_.isString(word))
+ t.true(word.length > 1)
+ t.true(word.length < 10)
+ })
+})
+
+test('word() obeys the capitalize option', t => {
+ _.times(1000, () => {
+ let word = chance.word({ capitalize: true })
+ t.true(_.isString(word))
+ t.true(word.length > 1)
+ t.true(word.length < 10)
+ t.true(word.charAt(0) === word.charAt(0).toUpperCase())
+ })
+})
+
+test('word() can have a set number of syllables', t => {
+ _.times(1000, () => {
+ let word = chance.word({ syllables: 3 })
+ t.true(_.isString(word))
+ t.true(word.length > 5)
+ t.true(word.length < 10)
+ })
+})
+
+test('word() can have a set length', t => {
+ _.times(1000, () => {
+ let word = chance.word({ length: 5 })
+ t.true(_.isString(word))
+ t.is(word.length, 5)
+ })
+})
+
+test('word() throws if both syllables and length specified', t => {
+ const fn = () => chance.word({ syllables: 3, length: 20 })
+ t.throws(fn, 'Chance: Cannot specify both syllables AND length.')
+})
+
+// chance.paragraph()
+test('paragraph() returns a random paragraph', t => {
+ _.times(100, () => {
+ let paragraph = chance.paragraph()
+ t.true(_.isString(paragraph))
+
+ let len = paragraph.split('.').length
+ t.true(len > 2)
+ t.true(len < 9)
+ })
+})
+
+test('paragraph() will obey bounds', t => {
+ _.times(100, () => {
+ let paragraph = chance.paragraph({ sentences: 5 })
+ t.true(_.isString(paragraph))
+
+ // Have to account for the fact that the period at the end will add
+ // to the count of sentences. This is the fault of our hackish way
+ // of detecting sentences -- by splitting on '.'
+ let len = paragraph.split('.').length
+ t.is(len, 6)
+ })
+})
+
+test('paragraph) will obey line breaks', t => {
+ _.times(100, () => {
+ let rand = _.random(1, 50);
+ let paragraph = chance.paragraph({ sentences: rand, linebreak: true })
+ t.true(_.isString(paragraph))
+
+ let len = paragraph.split('\n').length
+ t.is(len, rand);
+ })
+})
diff --git a/src/node_modules/chance/test/test.time.js b/src/node_modules/chance/test/test.time.js
new file mode 100644
index 0000000..cead8dc
--- /dev/null
+++ b/src/node_modules/chance/test/test.time.js
@@ -0,0 +1,299 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.ampm()
+test('ampm() returns am or pm', t => {
+ _.times(1000, () => {
+ let ampm = chance.ampm()
+ t.true(_.isString(ampm))
+ t.true(/^([ap]m)$/m.test(ampm))
+ })
+})
+
+// chance.date()
+test('date() returns a random date', t => {
+ _.times(1000, () => {
+ let date = chance.date()
+ t.true(_.isDate(date))
+ t.truthy(date.getTime())
+ })
+})
+
+test('date() accepts an american option', t => {
+ _.times(1000, () => {
+ let date = chance.date({ american: chance.bool() })
+ t.true(_.isDate(date))
+ t.truthy(date.getTime())
+ })
+})
+
+test('date() can have some default provided and obey them', t => {
+ _.times(1000, () => {
+ // One of each month type in terms of number of days.
+ let month = [0, 1, 3][Math.floor(Math.random() * 3)]
+
+ let date = chance.date({ year: 1983 })
+ t.true(_.isDate(date))
+ t.is(date.getFullYear(), 1983)
+
+ date = chance.date({ month: month })
+ t.true(_.isDate(date))
+ t.is(date.getMonth(), month)
+
+ date = chance.date({ day: 21 })
+ t.true(_.isDate(date))
+ t.is(date.getDate(), 21)
+ })
+})
+
+test('date() can specify min and max', t => {
+ _.times(1000, () => {
+ let bounds = {
+ min: new Date(),
+ max: new Date(new Date().getTime() + 1234567890123),
+ }
+ let date = chance.date(bounds)
+ t.true(_.isDate(date))
+ t.true(date >= bounds.min)
+ t.true(date <= bounds.max)
+ })
+})
+
+test('date() returns a date, can specify just min', t => {
+ _.times(1000, () => {
+ let bounds = { min: new Date() }
+ let date = chance.date(bounds)
+ t.true(_.isDate(date))
+ t.true(date >= bounds.min)
+ })
+})
+
+test('date() returns a date, can specify just max', t => {
+ _.times(1000, () => {
+ let bounds = { max: new Date() }
+ let date = chance.date(bounds)
+ t.true(_.isDate(date))
+ t.true(date <= bounds.max)
+ })
+})
+
+test('date() can return a string date', t => {
+ _.times(1000, () => {
+ let date = chance.date({ string: true })
+ t.true(_.isString(date))
+ t.true(/^[0-9][0-9]?\/[0-9][0-9]?\/[0-9]{4}/m.test(date))
+ })
+})
+
+// chance.hammertime()
+test('hammertime() works', t => {
+ _.times(1000, () => {
+ let hammertime = chance.hammertime()
+ t.true(_.isNumber(hammertime))
+ t.true(hammertime > 0)
+ t.true(hammertime < 8640000000000000)
+ })
+})
+
+// chance.hour()
+test('hour() returns an hour', t => {
+ _.times(1000, () => {
+ let hour = chance.hour()
+ t.true(_.isNumber(hour))
+ t.true(hour >= 1)
+ t.true(hour <= 12)
+ })
+})
+
+test('hour() returns an hour in 24 hour format', t => {
+ _.times(1000, () => {
+ let hour = chance.hour({ twentyfour: true })
+ t.true(_.isNumber(hour))
+ t.true(hour >= 0)
+ t.true(hour <= 23)
+ })
+})
+
+test('hour() returns an hour, can specify min and max', t => {
+ _.times(1000, () => {
+ let hour = chance.hour({ min: 7, max: 10 })
+ t.true(_.isNumber(hour))
+ t.true(hour >= 7)
+ t.true(hour <= 10)
+ })
+})
+
+test('hour() returns an hour, can specify just min', t => {
+ _.times(1000, () => {
+ let hour = chance.hour({ min: 7 })
+ t.true(_.isNumber(hour))
+ t.true(hour >= 7)
+ t.true(hour <= 12)
+ })
+})
+
+test('hour() returns an hour, can specify just max', t => {
+ _.times(1000, () => {
+ let hour = chance.hour({ max: 10 })
+ t.true(_.isNumber(hour))
+ t.true(hour >= 1)
+ t.true(hour <= 10)
+ })
+})
+
+// chance.minute()
+test('minute() returns a minute', t => {
+ _.times(1000, () => {
+ let minute = chance.minute()
+ t.true(_.isNumber(minute))
+ t.true(minute >= 0)
+ t.true(minute <= 59)
+ })
+})
+
+test('minute() returns an minute, can specify min and max', t => {
+ _.times(1000, () => {
+ let minute = chance.minute({ min: 18, max: 35 })
+ t.true(_.isNumber(minute))
+ t.true(minute >= 18)
+ t.true(minute <= 35)
+ })
+})
+
+test('minute() returns an minute, can specify just min', t => {
+ _.times(1000, () => {
+ let minute = chance.minute({ min: 5 })
+ t.true(_.isNumber(minute))
+ t.true(minute >= 5)
+ t.true(minute <= 59)
+ })
+})
+
+test('minute() returns an minute, can specify just max', t => {
+ _.times(1000, () => {
+ let minute = chance.minute({ max: 32 })
+ t.true(_.isNumber(minute))
+ t.true(minute >= 0)
+ t.true(minute <= 32)
+ })
+})
+
+test('month() returns a month', t => {
+ _.times(1000, () => {
+ let month = chance.month()
+ t.true(_.isString(month))
+ })
+})
+
+test('month() will return a raw month', t => {
+ _.times(1000, () => {
+ let month = chance.month({ raw: true })
+ t.false(_.isString(month))
+ t.true(_.isObject(month))
+ })
+})
+
+test('month() returns a month, can specify min and max', t => {
+ _.times(1000, () => {
+ let month = chance.month({raw: true, min: 5, max: 10})
+ t.false(_.isString(month))
+ t.true(month.numeric >= 5)
+ t.true(month.numeric <= 10)
+ })
+})
+
+test('month() returns a month, can specify just min', t => {
+ _.times(1000, () => {
+ let month = chance.month({raw: true, min: 5})
+ t.false(_.isString(month))
+ t.true(month.numeric >= 5)
+ t.true(month.numeric <= 12)
+ })
+})
+
+test('month() returns a month, can specify just max', t => {
+ _.times(1000, () => {
+ let month = chance.month({raw: true, max: 7})
+ t.false(_.isString(month))
+ t.true(month.numeric >= 1)
+ t.true(month.numeric <= 7)
+ })
+})
+
+// chance.timestamp()
+test('timestamp() returns a timestamp', t => {
+ _.times(1000, () => {
+ let timestamp = chance.timestamp()
+ t.true(_.isNumber(timestamp))
+ t.true(timestamp > 0)
+ t.true(timestamp <= parseInt(new Date().getTime() / 1000, 10))
+ })
+})
+
+// chance.timezone()
+test('timezone() returns a timezone', t => {
+ _.times(1000, () => {
+ let timezone = chance.timezone()
+ t.true(_.isString(timezone.name))
+ t.true(timezone.abbr.length < 6)
+ t.true(_.isNumber(timezone.offset))
+ })
+})
+
+// chance.weekday()
+test('weekday() will return a weekday as a string', t => {
+ _.times(1000, () => {
+ let weekday = chance.weekday()
+ t.true(_.isString(weekday))
+ })
+})
+
+test('weekday() can take work: true and obey it', t => {
+ _.times(1000, () => {
+ let weekday = chance.weekday({ weekday_only: true })
+ t.true(_.isString(weekday))
+ t.not(weekday, 'Saturday')
+ t.not(weekday, 'Sunday')
+ })
+})
+
+// chance.year()
+test('year() returns a year, default between today and a century after', t => {
+ _.times(1000, () => {
+ let year = chance.year()
+ t.true(_.isString(year))
+ t.true(year >= new Date().getFullYear())
+ t.true(year <= new Date().getFullYear() + 100)
+ })
+})
+
+test('year() returns a year, can specify min and max', t => {
+ _.times(1000, () => {
+ let year = chance.year({ min: 2500, max: 2600 })
+ t.true(_.isString(year))
+ t.true(year >= 2500)
+ t.true(year <= 2600)
+ })
+})
+
+test('year() returns a year, can specify just min', t => {
+ _.times(1000, () => {
+ let year = chance.year({ min: 2500 })
+ t.true(_.isString(year))
+ t.true(year >= 2500)
+ })
+})
+
+test('year() returns a year, can specify just max', t => {
+ _.times(1000, () => {
+ let year = chance.year({ max: 2500 })
+ t.true(_.isString(year))
+ t.true(year <= 2501)
+ // Ensure year not negative. Perhaps add BCE/AD and such later,
+ // but for now just positive is good enough.
+ t.true(year >= 0)
+ })
+})
diff --git a/src/node_modules/chance/test/test.web.js b/src/node_modules/chance/test/test.web.js
new file mode 100644
index 0000000..63e5b62
--- /dev/null
+++ b/src/node_modules/chance/test/test.web.js
@@ -0,0 +1,597 @@
+import test from 'ava'
+import Chance from '../chance.js'
+import _ from 'lodash'
+
+const chance = new Chance()
+
+// chance.avatar()
+test('avatar() returns a legit avatar', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar()
+ t.true(_.isString(avatar))
+ t.is(avatar.split('/').length, 5)
+ })
+})
+
+test('avatar() can take and ignore an invalid protocol', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar({ protocol: 'invalid' })
+ t.true(_.isString(avatar))
+ t.is(avatar.indexOf('//'), 0)
+ })
+})
+
+test('avatar() can take and respect a protocol', t => {
+ const protocols = ['http', 'https']
+ _.times(500, () => {
+ protocols.map((protocol) => {
+ let avatar = chance.avatar({ protocol: protocol })
+ t.true(_.isString(avatar))
+ t.is(avatar.indexOf(protocol + ":"), 0)
+ })
+ })
+})
+
+test('avatar() can take and respect email', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar({ email: chance.email() })
+ t.true(_.isString(avatar))
+ t.is(avatar.split('/').length, 5)
+ })
+})
+
+test('avatar() can take and ignore an invalid file extension', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar({ fileExtension: 'invalid' })
+ t.true(_.isString(avatar))
+ t.false(avatar.includes('.jpg'))
+ t.false(avatar.includes('.png'))
+ t.false(avatar.includes('.gif'))
+ })
+})
+
+test('avatar() can take and respect a legit file extension', t => {
+ let file_types = ['bmp', 'gif', 'jpg', 'png']
+ _.times(250, () => {
+ _.times(file_types.length, (index) => {
+ let avatar = chance.avatar({ fileExtension: file_types[index] })
+ t.true(_.isString(avatar))
+ t.true(avatar.includes('.' + file_types[index]))
+ })
+ })
+})
+
+test('avatar() can take and ignore an invalid size', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar({ size: 'abc' })
+ t.true(_.isString(avatar))
+ t.false(avatar.includes('&s='))
+ })
+})
+
+test('avatar() can take and respect a legit size', t => {
+ _.times(1000, (index) => {
+ let avatar = chance.avatar({ size: index + 1 })
+ t.true(_.isString(avatar))
+ t.true(avatar.includes('&s=' + (index + 1).toString()))
+ })
+})
+
+test('avatar() can take and ignore an invalid rating', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar({ rating: 'invalid' })
+ t.true(_.isString(avatar))
+ t.false(avatar.includes('&r='))
+ })
+})
+
+test('avatar() can take and respect a rating', t => {
+ let ratings = ['g', 'pg', 'r', 'x']
+ _.times(250, () => {
+ _.times(ratings.length, (index) => {
+ let avatar = chance.avatar({ rating: ratings[index] })
+ t.true(_.isString(avatar))
+ t.true(avatar.includes('&r=' + ratings[index]))
+ })
+ })
+})
+
+test('avatar() can take and ignore an invalid fallback image', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar({ fallback: 'invalid' })
+ t.true(_.isString(avatar))
+ t.false(avatar.includes('&d='))
+ })
+})
+
+test('avatar() can take just an email', t => {
+ _.times(1000, () => {
+ let avatar = chance.avatar('mail@victorquinn.com')
+ t.true(_.isString(avatar))
+ t.false(avatar.includes('&d='))
+ })
+})
+
+test('avatar() can take and respect a fallback image', t => {
+ let fallbacks = [
+ '404', // Return 404 if not found
+ 'mm', // Mystery man
+ 'identicon', // Geometric pattern based on hash
+ 'monsterid', // A generated monster icon
+ 'wavatar', // A generated face
+ 'retro', // 8-bit icon
+ 'blank' // A transparent png
+ ]
+ _.times(100, () => {
+ _.times(fallbacks.length, (index) => {
+ let avatar = chance.avatar({ fallback: fallbacks[index] })
+ t.true(_.isString(avatar))
+ t.true(avatar.includes('&d=' + fallbacks[index]))
+ })
+ })
+})
+
+// chance.color()
+test('color() returns what looks like a hex color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'hex' })
+ t.true(_.isString(color))
+ t.is(color.length, 7)
+ t.true(/#[a-z0-9]+/m.test(color))
+ })
+})
+
+test('color() returns what looks like a gray scale hex color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'hex', grayscale: true })
+ t.true(_.isString(color))
+ t.is(color.length, 7)
+ t.true(/#[a-z0-9]+/m.test(color))
+ t.is(color.slice(1, 3), color.slice(3, 5))
+ t.is(color.slice(1, 3), color.slice(5, 7))
+ })
+})
+
+test('color() returns a short hex color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'shorthex' })
+ t.true(_.isString(color))
+ t.is(color.length, 4)
+ t.true(/#[a-z0-9]+/m.test(color))
+ })
+})
+
+test('color() returns what looks like a grayscale short hex color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'shorthex', grayscale: true })
+ t.true(_.isString(color))
+ t.is(color.length, 4)
+ t.is(color.slice(1, 2), color.slice(2, 3))
+ t.is(color.slice(1, 2), color.slice(3, 4))
+ })
+})
+
+test('color() returns what looks like an rgb color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'rgb' })
+ t.true(_.isString(color))
+ let match = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/.exec(color)
+ t.is(match.length, 4)
+ t.true(match[1] >= 0)
+ t.true(match[1] <= 255)
+ t.true(match[2] >= 0)
+ t.true(match[2] <= 255)
+ t.true(match[3] >= 0)
+ t.true(match[3] <= 255)
+ })
+})
+
+test('color() returns what looks like a grayscale rgb color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'rgb', grayscale: true })
+ t.true(_.isString(color))
+ let match = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/.exec(color)
+ t.is(match.length, 4)
+ t.true(match[1] >= 0)
+ t.true(match[1] <= 255)
+ t.is(match[1], match[2])
+ t.is(match[1], match[3])
+ })
+})
+
+test('color() returns what looks like an rgba color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'rgba' })
+ t.true(_.isString(color))
+ let match = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),([01]\.?\d*?)\)/.exec(color)
+ t.is(match.length, 5)
+ t.true(match[1] >= 0)
+ t.true(match[1] <= 255)
+ t.true(match[2] >= 0)
+ t.true(match[2] <= 255)
+ t.true(match[3] >= 0)
+ t.true(match[3] <= 255)
+ t.true(match[4] >= 0)
+ t.true(match[4] <= 255)
+ })
+})
+
+test('color() returns what looks like a grayscale rgba color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'rgba', grayscale: true })
+ t.true(_.isString(color))
+ let match = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),([01]\.?\d*?)\)/.exec(color)
+ t.is(match.length, 5)
+ t.true(match[1] >= 0)
+ t.true(match[1] <= 255)
+ t.true(match[2] >= 0)
+ t.true(match[2] <= 255)
+ t.true(match[3] >= 0)
+ t.true(match[3] <= 255)
+ t.true(match[4] >= 0)
+ t.true(match[4] <= 255)
+ t.is(match[1], match[2])
+ t.is(match[1], match[3])
+ t.true(match[4] >= 0)
+ t.true(match[4] <= 1)
+ })
+})
+
+test('color() 0x color works', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: '0x' })
+ t.true(_.isString(color))
+ t.is(color.length, 8)
+ t.true(/0x[a-z0-9]+/m.test(color))
+ })
+})
+
+test('color() with name returns a valid color name', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'name' })
+ t.true(_.isString(color))
+ })
+})
+
+test('color() upper case returns upper cased color', t => {
+ _.times(1000, () => {
+ let color = chance.color({ format: 'hex', casing: 'upper' })
+ t.true(_.isString(color))
+ t.is(color.length, 7)
+ t.is(color.charAt(1).toUpperCase(), color.charAt(1))
+ t.is(color.charAt(2).toUpperCase(), color.charAt(2))
+ t.is(color.charAt(3).toUpperCase(), color.charAt(3))
+ t.is(color.charAt(4).toUpperCase(), color.charAt(4))
+ t.is(color.charAt(5).toUpperCase(), color.charAt(5))
+ t.is(color.charAt(6).toUpperCase(), color.charAt(6))
+ })
+})
+
+test('color() bogus format throws error', t => {
+ const fn = () => chance.color({ format: 'banana' })
+ t.throws(fn)
+})
+
+// chance.domain()
+test('domain() returns a domain', t => {
+ _.times(1000, () => {
+ let domain = chance.domain()
+ t.true(_.isString(domain))
+ t.true(domain.split('.').length > 1)
+ })
+})
+
+test('domain() obeys tld, if specified', t => {
+ _.times(1000, () => {
+ let domain = chance.domain({ tld: 'com' })
+ t.true(_.isString(domain))
+ t.is(domain.split('.')[1], 'com')
+ })
+})
+
+// chance.email()
+test('email() returns what looks like an email', t => {
+ _.times(1000, () => {
+ let email = chance.email()
+ t.true(_.isString(email))
+ t.true(email.split('@').length > 1)
+ })
+})
+
+test('email() obeys domain, if specified', t => {
+ _.times(1000, () => {
+ let email = chance.email({ domain: 'victorquinn.com' })
+ t.true(_.isString(email))
+ t.is(email.split('@')[1], 'victorquinn.com')
+ })
+})
+
+test('email() has a leng specified, should generate string before domain with equal length', t => {
+ _.times(1000, () => {
+ let email = chance.email({ length: 5 })
+ t.is(email.split('@')[0].length, 5)
+ })
+})
+
+// chance.fbid()
+test('fbid() returns what looks like a Facebook id', t => {
+ _.times(1000, () => {
+ let fbid = chance.fbid()
+ t.true(_.isString(fbid))
+ t.is(fbid.length, 16)
+ })
+})
+
+// chance.google_analytics()
+test('google_analytics() returns what looks like a valid tracking code', t => {
+ _.times(1000, () => {
+ let tracking_code = chance.google_analytics()
+ t.true(_.isString(tracking_code))
+ t.is(tracking_code.length, 12)
+ t.true(tracking_code.includes('UA-'))
+ })
+})
+
+// chance.hashtag()
+test('hashtag() returns what looks like a hashtag', t => {
+ _.times(1000, () => {
+ let hashtag = chance.hashtag()
+ t.true(_.isString(hashtag))
+ t.true(/^\#\w+$/m.test(hashtag))
+ })
+})
+
+// chance.ip()
+test('ip() returns what looks like an IP address', t => {
+ _.times(1000, () => {
+ let ip = chance.ip()
+ t.true(_.isString(ip))
+ t.is(ip.split('.').length, 4)
+ t.true(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/.test(ip))
+ })
+})
+
+// chance.ipv6()
+test('ipv6() returns what looks like an IP address (v6)', t => {
+ _.times(1000, () => {
+ let ipv6 = chance.ipv6()
+ t.true(_.isString(ipv6))
+ t.is(ipv6.split(':').length, 8)
+ t.true(/[a-f0-9]+:[a-f0-9]+:[a-f0-9]+:[a-f0-9]+:[a-f0-9]+:[a-f0-9]+:[a-f0-9]+:[a-f0-9]+/.test(ipv6))
+ })
+})
+
+// chance.klout()
+test('klout() returns what looks like a legit Klout score', t => {
+ _.times(1000, () => {
+ let klout = chance.klout()
+ t.true(_.isNumber(klout))
+ t.true(klout > 0)
+ t.true(klout <= 100)
+ })
+})
+
+// chance.locale()
+test('locale() should create a valid two character locale with only language', t => {
+ let locale = chance.locale()
+ t.true(_.isString(locale))
+ t.is(locale.length, 2)
+})
+
+test('locale() should create a locale with a region code', t => {
+ let locale = chance.locale({ region: true })
+ t.true(_.isString(locale))
+ t.true(locale.split('-').length >= 2)
+})
+
+// chance.locales()
+test('locales() should return a list of locales', t => {
+ let locales = chance.locales()
+ t.true(_.isArray(locales))
+ t.true(locales.length > 100)
+})
+
+test('locales() should return a list of locales', t => {
+ let locales = chance.locales({ region: true })
+ t.true(_.isArray(locales))
+ t.true(locales.length > 100)
+})
+
+// chance.md5()
+test('md5() should create a hex-encoded MD5 hash of a random ASCII value when passed nothing', t => {
+ t.is(chance.md5().length, '2063c1608d6e0baf80249c42e2be5804'.length)
+})
+
+test('md5() should create a hex-encoded MD5 hash of an ASCII value when passed a string', t => {
+ t.is(chance.md5('value'), '2063c1608d6e0baf80249c42e2be5804')
+})
+
+test('md5() should create a hex-encoded MD5 hash of an ASCII value when passed an object', t => {
+ t.is(chance.md5({ str: 'value' }), '2063c1608d6e0baf80249c42e2be5804')
+})
+
+test('md5() should create a hex-encoded MD5 hash of a UTF-8 value', t => {
+ t.is(chance.md5('日本'), '4dbed2e657457884e67137d3514119b3')
+})
+
+test('md5() should create a hex-encoded HMAC-MD5 hash of an ASCII value and key', t => {
+ t.is(chance.md5({ str: 'value', key: 'key' }), '01433efd5f16327ea4b31144572c67f6')
+})
+
+test('md5() should create a hex-encoded HMAC-MD5 hash of a UTF-8 value and key', t => {
+ t.is(chance.md5({ str: '日本', key: '日本' }), 'c78b8c7357926981cc04740bd3e9d015')
+})
+
+test('md5() should create a raw MD5 hash of an ASCII value', t => {
+ t.is(chance.md5({ str: 'value', key: null, raw: true }), ' c\xc1`\x8dn\x0b\xaf\x80$\x9cB\xe2\xbeX\x04')
+})
+
+test('md5() should create a raw MD5 hash of a UTF-8 value', t => {
+ t.is(chance.md5({ str: '日本', key: null, raw: true }), 'M\xbe\xd2\xe6WEx\x84\xe6q7\xd3QA\x19\xb3')
+})
+
+test('md5() should create a raw HMAC-MD5 hash of an ASCII value', t => {
+ t.is(chance.md5({ str: 'value', key: 'key', raw: true }), '\x01C>\xfd_\x162~\xa4\xb3\x11DW,g\xf6')
+})
+
+test('md5() should create a raw HMAC-MD5 hash of a UTF-8 value', t => {
+ t.is(chance.md5({ str: '日本', key: '日本', raw: true }), '\xc7\x8b\x8csW\x92i\x81\xcc\x04t\x0b\xd3\xe9\xd0\x15')
+})
+
+// chance.port()
+test('port() should create a number in the valid port range (0 - 65535)', t => {
+ _.times(1000, () => {
+ let port = chance.port()
+ t.true(_.isNumber(port))
+ t.true(port >= 0)
+ t.true(port <= 65535)
+ })
+})
+
+// chance.semver()
+test('semver() works as expected', t => {
+ _.times(1000, () => {
+ let semver = chance.semver()
+ t.true(_.isString(semver))
+ t.true(/[0-9]+\.[0-9]+\.[0-9]+/.test(semver))
+ })
+})
+
+test('semver() accepts a range', t => {
+ _.times(1000, () => {
+ let semver = chance.semver({ range: 'banana' })
+ t.true(_.isString(semver))
+ t.true(/^banana[0-9]+\.[0-9]+\.[0-9]+/.test(semver))
+ })
+})
+
+test('semver() accepts a prerelease flag', t => {
+ _.times(1000, () => {
+ let semver = chance.semver({ range: 'banana' })
+ t.true(_.isString(semver))
+ t.true(/[0-9]+\.[0-9]+\.[0-9]+-?[dev|beta|alpha]?/.test(semver))
+ })
+})
+
+// chance.tld()
+test('tld() returns a tld', t => {
+ _.times(1000, () => {
+ let tld = chance.tld()
+ t.true(_.isString(tld))
+ t.true(tld.length < 6)
+ })
+})
+
+// chance.twitter()
+test('twitter() returns what looks like a Twitter handle', t => {
+ _.times(1000, () => {
+ let twitter = chance.twitter()
+ t.true(_.isString(twitter))
+ t.true(/\@[A-Za-z]+/m.test(twitter))
+ })
+})
+
+// chance.url()
+test('url() deal with url', t => {
+ _.times(1000, () => {
+ let url = chance.url()
+ t.true(_.isString(url))
+ t.true(url.split('.').length > 1)
+ t.true(url.split('://').length > 1)
+ })
+})
+
+test('url() can take and respect a domain', t => {
+ _.times(1000, () => {
+ let url = chance.url({ domain: 'victorquinn.com' })
+ t.true(_.isString(url))
+ t.true(url.split('.').length > 1)
+ t.true(url.split('://').length > 1)
+ t.true(url.split('victorquinn.com').length > 1)
+ })
+})
+
+test('url() can take and respect a domain prefix', t => {
+ _.times(1000, () => {
+ let url = chance.url({ domain_prefix: 'www' })
+ t.true(_.isString(url))
+ t.true(url.split('.').length > 1)
+ t.true(url.split('://').length > 1)
+ t.true(url.split('www').length > 1)
+ })
+})
+
+test('url() can take and respect a path', t => {
+ _.times(1000, () => {
+ let url = chance.url({ path: 'images' })
+ t.true(_.isString(url))
+ t.true(url.split('.').length > 1)
+ t.true(url.split('://').length > 1)
+ t.true(url.split('/images').length > 1)
+ })
+})
+
+test('url() can take and respect extensions', t => {
+ _.times(1000, () => {
+ let url = chance.url({ extensions: ['html'] })
+ t.true(_.isString(url))
+ t.true(url.split('.').length > 1)
+ t.true(url.split('://').length > 1)
+ t.not(url.indexOf('.html'), -1)
+ })
+})
+
+// chance.loremPicsum()
+test('loremPicsum() returns loremPicsum url with default width and height', t => {
+ _.times(1000, () => {
+ let loremPicsumUrl = chance.loremPicsum()
+ t.true(_.isString(loremPicsumUrl))
+ t.true(loremPicsumUrl.split('.').length > 1)
+ t.true(loremPicsumUrl.split('://').length > 1)
+ t.true(loremPicsumUrl.split('picsum.photos').length > 1)
+ t.true(loremPicsumUrl.split('/500/500').length > 1)
+ t.true(loremPicsumUrl.split('/?random').length > 1)
+ })
+})
+test('loremPicsum() returns loremPicsum url that respects width and height', t => {
+ _.times(1000, () => {
+ let width = chance.natural();
+ let height = chance.natural();
+ let loremPicsumUrl = chance.loremPicsum({
+ width,
+ height
+ })
+ t.true(_.isString(loremPicsumUrl))
+ t.true(loremPicsumUrl.split('.').length > 1)
+ t.true(loremPicsumUrl.split('://').length > 1)
+ t.true(loremPicsumUrl.split('picsum.photos').length > 1)
+ t.true(loremPicsumUrl.split('/' + width + '/' + height).length > 1)
+ t.true(loremPicsumUrl.split('/?random').length > 1)
+ })
+})
+test('loremPicsum() returns loremPicsum url that respects greyscale', t => {
+ _.times(1000, () => {
+ let loremPicsumUrl = chance.loremPicsum({
+ greyscale: true
+ })
+ t.true(_.isString(loremPicsumUrl))
+ t.true(loremPicsumUrl.split('.').length > 1)
+ t.true(loremPicsumUrl.split('://').length > 1)
+ t.true(loremPicsumUrl.split('picsum.photos').length > 1)
+ t.true(loremPicsumUrl.split('/g/500/500').length > 1)
+ t.true(loremPicsumUrl.split('/?random').length > 1)
+ })
+})
+test('loremPicsum() returns loremPicsum url that respects blurred', t => {
+ _.times(1000, () => {
+ let loremPicsumUrl = chance.loremPicsum({
+ blurred: true
+ })
+ t.true(_.isString(loremPicsumUrl))
+ t.true(loremPicsumUrl.split('.').length > 1)
+ t.true(loremPicsumUrl.split('://').length > 1)
+ t.true(loremPicsumUrl.split('picsum.photos').length > 1)
+ t.true(loremPicsumUrl.split('/500/500').length > 1)
+ t.true(loremPicsumUrl.split('/?blur').length > 1)
+ })
+})